基本原理在**中有注釋:
1 #include2 #include3 #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...