巡迴旅行商問題
1.1給定一組n個城市和倆倆之間的直達距離,尋找一條閉合的旅程,使得每個城市剛好經過一次且總的旅行距離最短。
1.2 tsp問題也稱為貨郎擔問題,是乙個古老的問題。最早可以追溯到2023年euler提出的騎士旅行的問題。2023年,由美國蘭德公司推動,tsp成為近代組合優化領域的典型難題。
1.3 tsp是乙個具有廣泛的應用背景和重要理論價值的組合優化問題。 近年來,有很多解決該問題的較為有效的演算法不斷被推出,例如hopfield神經網路方法,模擬退火方法以及遺傳演算法方法等。
1.n>=8。
2.隨即生成n個城市間的連線矩陣。
3.指定起始城市。
4.給出每一代的最優路線和總路線長度。
5.以代數t作為結束條件,t>=50。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int city_num =8;
//城市數量
const
int unit_num =
100;
//群體規模
double ps =
0.01
;//變異概率
const
int genmax =50;
//最大迭代數
//城市間距離矩陣
int length_table[city_num]
[city_num]=,
,,,,
,,};
class
unit
;bool
cmp(unit u1, unit u2)
bool
isequal
(unit u1, unit u2)
bool
i***ist
(vector temp, unit u)
void
printpath
(unit u)
class
group
;group::
group()
; flag[start_city]
=true
;for
(int j =
1; j < city_num; j++
) group[i]
.path[city_num]
= group[i]
.path[0]
;}}void group::
assess()
//cout << "alllength: " << alllength << endl;
}int group::
sort_group()
void group::
choose_copy()
}}}void group::
cross
(unit &father, unit &mother) __attribute__ (
(__mingw_attrib_no_optimize));
bool flag2[city_num]=;
int l =1+
(rand()
%(city_num -1)
);int r =1+
(rand()
%(city_num -1)
);if(l > r)
swap
(l, r)
; unit son1, son2;
for(
int i = l; i <= r; i++
)for
(int i =
0; i < l; i++
) son1.path[i]
=temp;}if
(!flag2[father.path[i]])
son2.path[i]
= father.path[i]
;else
son2.path[i]
=temp;}}
for(
int i = r +
1; i <= city_num; i++
) son1.path[i]
=temp;}if
(!flag2[father.path[i]])
son2.path[i]
= father.path[i]
;else
son2.path[i]
=temp;}}
for(
int i =
0; i <= city_num;i++)}
void group::
mutation
(unit &t)
void group::
print()
printf
("最優個體,路徑資訊為:\n");
vector temp;
int length=
sort_group()
;for
(int i =
0; i < unit_num; i++)}
printf
("總權值:%d;\n"
, length)
; temp.
clear()
;}void group::
work()
if(best.length > group[0]
.length)
choose_copy()
;//選擇複製
for(
int j =
0; j +
1< unit_num; j +=2
)//交叉
cross
(group[j]
, group[j +1]
);for(
int j =
0; j < unit_num; j++)}
}unit group[unit_num]
;//種群變數
unit bestone;
//記錄最短路徑
int generation_num;
//記錄當前達到了第幾代
intmain()
第一代
第二代
第50代
tsp問題 遺傳演算法解決
tsp問題最簡單的求解方法是列舉法。它的解是多維的 多區域性極值的 趨於無窮大的複雜解的空間,搜尋空間是n個點的所有排列的集合,大小為 n 1 可以形象地把解空間看成是乙個無窮大的丘陵地帶,各山峰或山谷的高度即是問題的極值。求解tsp,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...
遺傳演算法解決TSP問題
基本原理在 中有注釋 1 include2 include 3 include 4 include5 include 6 using std string 7 8struct position9 1617 double tsp int n,struct position position,int t...
使用遺傳演算法解決TSP問題
遺傳演算法顧名思義就是模擬生物界的自然選擇原理,比如對於tsp問題,遺傳演算法大體上是可以先隨機生成一組大量的解空間,作為乙個初始的種群,然後按照一定的策略讓種群自由交叉 也就是傳說中的交配 變異。按照一定的策略淘汰種群中不符合預期目的的個體。目前大多數遺傳演算法使用的是根據隨機生成的概率與給定的交...