日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

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

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

一、動態(tài)規(guī)劃

import java.util.ArrayList;

/**

* @author xifeng.yang

*/

public class TSPEngine {

private ArrayList outputArray = new ArrayList<>();

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

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

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出發(fā), 直接到達起始點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出發(fā), 途徑集合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問題:

思路:

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

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

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

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

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

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

3.2 降溫冷卻,temperature = temperature * coolingFactor。當溫度冷卻至1度以下時,結(jié)束循環(huán),否則重復執(zhí)行步驟3。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。