我试图实现深度优先深度搜索状态空间图.我有一个带有三个顶点的图形,它们是两个激活边和两个禁止边.每个节点都有一个二进制值,统称这是图的状态.通过查看其中一个节点是高于阈值还是低于阈值(通过对所有传入节点求和计算),图形可以转换到新状态.每个转换最多只有一个节点会发生变化.由于它们是三个节点,它们是三个状态转换边缘,在状态转换图中留下每个状态.
我认为我的state_change/3工作正常,例如我可以查询:
?-g_s_s(0,1,1,Begin),node(Arc),state_change(g_s(Begin),Second,Arc).
Run Code Online (Sandbox Code Playgroud)
它给了我三个正确的答案:
Begin = [node(v1, 0), node(v2, 1), node(v3, 1)],
Arc = v1,
Second = g_s([node(v1, 1), node(v2, 1), node(v3, 1)]) ;
Begin = [node(v1, 0), node(v2, 1), node(v3, 1)],
Arc = v2,
Second = g_s([node(v1, 0), node(v2, 0), node(v3, 1)]) ;
Begin = [node(v1, 0), node(v2, 1), node(v3, 1)],
Arc = v3,
Second = g_s([node(v1, 0), node(v2, 1), node(v3, 0)])
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Bratkos Prolog中为AI书提供的谓词id_path,这是问题11.3的解决方案,但我在使用/调整它时遇到了问题. 我想创建一个从起始节点到其他节点的路径,而没有进入循环 - 我不希望它有重复元素或在路径不存在时卡住.我希望路径说出起始状态,然后是一系列可以从起始状态访问的状态.如果有一个自循环,我希望每次到达那里都包含一次.即我想跟踪我进入状态空间的方式并使其独特,而不仅仅是状态空间在路径中是唯一的.
例如,从011开始,我希望所有三条长度为1的路径都可以找到弧线.
?-id_path(g_s([node(v1,0),node(v2,1),node(v3,1)],Last,[Temp],Path).
Path = [[node(v1,0),node(v2,1),node(v3,1)],to([node(v1,1),node(v2,1),node(v3,1)],v1)];
Path =[[node(v1,0),node(v2,1),node(v3,1)], to([node(v1,0),node(v2,0),node(v3,1)],v2)];
Path=[[node(v1,0),node(v2,1),node(v3,1)],to([node(v1,1),node(v2,1),node(v3,0)],v3)];
Run Code Online (Sandbox Code Playgroud)
然后在下一个级别所有具有三个节点的路径,显示它需要到达节点的两个弧,然后在下一个级别所有具有四个节点的路径显示它需要的三个弧等
如果这有用,我还将我的代码放在SWISH中?(第一次尝试这个?!) …
prolog depth-first-search iterative-deepening state-space recursive-backtracking
我知道一般问题包括局部最大值和高原但是我很好奇是否有任何与此特定搜索相关的问题以及我为克服这些问题而采取的最佳行动方案.
有人也可以给我一个例子,说明这种搜索适合哪种问题?
我正在寻找java中的代码,通过给定初始状态实现8-puzzle游戏的DFS和BFS:
1 2 3
8 0 4
7 6 5
Run Code Online (Sandbox Code Playgroud)
和目标状态
2 8 1
0 4 3
7 6 5
Run Code Online (Sandbox Code Playgroud)
我需要打印从初始状态到目标状态的解决方案路径(尚未完成)
这是我的代码.到目前为止,我只能实现DFS.到目前为止,我的程序执行的是一旦找到目标状态就输出SUCCESS.然而,它永远不会达到这一点.
谁能告诉我哪里出错了?
java artificial-intelligence depth-first-search sliding-tile-puzzle state-space
据我了解,对于给定的评估节点,启发式算法的可接受性保持在“距离的实际成本”的范围内。我不得不为状态空间上的 A* 解决方案搜索设计一些启发式方法,并且使用有时可能返回负值的启发式方法获得了很多积极的效率,因此使某些节点与目标更“紧密地形成”国家在边疆的地位更高。
但是,我担心这是不可接受的,但无法在网上找到足够的信息来验证这一点。我确实找到了德克萨斯大学的这篇论文,它似乎在后来的证明之一中提到“......因为启发式函数是非负的”。任何人都可以证实这一点吗?我认为这是因为返回负值作为您的启发式函数会使您的 g-cost 变为负值(因此会干扰 A* 的“默认”dijkstra-esque 行为)。
我正在寻找使用 python 为我拥有的系统获取状态空间模型。
我已经测试了实际系统,所以我有输入并测量了输出。所以我有一组相应的输入和输出。
对于python,是否有某个函数可以为该函数提供系统的输入和输出集,然后该函数将为我提供代表系统的状态空间模型?
我有一个List,R =
[[1]]
[,1] [,2]
[1,] 100 0
[2,] 0 100
[[2]]
[,1] [,2]
[1,] 0.0006364031 0.2521204
[2,] 0.2521204236 99.9993643`
Run Code Online (Sandbox Code Playgroud)
我想这样做 F %*% R
F
[1,] 1 -6.264917e-04
[2,] 1 1.575666e-04
Run Code Online (Sandbox Code Playgroud)
如F[1,]
矩阵乘以R[[1]]
,F[2,]
矩阵乘以R[[2]]
我该怎么回事呢?
抱歉.我想我被误解了.我真正想要的是F[1,]%*%R[[1]]%*%t(F[1,])
和F[2,]%*%R[[2]]%*%t(F[2,])
@Sven海恩斯坦
我的任务是根据矩形区域找出问题的状态空间.似乎我的状态空间太大了,需要一些反馈.
到目前为止,我有一个区域,其轴为o轴为600,x轴为300.我确定了要点数
(600 x 300)!或180,000!
因此,在应用算法之前,我的机器人需要检查这么多潜在的空间.
这个数字似乎相当高,如果是这样的话,它会使我的问题在我死之前不可解决,特别是如果我错误地实现了算法.任何帮助都将非常感激,特别是如果我的数学不确定点数.
编辑 我在印象中看到你需要多少对点才能获得总可用点数的笛卡尔积.反过来(600x300)!.如果这不正确,请告诉我.
state-space ×7
algorithm ×2
prolog ×2
a-star ×1
heuristics ×1
java ×1
matrix ×1
python ×1
r ×1