问题标签 [simulated-annealing]

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.

0 投票
3 回答
15877 浏览

java - 来自伪代码的 Java 模拟退火

我目前正在研究一个项目(TSP),并试图将一些模拟退火伪代码转换为 Java。我过去成功地将伪代码转换为 Java 代码,但是我无法成功地转换它。

伪代码是:

如果有人可以向我展示 Java 中的基本标记,我将非常感激 - 我似乎无法弄清楚!

我正在使用多个函数跨多个类工作(我不会列出,因为它与我的要求无关)。我已经有一个smallChange()方法和一个fitness函数 - 我是否有可能需要创建多个不同版本的所述方法?例如,我有类似的东西:

我可能需要接受不同参数的此方法的另一个版本吗?类似于以下内容:

我所需要的只是一个基本概念,即用 Java 编写时的外观 - 一旦我知道它应该以正确的语法看起来是什么样子,我就能够将它适应我的代码,但我似乎无法克服这个特殊的障碍.

0 投票
1 回答
836 浏览

java - 这个例外是什么意思?

我正在实现一个模拟退火程序,其中一部分涉及从我的 java 程序读取的 .txt 文件中计算分数。

1) 从用户处读取输入字符串。我的输入字符串越长,发生以下异常的可能性就越大

2)计算的分数本质上是添加很多十进制数字,我将它存储在一个“双”变量中。

有人可以告诉我为什么会发生这种异常吗?

Hill Swap 得分:0.24874990000000005 交换后...线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) 处的“7.92066E-”

非常感谢!

0 投票
1 回答
135 浏览

brute-force - 自动皮带宽度算法

我真的很感激对这个实际问题的一些评论。

快速描述。 我有可变数量的链接,可用于构成给定的皮带宽度。问题是,每个链接有多少。选择标准:最好使用较长的项目。

例子。 假设我们要创建一个皮带宽度,W = 1024.0 其中一个模型具有以下链接长度:L = [34.0, 65.0, 96.0, 126.0]

问题是,每个链接有多少来制作宽度。

这是我尝试过的一些方法。

1.贪婪(选择最长的第一个以满足标准) c = [0,0,0,8] 其中c是每个项目的计数。这留下了 16.0 的差距,我什至无法容纳 1 个最小的项目。贪婪很容易,但并不好。

2. 选择循环 不太容易,我认为这是一个难题。我尝试了很多策略:填充小物品,然后依次移除它们以适应下一个尺寸。

3. 背包法 不太合适,因为这是基于给定数量的物品。

4. 子集和问题 这是背包的一个子类,但我无法让它工作。

5. 装箱问题 听起来很相似,但我无法将其应用于我的问题。

6.蛮力(随机选择) 奇怪的是,这个找到了很多完全匹配。我使用计数的简单多项式作为评级。rating = n[0] + n[1]* 2 + n[2] *3 + n[4]**4 + ... 蛮力的解决方案之一是 [4, 0, 4, 4] 给出正好是 1024。问题是,这种方法通常会产生不同的选择,因此并不理想。

7.穷举搜索 不实用,因为选择太多。

8. 模拟退火 从蛮力的成功来看,这看起来是一个不错的选择。有人可以给我举一个简单的例子吗(请不要是另一个旅行推销员)。

9. 遗传和粒子群 不确定这些。

现在,我陷入困境和沮丧。是否有可用于此问题的直接算法?

0 投票
1 回答
3317 浏览

genetic-algorithm - 时间表的遗传算法与模拟退火

我正在开发一个时间表应用程序。遗传算法与模拟退火的相对优势是什么?


对于我的情况,我有以下几点:

  1. 一次,我们一次最多分配(3 名教师 X 6 小时)X(3 节课 X 35 小时工作周),我们正在迭代地构建时间表。

  2. 将会有不可能的状态,并且必须通知任何不可能的时间表而不会卡住应用程序——我们希望这个应用程序被推到它的极限。

  3. 它必须在恒定时间内返回结果或报告失败。

0 投票
3 回答
3057 浏览

artificial-intelligence - 用启发式方法解决数独:好主意?

我试图用“Drools Planner”包解决部分初始化的数独谜题(报纸上出现的那种)。虽然它可以在 3 秒内从头开始生成(随机)拼图,但它会陷入解决部分初始化拼图的循环中。

问题: 诸如禁忌搜索和模拟退火之类的启发式算法从根本上说是数独的错误选择吗?我说的是完整性(是否会达成解决方案)和效率(是否矫枉过正)。

我的怀疑来自这样一个事实,即数独谜题总是有一个精确和单一的解决方案,而启发式算法(AFAIK)并不是为了“达到它们”而设计的。

0 投票
1 回答
1352 浏览

artificial-intelligence - 实施模拟退火

我想我了解模拟退火的基本概念。它基本上是在开始时添加随机解决方案以覆盖更好的搜索空间区域,然后随着算法的继续运行慢慢降低随机性。

我对如何在我的遗传算法中实现这一点有点困惑。

谁能给我一个简单的解释,说明我需要做什么,并澄清我对模拟退火工作原理的理解是正确的吗?

0 投票
1 回答
318 浏览

java - 有没有人知道或有贪心可满足性(GSAT)和模拟退火满足(SA-SAT)java算法?

我正在寻找用 java 实现的 GSAT 和 SA-SAT 算法。有人知道吗?谢谢你。

0 投票
1 回答
1386 浏览

algorithm - 随机突变爬山器和模拟退火 - 哪个最快?

我已经使用随机突变爬山算法作为我正在从事的项目的一部分,但想知道使用模拟退火是否会更好,以尽量减少陷入任何局部最优的机会。

我的问题是,根据您的经验,哪一个通常更快?显然,这两种算法都有大量的应用。如果您愿意,这更像是一种广义的思考。

谢谢你。

0 投票
1 回答
808 浏览

java - 模拟退火 - 可能提高性能?

我已经将模拟退火算法(Java 中)应用到我正在处理的个人项目中,但想知道如果用另一种语言(即 C++、Python 等)编写,SA 算法在相同数据集上的性能是否会稍好一些。

我创建的虚拟数据集包含五千个用户的姓名、邮政编码和出生日期。

SA 算法应用于数据集以提取许多不同的信息。

目前,我最近的测试是试图让 SA 算法检测出生日期在一周内(在任何给定年份)的所有用户。现在,SA 算法确实运行良好;但是,由于我是一个完美主义者,我想获得稍微快一点的结果,并想知道是否有人对 SA 有任何好的经验,在类似大小的数据集上产生出色的结果,但用其他语言编写?

目前,SA 算法只需不到 5 秒的时间即可执行成功搜索。

0 投票
1 回答
596 浏览

artificial-intelligence - 在简单的爬山中添加模拟退火

我创建了一个爬山算法,它随机生成一个解决方案,然后复制该解决方案并对其进行一些变异,看看它是否最终得到一个更好的解决方案。如果是这样,它会保留新的解决方案并丢弃旧的解决方案。

如果我想在该算法中添加模拟退火,我是否可以从更高的突变率开始,并在每次创建新解决方案时稍微降低突变率?

我假设突变率将作为模拟退火算法的温度,对吗?