Event chain.py
From Werner KRAUTH
(Difference between revisions)
Revision as of 21:14, 22 September 2015 Werner (Talk | contribs) ← Previous diff |
Revision as of 21:15, 22 September 2015 Werner (Talk | contribs) Next diff → |
||
Line 1: | Line 1: | ||
import random, math | import random, math | ||
- | + | ||
def event(a, b, dirc, sigma): | def event(a, b, dirc, sigma): | ||
d_perp = abs(b[not dirc] - a[not dirc]) % 1.0 | d_perp = abs(b[not dirc] - a[not dirc]) % 1.0 | ||
Line 9: | Line 9: | ||
d_para = math.sqrt(4.0 * sigma ** 2 - d_perp ** 2) | d_para = math.sqrt(4.0 * sigma ** 2 - d_perp ** 2) | ||
return (b[dirc] - a[dirc] - d_para + 1.0) % 1.0 | return (b[dirc] - a[dirc] - d_para + 1.0) % 1.0 | ||
- | + | ||
L = [[0.25, 0.25], [0.25, 0.75], [0.75, 0.25], [0.75, 0.75]] | L = [[0.25, 0.25], [0.25, 0.75], [0.75, 0.25], [0.75, 0.75]] | ||
ltilde = 0.819284; sigma = 0.15 | ltilde = 0.819284; sigma = 0.15 | ||
Line 26: | Line 26: | ||
event_min = event_b | event_min = event_b | ||
a[dirc] = (a[dirc] + event_min) % 1.0 | a[dirc] = (a[dirc] + event_min) % 1.0 | ||
- | istance_to_go -= event_min | + | distance_to_go -= event_min |
Revision as of 21:15, 22 September 2015
import random, math def event(a, b, dirc, sigma): d_perp = abs(b[not dirc] - a[not dirc]) % 1.0 d_perp = min(d_perp, 1.0 - d_perp) if d_perp > 2.0 * sigma: return float("inf") else: d_para = math.sqrt(4.0 * sigma ** 2 - d_perp ** 2) return (b[dirc] - a[dirc] - d_para + 1.0) % 1.0 L = [[0.25, 0.25], [0.25, 0.75], [0.75, 0.25], [0.75, 0.75]] ltilde = 0.819284; sigma = 0.15 for iter in xrange(20000): dirc = random.randint(0, 1) print iter, dirc, L distance_to_go = ltilde next_a = random.choice(L) while distance_to_go > 0.0: a = next_a event_min = distance_to_go for b in [x for x in L if x != a]: event_b = event(a, b, dirc, sigma) if event_b < event_min: next_a = b event_min = event_b a[dirc] = (a[dirc] + event_min) % 1.0 distance_to_go -= event_min