基于python的统一代价搜索算法
考虑一个状态空间,其中开始状态为2,每个状态基于python的统一代价搜索算法,python,algorithm,search,Python,Algorithm,Search,考虑一个状态空间,其中开始状态为2,每个状态k有三个后继状态:数字2k,2k+1,2k+2。从状态k到每个相应子级的成本为k、地面(k/2)、k+2 我想用python实现一个统一的成本搜索算法。目标状态是数字85。取一个数组,最初0表示每个状态(0..85) 从开始状态(2)迭代到目标/2(85/2) 在每个状态下,计算可能的后继者,以及从当前状态移动到那里的成本(当前状态的成本在数组中) 如果您刚才计算的成本低于之前的成本,或者之前的成本为0,请在possions compute更新成本 从
k
有三个后继状态:数字2k,2k+1,2k+2
。从状态k到每个相应子级的成本为k、地面(k/2)、k+2
我想用python实现一个统一的成本搜索算法。目标状态是数字85。取一个数组,最初0表示每个状态(0..85) 从开始状态(2)迭代到目标/2(85/2) 在每个状态下,计算可能的后继者,以及从当前状态移动到那里的成本(当前状态的成本在数组中) 如果您刚才计算的成本低于之前的成本,或者之前的成本为0,请在possions compute更新成本 从目标状态对应的数组中获取成本。如果是0,就不可能到达 代码应该是这样的
import math
goal = 85
state = [-1] * (goal + 1)
state[2] = 0
for k in range(2 , goal/2 + 1):
if state[k] < 0: continue
for pos, cost in [
(k*2, k),
(k*2 + 1, math.floor(k/2)),
(k*2+2, k+2)]:
if pos > goal: continue
if state[pos] == -1 or state[pos] > state[k] + cost:
state[pos] = state[k] + cost
# Possibly store k somewhere to build the solution.
print state[goal]
导入数学
目标=85
状态=[-1]*(目标+1)
状态[2]=0
对于范围内的k(2,目标/2+1):
如果状态[k]<0:继续
对于pos,成本为[
(k*2,k),
(k*2+1,数学层(k/2)),
(k*2+2,k+2)]:
如果位置>目标:继续
如果状态[pos]==-1或状态[pos]>状态[k]+成本:
状态[pos]=状态[k]+成本
#可能将k存储在某个地方以构建解决方案。
打印状态[目标]
要理解从2到85,一种可能性是以下状态转换:2[2k+1]->5[2k]->10[2k+1]->21[2k]->42[2k+1]->85,成本为1+5+5+21+21=51。我对这个问题的理解正确吗?@SaiBot-right,它是正确的。但是我需要python代码,因为手动计算需要花费大量时间!谢谢你的帮助。你能提供python代码吗?我在实施过程中遇到了一些问题。不应列出节点,因为它们是关联的路径成本和节点成本。这对我来说有点复杂。再次发送thx。@Cina已添加,但下次您应该发布代码。