#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maph 100
//高#define mapw 100
//寬#define playersnumber 10000
//每代個數
#define father 50
//父代個數,少一點比較好
#define genesnumber 80
//gene個數,走的最多步數,不能太多
#define evolution 100
//進化代數
handle handle =
getstdhandle
(std_output_handle)
;struct
map;
//地圖
typedef
struct player player;
struct playerplayers[playersnumber]
,sons[playersnumber]
;struct
greatest;
void
readinmap()
;//讀進陣列
void
printmap()
;//列印地圖
void
born()
;//生成初始種群
void
adaptioncal()
;//計算適應值
void
evolution()
;//進化
bool cmp
(player a,player b)
;void
printpath
(player p)
;//列印路徑
intmain()
system
("pause");
printpath
(players[greatest.num]);
system
("pause");
return0;
}
void
readinmap()
}}fclose
(fp);}
void
born()
}}void
adaptioncal()
if(j!=
0&&players[i]
.gene[j]
+players[i]
.gene[j-1]
==3)switch
(map.map[tempx]
[tempy])if
(map.map[tempx]
[tempy]==3
)}if(map.map[tempx]
[tempy]!=3
)if(players[i]
.adapt>greatest.adapt)}}
void
evolution()
num++;}
}for
(;num)while
(dad==mom)
;int temp=
rand()
%genesnumber;
for(
int i=
0;i)for
(int i=temp;ifor(
int i=
0;i)for
(int j=
0;j)while
(newgene==players[i]
.gene[temp]);
players[i]
.gene[temp]
=newgene;}}
}void
printmap()
else
if(map.map[i]
[j]==0)
else
if(map.map[i]
[j]==3)
}printf
("\n");
}}bool cmp
(player a,player b)
void
setpos
(int x,
int y)
void
printpath
(player p)
sleep
(100);
if(map.map[tempx]
[tempy]==0
||map.map[tempx]
[tempy]==3
)if(map.map[tempx]
[tempy]==3
)}}
用遺傳演算法求解TSP問題
最近在做人工智慧的課設,碰到乙個與tsp類似的問題,今天嘗試了一下用遺傳演算法求解tsp,下面是我碰到的問題以及我的一些想法 1.如何對個體進行編碼?tsp問題的實質是求乙個最短的哈密頓迴路,如果將城市標號為0,1,2.n 1,那麼tsp的乙個解就是乙個圓排列,等價於乙個規定了起點的排列,所以容易想...
用遺傳演算法求解的tsp問題
對於遺傳演算法的基本定義及內容筆者就不重複了,這裡附上 供大家去學習參看。遺傳演算法 大家也可以參看我其他的文章,比如智慧型演算法和數學建模專題,裡面都有詳細的介紹和題目 完全夠讀者學習和使用的,後面筆者也會對這些專題和其他內容進行更新,敬請期待哦。題目 在一條裝配線上用乙個機械手去固定待裝配部件上...
遺傳演算法求解函式最大值c 實現
遺傳演算法求解步驟 1.使用隨機方法產生乙個有n個染色體的初始種群 2.對群體中的每乙個染色體,計算其適應值 3.從群體中隨機選擇一些染色體構成乙個新的群體 常用方法 輪盤賭選擇,錦標賽選擇 4.以一定概率進行交叉 單點交叉 多點交叉 5.以一定概率進行變異 6.返回第2步,以一定的迭代次數進行迴圈...