我正在研究解決TSP的小型項目,但遇到問題。這個想法是通過簡單地找到最佳組合來優化非最優路徑的局部部分。這是通過一個簡單的遞歸排列生成函數完成的。優化蠻力TSP解決方案
我現在想要做的是檢查當前的解決方案是否有任何潛在的改進(邏輯:如果解決方案的權重比當前更好,則不要調用置換函數)。
我遇到的問題是,當前的實現確實改進了解決方案,但並未達到最佳效果(我將結果與簡單的蠻力搜索進行了比較)。如果你指出我的邏輯缺陷或錯誤,我將不勝感激。 M - 是成本矩陣。幫助 - 當前的解決方案,最好的 - 最好的解決方案(類變量)
void City::Generate(int** M, int* help, int k, int &auxcost, int* best) {
int cost2 = 0; // текущая цена
if (k == range){
for (int i = 0; i < range - 1; i++)
cost2 += M[help[i]][help[i + 1]];
if (cost2 < auxcost){
auxcost = cost2;
memcpy(best, help,range *sizeof(int));
changed = true;
}
}
else{
for (int j2 = k; j2<range; j2++){
swap(help[k], help[j2]);
for (int i = 0; i < range - 1; i++)
tcost += M[help[i]][help[i + 1]];
if (tcost <= auxcost)
Generate(M, help, k + 1, start, end, auxcost, best);
swap(help[k], help[j2]);
}
}
}
你好邁克。 是的,這是問題所在。 我已經想通了,一旦問題解決了,我就沒有發佈我的答案。 但謝謝你的時間和意願。 – Greenmachine