问题标签 [hill-climbing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何创建爬山算法
我一直在关注一本学习python的书,这本书有以下挑战之一:
自检
这是一个自我检查,真正涵盖了到目前为止的所有内容。你可能听说过无限猴子定理?该定理指出,一只猴子在打字机键盘上随机敲击无限时间的键几乎肯定会键入给定的文本,例如威廉·莎士比亚的全集。好吧,假设我们用 Python 函数替换猴子。你认为一个 Python 函数只生成一个莎士比亚的句子需要多长时间?我们要拍摄的句子是:“我认为它就像一只黄鼠狼”</p>
你不想在浏览器中运行这个,所以启动你最喜欢的 Python IDE。我们将模拟这种情况的方法是编写一个函数,该函数通过从字母表中的 26 个字母加上空格中选择随机字母来生成一个 28 个字符长的字符串。我们将编写另一个函数,通过将随机生成的字符串与目标进行比较,对每个生成的字符串进行评分。
第三个函数将重复调用 generate 和 score,然后如果 100% 的字母是正确的,我们就完成了。如果字母不正确,那么我们将生成一个全新的字符串。为了更容易跟踪程序的进度,第三个函数应该打印出迄今为止生成的最佳字符串及其每 1000 次尝试的得分。
我能够使用以下代码实现这部分挑战:(我是 python 新手)
然后它有以下额外的挑战:
自检挑战
看看您是否可以通过保持正确的字母并仅修改迄今为止最好的字符串中的一个字符来改进自检中的程序。这是“爬山”算法中的一种算法,也就是说,我们只保留比前一个更好的结果。
但是,我无法弄清楚这个爬山算法是什么,以及如何将它实现到我现有的代码中。
请解释如何实现这个爬山算法,非常感谢大家!
optimization - 随机爬山与随机重启爬山算法
随机爬山和随机重启爬山有什么区别?
r - hill.climbing 中的错误:INTEGER() 只能应用于“整数”,而不是“NULL”
hc()
我正在尝试在 bnlearn 包中使用爬山功能。尽管我的数据框的所有列都是因子并且没有 NA 值,但我仍然不断收到这样的错误消息:
以下是我的hc功能代码。
什么可能导致这个问题?谢谢!
input - 用户输入,用户输入数据到列表中
我有一个 eval 解决方案,用户需要输入人名并给出一定的值,我试图让它工作,但输入部分不起作用。
我希望用户通过控制台输入 2 个名称,所以我希望控制台像这样工作,“选择 2 个人组成一个组”,用户输入(例如 rui,maria),并返回他们偏好的值。如果我输入 eval([rui,mariaR],DS) 它返回值 1 ,但这仅以静态方式,我希望用户能够选择 2 个名称并返回他们的偏好级别。我相信主要错误是启动功能,谢谢
algorithm - 爬山和 A* 有什么区别?
在人工智能中,这些算法非常流行。我尝试寻找解决 8puzzle 问题的方法,似乎他们都有类似的方法。谁能解释有什么区别?
python - "TypeError: only integer scalar arrays can be converted to a scalar index" on Hill-RSA cryptography
I'm trying to code a Hill-RSA cryptography program that you can see a part of here:
When i execute this part, I get
"TypeError: only integer scalar arrays can be converted to a scalar index"
on the line
Can anyone help me get rid of this error?
Thanks in advance
r - 无法为 hill.climbing.search 加载包 FSelector
我想hill.climbing.search
在我的数据上使用 来检测我的数据中最显着的偏差。因此,我想安装可以工作的包FSelector,但是在加载包时我收到此错误消息:
此外,我从 CRAN for FSelector 包的 pdf 中阅读了hill.climbing.search的介绍,但我很困惑我的数据中的参数属性和eval.fun是什么。
这是我的数据:
algorithm - 简单爬山算法中的问题示例
有哪些示例导致简单爬山遇到局部最大值、山脊和小巷以及高原问题等问题?我试过搜索:
- 链接一:它给出了一个很好的例子,即简单爬山在块布置中陷入局部最大值问题。但是,它没有显示步骤。
- 链接二:它提供了在 SHC 中找到解决方案的步骤。但是,我不明白当只有四个块并且其中四个块放错位置时,h(1) 怎么可能是-6,因此只产生-4。它也没有显示 SHC 遇到的问题。
- 链接三:我了解达到状态“g”的概念如何使您的算法达到局部最大值并卡住。但是,状态是什么是相当模棱两可的,我不知道状态“g”和最终状态指的是什么。
从我阅读的讲义中,我得到了 TSP 问题。该图是具有四个节点的完整图:A、B、C 和 D。我们同时使用了 Simple Hill Climbing 和 Steepest-Ascent Hill Climbing 来解决问题。用于解决该问题的启发式值是每个状态的总距离。我们可以通过使用 6 种不同的组合(第一个字母 <-> 第二个、第二个 <-> 第三个等)切换字符“ABCD”的位置来探索其他相邻状态。但是,在给出的示例中,它并没有显示“陷入局部最大值”究竟是什么。它既没有显示山脊和小巷问题,也没有显示高原问题。
有人可以给我一个例子,说明我们如何解决这些问题以及这些问题在示例中实际上是什么(我理解每个问题的定义:here和here)?作为参考,下面是我提到的 TSP 问题的图像:
algorithm - 局部最大值问题是否会导致简单爬山算法陷入无限循环?
例如,我有以下问题:
我可以申请的唯一运营商是:
- 从结构向下放置最上面的块
- 将不在结构中的块放置到结构的最上面位置
我有一个启发式函数:
- h(n) = 如果正确放置块,则为每个支撑块 +1,如果放置不正确,则为每个支撑块 -1。
在此示例中,“A”块放置正确,因此 A 下面的每个支撑块得到 +3。“D”放置不正确,因此得到 -2。C放置正确,我得到另一个+1。因此,我的启发式函数现在返回值 3 + 1 - 2 = +2。
现在基于这里的算法,算法只有在达到它的目标状态时才会退出,并且如果它产生更好的启发式值,它只会选择下一个状态作为它的当前状态。但是,在我上面提出的情况下,不再可能继续进行。从结构中放下 A 将产生一个比前一个值 (+2) 更差的启发式值 -1。
为什么我要修改示例?我想展示当我们在简单爬山算法中遇到局部最大值问题时,这是一个局部最大值问题,对吧?另一个问题,正如算法所说,它只会在达到其目标状态时退出,它永远不会退出。或者我认为当其他邻国不再给出更好的结果时它也会退出是正确的吗?
c++ - 在 C++ 中使用一个为大量计算部分调用 Fortran 程序的算法是否可行?
我正在开发一种具有大量数值计算部分的算法。因此,我的项目主管建议我使用 Fortran,因此在过去的几周里我一直在研究它(到目前为止一切都很好)。这将是他的算法的新版本,基本上是大量的数值计算。
然而,我的会有更多的“逻辑”。无需赘述,蛮力方法仅使用 fortran 完成,因为它只是从文件读取和执行操作的 95%。然而,该项目的目的是提供一种有效的算法来做到这一点,我一直在考虑方法,并想从贪婪的方法开始(比如爬山),这让我想到,特别是对于这一部分,也许用 C++ 而不是 Fortran 编写算法会更好。
所以基本上,您认为在 C++ 中开发“逻辑”算法然后在必须执行大量数值计算时调用 Fortran 有多难。值得吗?还是我应该坚持使用两种语言中的一种?
抱歉,如果这是一个非常无知的问题,但我不知道如果使用 Fortran 而不是 C++ 编写诸如爬山之类的算法是否会更困难,并且在这种情况下 Fortran 的好处是值得的。
感谢您的宝贵时间,祝您有美好的一天!