JRM 是二维 list, best_RJM 总是返回循环最后一次生成的 new_RJM 而不是 best_cost 对应的 new_RJM. 这里的 list 需要怎么处理才能正确值呢?
def sls(RJM, n):
initNode = Node(0, 0)
initNode.distance = 0
best_cost = ucs(RJM, initNode)
# best_RJM = RJM
for i in range(n):
new_RJM = random_change(RJM,len(RJM))
result = ucs(new_RJM, initNode)
if best_cost < result:
best_cost = result
RJM = new_RJM
best_RJM = new_RJM
else:
pass
return best_RJM, best_cost
1
jky 2015-10-07 03:51:42 +08:00 via Android 1
目测 best_RJM 和 new_RJM 都指向 RJM ,给 best_RJM 或 new_RJM 赋值的时候新建一个 list 应该就可以了
|
2
biggun 2015-10-07 04:10:48 +08:00 2
import copy
RJM = copy.deepcopy(new_RJM) best_RJM = copy.deepcopy(new_RJM) 或者 RJM = new_RJM[:] best_RJM = new_RJM[:] python 里一般的 assignment 都是指向同一个 reference 。所以本质上 best_RJM, new_RJM 和 RJM 都是一个东西 |
3
lbfeng OP @jky 已改成 best_RJM = list(new_RJM) 结果居然没变,还是返回循环最后一次生成的 new_RJM 。
|
4
lbfeng OP |