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...