artificial-intelligence - 贪心搜索算法
问题描述
目前,我是人工智能的新手。我对贪心搜索算法有疑问。我在教程中看到一个问题,但不明白如何回答。请帮我。非常感谢任何帮助。
考虑给定的图 1。每个节点中的值表示从该节点到目标节点 (G) 的启发式成本,弧内的值表示两个节点之间的路径成本。
- 如果 B 是起始节点,G 是目标节点,
- 使用贪心搜索算法找到遍历。
- 使用 A* 搜索算法找到遍历
解决方案
我假设您所指的贪心搜索算法具有如下贪心选择策略:选择与当前节点相邻且与当前节点的成本/距离最小的下一个节点。请注意,贪心解决方案根本不使用启发式成本。
以红色突出显示的路径表示贪心算法采用的路径,以绿色突出显示的路径表示启发式 A* 算法采用的路径。
解释:
贪心算法
- 从节点 B 开始,贪心算法看到路径成本(A 为 6,C 为 6,E 为 5)
- 我们贪婪地移动到节点 E,因为它的路径值最小。
- 从 E 我们只有一个选择可以移动到 F
- 从 F 我们再次只有一个选项可以移动到 H 并且从 H 我们移动到 G(目标状态/节点)
贪婪算法的路径成本(以红色突出显示):B -> E -> F -> H -> G
= 5+6+6+3
=20
A* 算法(在继续之前查看 A* 算法的wiki页面,如果您还没有理解这个概念,请了解什么g(n)
和是什么):h(n)
- 从节点 B 开始,我们有三个选项 A、C 和 E。对于我们计算的每个节点
f(n) = g(n) + h(n)
。这里 g(n) 是弧上的直接成本,h(n)
是节点上的启发式值- 对于节点 A,f(n) = 6 + 12 = 18
- 对于节点 B,f(n) = 6 + 10 = 16
- 对于节点 C,f(n) = 5 + 14 = 19
- 我们选择继续处理具有最少 的节点
f(n)
。所以我们移动到节点 B。 - 我们以类似的方式继续,找到以绿色突出显示的路径。
- A*算法的路径是
B -> C -> D -> H -> G
,它的成本是6+6+4+3
=19
通过上面的例子我们可以看到启发式路径的成本低于贪心算法。因此贪心算法并不总是最优的。
推荐阅读
- javascript - javascript banner - close button doesn't work corectly
- c# - 如何使用 AutoMapper 进行嵌套映射?
- postgresql - 在 postgresql 的子查询中使用执行
- php - 由于自定义字段中的撇号,查询后过滤不起作用
- r - 构建 conda 包时未定义的 cran_mirror
- angularjs - XML 解析错误:AngularJS 中的文档元素后出现垃圾
- php - Google is not allowing the scope mail.google.com using OAuth php library
- npm - 如何使用 Webpack 为 Babel 包含节点模块
- asp.net-core - 如何在.net core 中注册使用角色?
- android - 为什么 currentTimeMillis() 重置为 1970