问题标签 [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.
algorithm - 水壶的启发式函数
我在爬山算法中遇到了水壶问题的问题:
给定两个水壶,其中一个可以容纳 X 升水,另一个可以容纳 Y 升水,确定在其中一个水壶中准确获得 D 升水所需的步骤数。
从开始状态,(X,Y) = (0,0),它可以产生一些状态:
- (X,Y) = (0,Y)
或 - (X,Y) = (X,0)
从这些状态中,它可以生成其他状态,直到最终状态为 (X,D) 或 (D,Y)。
那么,我可以估计这个问题的启发式函数吗?如何知道哪个状态比其他状态更好?
谢谢大家。
python - 简单的一维连续空间爬山算法
我正在寻找一个简单的爬山算法
它用于大规模模拟,这是“CurrentLocation”如何变化的示例。
我提出的算法是有效的,但我觉得最有效的东西......有什么建议吗?
谢谢你
java - Late Acceptance Hill Climbing Algorithm
I am writing code to address the Nurse Restoring Problem
I have implemented Simulated Annealing and I am interested in comparing the results to Late Acceptance Hill Climbing
I have found some pseudo code for Late Acceptance but need a little help to write it in Java:
I really don't get this bit: For all k in ( 0.. L-1 ) C_hat[k]=C(s)
The pseudo code is from http://www.yuribykov.com/LAHC/LAHC_wonders.pdf
scheme - 方案 - 使用爬山/最小冲突方法解决 NQueens
我试图通过随机填充棋盘来解决方案中的 N-Queens 问题,这样没有两个皇后在同一行或同一列,然后将其列中的皇后移动到被最少攻击的行的皇后。
我的算法适用于小于 6 的任何尺寸板。如果使用 6 或更大的板尺寸作为参数,则程序似乎无限递归。
我将添加所有代码,但这是我认为发生无限递归的部分:
第一个 if 语句检查棋盘上的所有皇后是否都已移动。如果有,则检查是否存在任何冲突(如果没有冲突,(move i) 返回 0)。如果存在冲突,则会升起一个标志,并且程序将继续移动皇后。
所以这就是问题所在。这个谜题要么在第一关就解决了,要么根本没有。如果第一次通过后棋盘是合法的,显然没有问题,一切都很好。但是,如果不是,那么同一个板就会不断地被反复尝试。我知道这是因为代码中的(显示板)检查。
我假设该代码不适用于大于 6 的板尺寸,因为这是在第一遍中不太可能解决难题的地方。我尝试添加一条线来创建一个新的随机板,但那时运行时间非常糟糕,它对我没有帮助。
下面是程序的代码,如果有任何问题,请随时提问。
编辑:我在想问题可能是我的(解决)函数遍历列的方式。如果我总是按递增顺序排列,如果前几列的冲突为零,但在不能成为合法解决方案的地方,那么剩余的列将移动到冲突最少但绝不为零的地方。
search - 工作分配的爬山搜索算法停止标准
假设有 10 个工作和 15 个工人。目标是为工人分配可以满足工作要求的工作,并最大限度地减少总工作处理时间。
对于每次迭代,随机选择一个作业并分配给工作人员,其处理时间比当前分配的工作人员的处理时间短。例如,当前分配的工人,假设工人 3:处理时间是 10。下一个较少的处理时间是工人 5 的 8,所以工作分配给工人 5。
我的问题是,如何确定迭代的停止标准?目前,我只是将迭代次数设置为作业数或工人数。
python - 使用pybrain优化算法解决搜索问题
我最近开始使用 pybrain 库来解决使用神经网络的分类问题,并通过一些努力和文档使其工作。
现在,我想使用同一个库中的黑盒优化算法,但不适用于分类。
基本上,我试图从 Randy 的博客http://www.randalolson.com/2015/02/03/heres-waldo-computing-the-optimal-search-strategy-for-finding-waldo/中复制一些结果。
因此,作为第一步,我使用以下代码段构建了监督数据集:
现在,数据集中的一个样本如下所示:
在下一步中,我想使用 HillClimber 算法找到最佳路径:
我得到的异常:
有人可以帮我弄清楚我做错了什么吗?这方面的文档非常稀少,甚至搜索代码库也无济于事。
谢谢
PS如果我正确阅读API
最简单的随机搜索:健身景观中的爬山。
优化算法只需要采用评估器,在我的情况下是 ds.evaluateModuleMSE
更新
整个代码片段是:
c++ - 如何优化代码中的参数?
我有一些用 C++ 编写的代码,用于模拟 CPU 的预取器。在代码中,我有一些看起来像这样的定义
在模拟结束时,模拟器输出平均访问时间,这是预取器执行情况的衡量标准。预取器的性能取决于 x 和其他一些类似的定义。
我想要一个更改 x 的程序,重新编译新代码,运行它,查看值,并根据模拟访问时间的变化重复该过程。
有谁知道不手动更改值的简单方法?
编辑:我想我需要澄清一下,我不想编写学习算法,因为我从来没有做过,而且可能做不到和其他人一样好。
java - 随机爬山
我正在尝试用 Java 实现 Stochastic Hill Climbing。我知道这个算法会产生一个随机挑选的新解决方案,然后根据它的坏/好接受解决方案。例如,如果它非常糟糕,那么它的机会很小,如果它有点糟糕,那么它将有更多的机会被选中,但我不确定如何在 java 中实现这个概率。
在浏览 Google 时,我遇到了这个等式,在哪里;
- f代表旧健身
- f'代表新的健身
- T 是一个参数
我不确定如何解释这个等式。
有人可以帮助我如何在 Java 中实现它吗?
c# - c#中用于训练神经网络的爬山算法的优化
我用 C# 编写了一个创建和训练神经网络的小项目。有关更多详细信息,请参阅我之前的问题:(https://scicomp.stackexchange.com/questions/19481)。
神经网络经过足够的训练后表现良好,但我意识到我自己编写的爬山算法可能并不完美,我正在寻找改进的建议。特别是,我可以通过较少的适应度评估函数调用达到局部最优吗?
对于 C# 中的简单爬山算法,网络上似乎没有很多示例。有 .NET 数学库,但我宁愿不必付费。
爬山算法在网络中的每个权重和每个偏差上运行以训练网络,我运行了多次。我研究了反向传播,但这似乎只适用于单个训练示例,我的训练数据中有大约 7000 个示例,适应度函数评估所有这些示例的网络平均性能并返回一个连续的 (双)得分。
这是我当前的代码:
适应度函数非常昂贵,因此应该尽可能少地调用它。我正在寻找通过减少对适应度函数的调用来达到局部最优的任何改进。陷入局部最优并不是什么大问题,我已经绘制了适应度函数与网络中不同权重和偏差值的关系图,看起来图中通常有 1-3 个局部最优。如果网络在几次传递中保持相同的适应度,那么我可以向该函数添加一个参数,以尝试从随机值重新开始爬山。
c# - 如何在 C# 中按值而不是按引用复制对象
我正在用 C# 编写一个简单的爬山算法,并尝试以下方法:
获取初始解决方案
将解决方案复制到新对象
应用算法复制
将初始解决方案的 obj 值与副本的 obj 值进行比较,
如果更好 - 复制回初始解决方案。
我知道这个话题在前一篇文章中已经提到过,并尝试在那里实现这个建议——使用 IClonable 类。这是我尝试过的:
我的解决方案类:
算法:
查看新旧解决方案的打印输出,它们总是相同的,这意味着代码显然仍然通过引用进行复制。我很困惑,不知道该怎么做。任何帮助将非常感激。