**** Редактировать **** Я изначально объяснил это неправильно !!!!Следующее верно, хотя - Джастин, эта программа использует умные критерии для «взвешивания» каждого события.Все значения RAB, RCD и RDC получают параметр истина / ложь путем умножения kAB, kCD и kDC на C или D, которые в этом случае могут быть равны единице или нулю.Нулевое значение для D, и, следовательно, RDC предотвратит отрисовку dt [2] в
для n в диапазоне (len (dt)): если dt [n]> 0,0 и dt [n] <интервал: </p>
оператор.Кроме того, следующее -
if transition == 1:
C -= 1
D += 1
if transition == 2:
C += 1
D -= 1
диктует, что когда происходит событие C-> D (переход 1), следующее событие обязательно должно быть D-> C (переход 2), поскольку из трех значений вdt [], только dt [1] отлично от нуля и, таким образом, соответствует вышеупомянутым критериям.Итак, как мы оцениваем вероятность того, что переход 0 или переход 1 произойдет?Это немного сложно, но присуще следующим строкам:
interval = 1e36
transition = -1
for n in range(len(dt)):
if dt[n] > 0.0 and dt[n] < interval:
interval = dt[n]
transition = n
return transition, interval
"для n в диапазоне (len (dt)):" возвращает все значения списка dt [].Следующая строка определяет критерии, которые должны быть выполнены, а именно, что каждое значение должно быть больше 0 и меньше интервала.Для перехода 0 интервал равен 1е36 (который должен представлять бесконечность).Суть в том, что интервал затем устанавливается на переход 0, поэтому для второго значения в dt [], переход 1, критерии утверждают, что он должен быть меньше, чем dt для перехода 0, чтобы происходить ... или другими словамичто это должно было произойти быстрее, чтобы произошло вообще, что согласуется с химической логикой.Больше всего меня беспокоит то, что накопленные значения t, определяемые линией «t + = интервал», могут быть не совсем справедливыми ... потому что, поскольку запуск t1 не зависит от запуска t0, запуск t0 и принятие, скажем, 0,1 секунды, не должныисключить t1 от использования того же .1 сек для стрельбы ... но я работаю над исправлением для этого ... предложения приветствуются!Это подробная распечатка из сценария, включая запуск перехода 1 и 2:
Переход времени ABCD
dt0= 0.0350693547214
dt1= 2.26710773787
interval= 1e+36
dt= 0.0350693547214
transition= 0
0.0 0 100 0 1 0
dt0= 0.000339596342313
dt1= 0.21083283004
interval= 1e+36
dt= 0.000339596342313
transition= 0
0,0350693547214 0 99 1 1 0
dt0= 0.0510125874767
dt1= 1.26127048627
interval= 1e+36
dt= 0.0510125874767
transition= 0
0,0354089510637 0 98 2 1 0
dt0= 0.0809691957218
dt1= 0.593246425076
interval= 1e+36
dt= 0.0809691957218
transition= 0
0,0864215385404 0 97 3 1 0
dt0= 0.00205040633531
dt1= 1.70623338677
interval= 1e+36
dt= 0.00205040633531
transition= 0
0,167390734262 0 964 1 0
dt0= 0.106140534256
dt1= 0.0915160378053
interval= 1e+36
dt= 0.106140534256
transition= 0
interval= 0.106140534256
dt= 0.0915160378053
transition= 1
0.169441140598 1 95 5 1 0
dt2= 0.0482892532952
interval= 1e+36
dt= 0.0482892532952
transition= 2
0.260957178403 2 95 5 0 1
dt0= 0.112545351421
dt1= 1.84936696832
interval= 1e+36
dt= 0.112545351421
transition= 0
0.309246431698 0 95 5 1 0
Джастин, я не уверен, что вы имеете в виду, когда dt [2] меньше 1e36, заставляя его «оставаться» на переходе 2?Этого не происходит из-за оператора
if transition == 2:
C += 1
D -= 1
.Кто-нибудь знает более прямой способ сделать это
Ха-ха, позвольте разгореться пламени - вы, ребята, просто потрясающие - я очень ценю обратную связь!Stackoverflow является оооочень законным.