模拟退火+ 2opt并不比2opt更好

问题描述

我正在开发一个小程序,它允许您在图形中绘制顶点并计算所有顶点之间的最短路径。即解决旅行商问题。 我已经在“模拟退火”算法和“ 2-opt”算法中进行了编程。我面临的问题是,使用SA + 2opt获得的结果并不比常规2opt更好。

对于初始温度,我使用我创建的随机初始路径中每个边的长度的平均值,以防止重新缩放。对于冷却速率,我将其与顶点数量成反比。

unsigned int dummy_int;
for (unsigned int i = 0; i < N; i++) {
    dummy_int = rand() % (N - i);
    TSPperm.push_back(vertexset[dummy_int]);
    vertexset.erase(vertexset.begin() + dummy_int);
}
vertexset = ID_PERM;

TSPvalue = 0;
for (unsigned int i = 0; i < N; i++) {
    TSPvalue += gra.get_weight(TSPperm[i],TSPperm[(i + 1) % N]);
}
tempmax = TSPvalue / N; //Scales temperature to be proportional to the average length of the graph's edges
temp = tempmax;
alpha = exp(-1 / (50 * double(N)));

在算法的每个步骤中,我将目标温度更改为与当前路径的平均边缘长度成比例。这是因为随着时间的流逝,我的边缘比起初的边缘要短得多。我使用2-opt交换来获取邻居路径和exp(difference / temp)作为接受概率。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)