日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

旅行商问题动态规划matlab,旅行商问题的解法

發布時間:2024/9/27 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 旅行商问题动态规划matlab,旅行商问题的解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、動態規劃

import java.util.ArrayList;

/**

* @author xifeng.yang

*/

public class TSPEngine {

private ArrayList outputArray = new ArrayList<>();

private int dp[][]; //重疊子問題的記憶, 表示由i出發、途徑集合j中的元素、再回到起始點0的最短長度;

private int path[][]; //表示在所選路徑最優的情況下, 下一步要到達的點;

private int distance[][];

private int nPow, N;

public static long time;

public ArrayList computeTSP(int[][] inputArray, int n) {

long start = System.nanoTime();

N = n;

nPow = (int) Math.pow(2, n);

dp = new int[n][nPow];

path = new int[n][nPow];

distance = inputArray;

int i, j;

for (i = 0; i < n; i++) {

for (j = 0; j < nPow; j++) {

dp[i][j] = -1;

path[i][j] = -1;

}

}

/* 從i出發, 直接到達起始點0的長度. */

for (i = 0; i < n; i++) {

dp[i][0] = inputArray[i][0];

}

outputArray.add(0);

int result = tsp(0, nPow - 2);

getPath(0, nPow - 2);

outputArray.add(result);

long end = System.nanoTime();

time = (end - start) / 1000;

return outputArray;

}

/**

* 從start出發, 途徑集合set中的元素(由二進制中的非0位來表示), 再回到起始點時的最短長度, 即:

* tsp(start, set) = min{start-> {set} -> 0)}.

*

* @param start

* @param set

* @return

*/

private int tsp(int start, int set) {

int masked, mask, result = -1, temp;

if (dp[start][set] != -1) {

return dp[start][set];

} else {

for (int x = 0; x < N; x++) {

mask = nPow - 1 - (int) Math.pow(2, x);

masked = set & mask;

//過濾掉set中未置1的元素.

if (masked != set) {

temp = distance[start][x] + tsp(x, masked);

if (result == -1 || result > temp) {

//更新result的同時, 也更新path.

result = temp;

path[start][set] = x;

}

}

}

dp[start][set] = result;

return result;

}

}

private void getPath(int start, int set) {

if (path[start][set] == -1) {

return;

}

int x = path[start][set];

int mask = nPow - 1 - (int) Math.pow(2, x);

int masked = set & mask;

outputArray.add(x);

getPath(x, masked);

}

public static void main(String[] args) {

int[][] inputArray = {{0, 12, 11, 16}, {15, 0, 15, 10}, {8, 14, 0, 18}, {9, 11, 17, 0}};

TSPEngine tspEngine = new TSPEngine();

System.out.println("result:" + tspEngine.computeTSP(inputArray, 4));

}

}

模擬退火算法解決TSP問題:

思路:

參數選取,包括初始溫度、冷卻系數(coolingFactor, 一般選取0.98或0.99);

隨機選取某個旅行順序作為起始值;

開始退火過程,步驟如下:

3.1 隨機交換當前旅行順序中的兩個元素,計算出新的路徑值newEnergy,與現有的currentEnergy作對比:

① 如果newEnergy < currentEnergy,則接受新的方案;

② 如果exp((currentEnergy - newEnergy) / temperature) > Random(0, 1),則接受新的方案。temperature越大,越有可能接受較差的值。

3.2 降溫冷卻,temperature = temperature * coolingFactor。當溫度冷卻至1度以下時,結束循環,否則重復執行步驟3。

總結

以上是生活随笔為你收集整理的旅行商问题动态规划matlab,旅行商问题的解法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。