<p>插入<code>while</code>循环以重复所需的计算。你知道吗</p>
<p>当<code>L > R</code>、<code>Wo</code>和<code>Omo</code>用<code>Omn</code>和<code>Wn</code>值更新时。所以如果这个值是<code>Omn<0</code>或者<code>Wn>0</code>,你需要重新计算它们。
从上一次迭代计算<code>L <= R</code>、<code>Wo</code>和<code>Omo</code>时。因为上一次迭代已经是<code>Wo[i]<=0</code>和<code>Omo[i]>=0</code>,所以不需要重复这些计算。你知道吗</p>
<p>因此,如下面的代码所示,您只需要重新计算Omn和Wn变量:</p>
<pre><code>Omo[0] = 0.24
Wo[0] = -0.2
Mo[0] = 1.0
N = 101
for i in range (1,N):
is_valid = False
if __debug__:
print "Calculating position " + str(i)
while (not is_valid):
Omn[i] = Omo[i-1] + 0.05 * np.random.normal()
Wn[i] = Wo[i-1] + 0.05 * np.random.normal()
Mn[i] = Mo[i-1] + 0.1 * np.random.normal()
if __debug__:
print "- is_valid iteration values: " + str(Wn[i]) + " " + str(Omn[i])
print "- is_valid previous values: " + str(Wo[i-1]) + " " + str(Omo[i-1])
is_valid = Omn[i] >= 0 and Wn[i] <= 0
R = np.random.uniform(0,1)
L = exp(-0.5 * ( func(Omn[i], Wn[i], Mn[i] ) - func( Omo[i-1], Wo[i-1], Mo[i-1] )))
if L > R:
Omo[i] = Omn[i]
Wo[i] = Wn[i]
Mo[i] = Mn[i]
else:
Omo[i] = Omo[i-1]
Wo[i] = Wo[i-1]
Mo[i] = Mo[i-1]
print(Wo[i], Mo[i], Omo[i])
</code></pre>