我有以下問題,我解決不了:我在更新使用兩個變量for循環,我從其他減去一個計算值當我在我的代碼中的不同點進行計算時不同,即使兩個變量之間沒有變化。計算錯誤在我的代碼做在不同的點計算時
特別,我計算值co[t] = max([0, est[t][ch] - est[t][sug] + eps])
,前一次爲我設置est[t+1]
價值觀和後一次。下面是一個示例輸出,其中問題可以看出:
494: Accepted
494: co[t] pre = 2.11863208054
494: co[t] post = 1.69490566443
494: est[t][ch] = 2.49012790412
494: est[t][sug[t]] = 0.805222239686
顯然,值co[t] post
是正確的,而co[t] pre
不正確。下面是用來產生該輸出的代碼:
sug = [0 for i in time]
co = [0 for i in time]
est = [[0 for i in op] for j in time]
eps = 0.01
alph = 0.2
for t in time:
ch = random.choice(op)
sug[t] = random.choice(op)
co[t] = max([0, est[t][ch] - est[t][sug[t]] + eps])
if t < T-1:
est[t+1] = est[t]
if ac[ch] >= ac[sug[t]] + co[t]:
print '%s: Declined' % t
est[t+1][ch] += alph*co[t]
elif ac[ch] < ac[sug[t]] + co[t]:
print '%s Accepted' % t
est[t+1][ch] -= alph*co[t]
else:
break
print '%s: co[t] pre = %s' % (t, co[t])
print '%s: co[t] post = %s' % (t, max([0, est[t][ch] - est[t][sug[t]] + eps]))
print '%s: est[t][ch] = %s' % (t, est[t][ch])
print '%s: est[t][sug[t]] = %s' % (t, est[t][sug[t]])
如可以看到的,co[t] pre
被計算之前if t < T-1
-clause,而co[t] post
之後計算的。請注意,if-clause中不會更改est[t][ch]
和est[t][sug]
。
我無法解釋爲什麼會發生這種情況!
我道歉,如果這個問題已經被問過。在尋找它,我只發現其中大量的浮點數引起的問題的問題,但我不認爲這是與此有關,因爲我使用的是完全相同的變量(est[t][ch]
和est[t][sug]
)兩次我計算co[t]
。
任何幫助非常感謝!提前致謝。
編輯:道歉,代碼的缺失部分是:
import random
op = [i for i in range(4)]
ac = [3, 2, 1, 0]
T = 500
time = range(T)
代碼中'time'和'op'的值是多少? –
...和'T' ..... – glibdud
時間設置爲'時間=範圍(T)',其中'T = 500' – Anwa