我正在尝试提出使用模拟退火解决图形着色问题的算法。在线上有通用算法,但是当我看它时,我不明白如何将此算法应用于此问题。图中的每个节点必须与其临近点具有不同的颜色。
如何为此使用模拟退火算法。
这个问题的“温度”,“时间表”是什么?
请帮助我理解这一点。谢谢
答案 0 :(得分:1)
正确设置启动温度和冷却调度参数很麻烦,因为在获得良好结果之前,您必须同时具有良好的价值。如果其中一个处于关闭状态,则可能不会注意到您正在朝着正确的方向更改另一个。
这就是为什么我applied a trick根据另一个参数(起始温度)和时间梯度(在开始时为0.0,在达到时间限制后为1.0)计算冷却调度的原因。 将1个参数调整为合适的值要容易得多。
通常,我建议从所有动作的平均得分差异开始温度开始(=邻居)。
答案 1 :(得分:0)
图形的正确着色是将颜色分配给图形的顶点,以便没有两个相邻的顶点具有相同的颜色。
要解决此问题,假定您有一个具有N个节点的图G,那么您需要以下方法:
最后编写一个递归方法,如SimulationAnnealing(graph,temp),它包含一个主循环以更改每个节点的颜色,然后检查isColoringValid()是否可以计算出损失函数()和getProbability()。因为在较高的温度下您可以接受有价值的答案,但在较低的温度下,则只能接受更好的答案,并且在方法结束时降低温度并调用simulatedAnnealing(graph,temp)。
您可以在my github中找到完整的解决方案。