用遺傳演算法求解迷宮路徑問題(c語言實現)

2021-10-04 02:17:28 字數 2455 閱讀 2282

#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步,以一定的迭代次數進行迴圈...