用遺傳演算法求解的tsp問題

2021-10-08 23:47:45 字數 3194 閱讀 4670

對於遺傳演算法的基本定義及內容筆者就不重複了,這裡附上**供大家去學習參看。遺傳演算法

大家也可以參看我其他的文章,比如智慧型演算法和數學建模專題,裡面都有詳細的介紹和題目**,完全夠讀者學習和使用的,後面筆者也會對這些專題和其他內容進行更新,敬請期待哦。

題目:在一條裝配線上用乙個機械手去固定待裝配部件上的螺母問題。機械手由其初始位置(該位置在第乙個要緊固螺母的上方)開始,依次移動到其餘的每乙個螺母,最後返回到初始位置。機械手移動的路線就是以螺母為結點的一條周遊路線。一條最小成本周遊路線將使機械手完成工作的時間取最小值。注意:只有機械手移動的時間總量是變化的。

分析:我們要求時間最短的路線,在機械手移動速度不變的情況下,即可以把問題轉化為路徑最短的問題。而初始位置的資訊則告訴我們,機械手出發時已經處在出發螺母的位置了。

關於問題的實現方面,設螺母數量為n,我們生成乙個長度為n的向量,向量的每個元素就是依次要到達的螺母編號,比如[1 2 3 4 5 … n]。之後我們採用相對應的遺傳演算法進行求解即可,具體內容請看matlab**。

clear

clcposition =[2

3577

1923

54101

1687

7102]

;% 計算各點之間的距離矩陣d

[m,n]

=size

(position)

;d =

zeros

(m);

for i =1:m

for j =1:m

if i == j

d(i,j)=0

;else

d(i,j)

=sqrt((

position

(i,1)-

position

(j,1))

^2+(

position

(i,2)-

position

(j,2))

^2);

endend

end% 初始引數的設定

len = m;

popsize =20;

maxgen =

100;

pc =

0.9;

pm =

0.05

;ggap =

0.9;

chrom =

initial

(popsize,len)

;% 畫出乙個可行解

drawpath

(chrom(1

,:),position)

;title

('一可行解的路線');

disp([

'路線與路程為:'

,pathlength

(d,chrom(1

,:))

]);outputpath

(chrom(1

,:))

;% 開始迭代

global gen;

gen =1;

track =

zeros

(maxgen,m)

;record =

zeros(1

,maxgen)

;while gen <= maxgen

[row,~]

=size

(chrom)

;for i =

1:row

long

(i)=

pathlength

(d,chrom

(i,:))

; end

fitv =

fit(

long);

% 選擇

selch =

select5

(chrom,fitv,ggap)

;% 交叉

selch =

cross5

(pc,selch)

;% 變異

selch =

mutate1

(selch,pm)

;% 逆轉操作

selch =

reverse5

(selch,d)

;% 重插入子代的新種群

chrom =

reins5

(chrom,selch,

long);

[row,~]

=size

(chrom)

; temp =

zeros

(row,1)

;for i =

1:row

temp

(i)=

pathlength

(d,chrom

(i,:))

; end

[index1,index2]

=min

(temp)

;record

(gen)

= index1;

track

(gen,:)

=chrom

(index2,:)

; gen = gen +1;

end[

~,index]

=min

(record)

;drawpath

(track

(index,:)

,position)

;hold on;

xlabel

('x軸'

)ylabel

('y軸'

)title

('最短路徑'

)outputpath

(track

(index,:)

);figure

hold on

plot(1

:maxgen,record)

;xlabel

('迭代次數');

ylabel

('距離');

title

('優化過程'

);

結果:

用遺傳演算法求解TSP問題

最近在做人工智慧的課設,碰到乙個與tsp類似的問題,今天嘗試了一下用遺傳演算法求解tsp,下面是我碰到的問題以及我的一些想法 1.如何對個體進行編碼?tsp問題的實質是求乙個最短的哈密頓迴路,如果將城市標號為0,1,2.n 1,那麼tsp的乙個解就是乙個圓排列,等價於乙個規定了起點的排列,所以容易想...

tsp遺傳演算法

include include include include include include using namespace std define m 10 種群規模 define n 31 省會 首府城市數量 define t 10000 遺傳代數 define earth radius 637...

tsp問題 遺傳演算法解決

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