簡單的多目標遺傳演算法實現

2021-07-29 21:10:53 字數 1750 閱讀 2289

function multiga()

%% 執行此程式之前先安裝謝爾菲德遺傳演算法工具箱。

%% 遺傳演算法求解多目標優化案例

%% 將原多目標函式改寫為f1=(x^2+y^2)/4;f2=x(1-y)+10;

% 運用線性疊加法,f=a*f1(x)+b*f2(x)  ,a+b=1

% 總目標函式改寫為  f=0.6*(x^2+y^2)/4+0.4*(x*(1-y)+10);  

popse=100;  % 種群數目

maxgen=50;  % 最大迭代次數

preci=20;   % 編碼長度

gap=0.95;   % 代溝大小

px=0.7;     % 交叉概率

pm=0.01;    %變異概率

lbx=1;      % 變數下界

lby=1;

ubx=4;      % 變數上界

uby=2;

trace=zeros(3,maxgen);  % 定義尋優結果的初始值

fieldd=[preci preci;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; % 區域描述器

chrom=crtbp(popse,preci*2);  % 建立隨機種群

% 優化

gen=0;

pop=bs2rv(chrom,fieldd);    % 進製轉換

x=pop(:,1);y=pop(:,2);

objv=0.15*(x.^2+y.^2)+0.4*(x.*(1-y)+10);  % 目標函式

while gen < maxgen

fitnv=ranking(-objv);

selch=select('sus',chrom,fitnv,gap);    % 選擇 『sus』表示為隨機遍歷抽樣

selch=recombin('xovmp',selch,px);       % 重組  『xovmp』表示多點交叉

selch=mut(selch,pm);

pop=bs2rv(selch,fieldd);                 % 子代個體進行進製轉換

x=pop(:,1);y=pop(:,2);

objvsel=0.15*(x.^2+y.^2)+0.4*(x.*(1-y)+10);

[chrom,objv]=reins(chrom,selch,1,1,objv,objvsel);

pop=bs2rv(chrom,fieldd);

gen=gen+1;

[y,i]=max(objv);

trace(1:2,gen)=pop(i,:);

trace(3,gen)=y;

end%% 畫出求解結果

figure(1)

plot3(trace(1,:),trace(2,:),trace(3,:),'b');  % 畫出每代最優點

xlabel('x')

ylabel('y')

zlabel('f')

figure(2)

plot(1:maxgen,trace(3,:));  

xlabel('迭代次數')

ylabel('最優解')

bestz=trace(3,end);

bestx=trace(1,end);

besty=trace(2,end);

fprintf(['最優解:\n x=',num2str(bestx),'\n y=',num2str(besty),'\n z=',num2str(bestz)])

多目標遺傳演算法與優化的關係

在工程運用中,經常是多準則和對目標的進行擇優設計。解決含多目標和多約束的優化問題稱為 多目標優化問題。經常,這些目標之間都是相互衝突的。如投資中的本金最少,收益最好,風險最小 多目標優化問題的一般數學模型可描述為 pareto最優解 pareto optimal solution 使用遺傳演算法進行...

遺傳演算法及matlab簡單實現

遺傳演算法的實現 遺傳演算法的一次迭代稱為一代,每一代都有一組解。新的一組解不但可以有選擇的保留一些適度值高的舊的解,而且可以包括一些由其它解結合得到的新解。最初的一組解 初始群體 是隨機生成的,之後的每組解由遺傳操作生成。每個解都通過乙個與目標函式相關的適應度函式給予評價,通過遺傳過程不斷重複,達...

遺傳演算法簡單例項

遺傳演算法的手工模擬計算示例 為更好地理解遺傳演算法的運算過程,下面用手工計算來簡單地模擬遺傳演算法的各 個主要執行步驟。例 求下述二元函式的最大值 1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1,x2 編碼為一種符號串。本題中,用無符號二進位制整數來表示。因 x1,x2...