對於遺傳演算法的基本定義及內容筆者就不重複了,這裡附上**供大家去學習參看。遺傳演算法
大家也可以參看我其他的文章,比如智慧型演算法和數學建模專題,裡面都有詳細的介紹和題目**,完全夠讀者學習和使用的,後面筆者也會對這些專題和其他內容進行更新,敬請期待哦。
題目:在一條裝配線上用乙個機械手去固定待裝配部件上的螺母問題。機械手由其初始位置(該位置在第乙個要緊固螺母的上方)開始,依次移動到其餘的每乙個螺母,最後返回到初始位置。機械手移動的路線就是以螺母為結點的一條周遊路線。一條最小成本周遊路線將使機械手完成工作的時間取最小值。注意:只有機械手移動的時間總量是變化的。
分析:我們要求時間最短的路線,在機械手移動速度不變的情況下,即可以把問題轉化為路徑最短的問題。而初始位置的資訊則告訴我們,機械手出發時已經處在出發螺母的位置了。
關於問題的實現方面,設螺母數量為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,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...