遺傳演算法解決TSP問題

2022-09-03 22:06:24 字數 2512 閱讀 6348

基本原理在**中有注釋:

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,int population_num,int top_num,int *sort)

1852

//以上生成了50個初始種群,放在population

5354

//準備好距離矩陣

5556

int getdis(struct position* position,double *dis,int

n);57

getdis(position,dis,n);

5859

6061

62for(int t=0;t)

6376

int ii=population[i*n+n-1

];77

int jj=population[i*n];

78 fitness[i]+=dis[ii*n+jj];79}

8081

82//

b對適應度進行排序

83int getindex_double(double *a, int *b,int

n);84

8586

getindex_double(fitness, b,population_num);

8788

8990

//c選擇比較好的個體,放入乙個新的矩陣population1

91for(int i=0;i)

9295

9697

9899

100//

選取比較好的top_num個體,進行交叉操作,放在從top_num+1開始的top_num/2個

101for(int i=top_num;i2

)102

121122

123//

變異操作

124//

隨機選取其中的以為進行變異

125int pos_population=rand()%population_num;

126int pos=rand()%n;

127int value=rand()%n;

128 population1[pos_population*n+pos]=value;

129int getindex(int *a, int *b,int

n);130

131 getindex(&population1[pos_population*n],bbb,n);

132 memcpy(&population1[pos_population*n],bbb,4*n);

133134

135136 memcpy(population,population1,n*population_num*4

);137

138139

}140

//儲存在population1中,適應度在fitness中,排序在b

141int

i;142

for(i=0;i)

143147

148 memcpy(sort,&population[i*n],n*4

);149

return

fitness[i];

150151

}152

153int getdis(struct position* position,double *dis,int

n)154

164}

165return0;

166}

167168

int getperm(int *b, int

n)169

180181

//產生排列

182int getindex(int *a, int *b,int

n)183

188for(int i=0;i1;i++)

189197

}198

return0;

199}

200201

int getindex_double(double *a, int *b,int

n)202

207for(int i=0;i1;i++)

208216

}217

return0;

218 }

呼叫函式為:

1 #include"

tsp.h";

23intmain()

428 printf("\n"

);29

30 system("

pause

");

31return0;

32 }

tsp問題 遺傳演算法解決

tsp問題最簡單的求解方法是列舉法。它的解是多維的 多區域性極值的 趨於無窮大的複雜解的空間,搜尋空間是n個點的所有排列的集合,大小為 n 1 可以形象地把解空間看成是乙個無窮大的丘陵地帶,各山峰或山谷的高度即是問題的極值。求解tsp,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...

使用遺傳演算法解決TSP問題

遺傳演算法顧名思義就是模擬生物界的自然選擇原理,比如對於tsp問題,遺傳演算法大體上是可以先隨機生成一組大量的解空間,作為乙個初始的種群,然後按照一定的策略讓種群自由交叉 也就是傳說中的交配 變異。按照一定的策略淘汰種群中不符合預期目的的個體。目前大多數遺傳演算法使用的是根據隨機生成的概率與給定的交...

遺傳演算法模擬解決TSP問題

include include include include include define cities 10 城市的個數 define maxx 100 迭代次數 define pc 0.8 交配概率 define pm 0.05 變異概率 define num 10 種群的大小 int bes...