多目標遺傳演算法matlab
Ⅰ 急求一份多目標遺傳演算法matlab代碼!
我給你一個標准遺傳演算法程序供你參考:
該程序是遺傳演算法優化BP神經網路函數極值尋優:
%% 該代碼為基於神經網路遺傳演算法的系統極值尋優
%% 清空環境變數
clc
clear
%% 初始化遺傳演算法參數
%初始化參數
maxgen=100; %進化代數,即迭代次數
sizepop=20; %種群規模
pcross=[0.4]; %交叉概率選擇,0和1之間
pmutation=[0.2]; %變異概率選擇,0和1之間
lenchrom=[1 1]; %每個變數的字串長度,如果是浮點變數,則長度都為1
bound=[-5 5;-5 5]; %數據范圍
indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %將種群信息定義為一個結構體
avgfitness=[]; %每一代種群的平均適應度
bestfitness=[]; %每一代種群的最佳適應度
bestchrom=[]; %適應度最好的染色體
%% 初始化種群計算適應度值
% 初始化種群
for i=1:sizepop
%隨機產生一個種群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%計算適應度
indivials.fitness(i)=fun(x); %染色體的適應度
end
%找最好的染色體
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色體
avgfitness=sum(indivials.fitness)/sizepop; %染色體的平均適應度
% 記錄每一代進化中最好的適應度和平均適應度
trace=[avgfitness bestfitness];
%% 迭代尋優
% 進化開始
for i=1:maxgen
i
% 選擇
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 變異
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);
% 計算適應度
for j=1:sizepop
x=indivials.chrom(j,:); %解碼
indivials.fitness(j)=fun(x);
end
%找到最小和最大適應度的染色體及它們在種群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次進化中最好的染色體
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;
avgfitness=sum(indivials.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %記錄每一代進化中最好的適應度和平均適應度
end
%進化結束
%% 結果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('適應度曲線','fontsize',12);
xlabel('進化代數','fontsize',12);ylabel('適應度','fontsize',12);
axis([0,100,0,1])
disp('適應度 變數');
x=bestchrom;
% 窗口顯示
disp([bestfitness x]);
提問者評價
謝謝!
Ⅱ MATlab 遺傳演算法處理多目標的優化問題,計算目標函數值的時候出現問題
1 您確定ZBX ZBY ZBZ都是標量嗎?
2 改成
if norm([ZBX ZBY ZBZ])<0.5
試試?
Ⅲ 用遺傳演算法工具箱求解一個多目標優化問題,現在需要一個matlab程序,求高人指點
用遺傳演算法工具箱求解一個多目標優化問題的步驟:
1、根據題意,建立自定義目標函數,ga_fun1(x)
2、在命令窗口中,輸入
>> optimtool %調用遺傳演算法工具箱
3、在遺傳演算法工具箱界面中,分別對Fitnessfunction框內輸入@ga_fun1();A框內輸入[1,1,1];b框內輸入16;Aeq框內輸入[];beq框內輸入[];Lower框內輸入[0,0,0];Upper框內輸入[];
4、單擊Start。得到x=4.508 y=2.513 z=1.912值。
Ⅳ 有關用matlab遺傳演算法解決多目標函數的問題
你打算吧多目標怎麼處理? 轉化為單目標 還是pareto解
Ⅳ 誰會用MATLAB基於遺傳演算法求解多目標函數的最小值。
如果你的函數是求maxf(x)的問題,要編程求最小值問題,那麼你需要對這個函數取負值求最小值即可
舉例來說:
求max(z)=ax+bx^2
等同於
求min(z)=-(ax+bx^2)
Ⅵ matlab程序Pareto 遺傳多目標演算法
您好,GA不論是在應用、演算法設計上,還是在基礎理論上,均取得了長足的發展,應用也非常廣泛.本文通過對基本遺傳演算法的研究,以及對其在多目標優化問題上的實現,在遺傳演算法領域進行探討,並通過程序來驗證.在多目標優化問題的研究中,所採用的一些方法在一些算例中獲得了比較好的Pareto解集.
遺傳演算法作為求解全局優化問題的有力工具之一,應用十分廣泛,目前主要應用在以下幾個領域:
(1)基於遺傳演算法的機器學習(GeneticBaseMachineLearning).這一新的學習機制給解決人工智慧中知識獲取和知識優化精煉的瓶頸難題帶來了希望。
(2)遺傳演算法與其他計算智能方法的相互滲透和結合.
(3)並行處理的遺傳演算法的研究十分活躍.這一研究不僅是對遺傳演算法本身的發展,而且對新一代智能計算機體系結構的研究都是十分重要的.(4)遺傳演算法在數據挖掘(DataMining)領域中的應用。
Ⅶ Matlab遺傳演算法計算多目標優化
太難了。。。。。
Ⅷ 怎麼評價MATLAB中gamultiobj函數(多目標遺傳演算法)的計算結果比如下面的函數和其部分結果
您好,多目標遺傳演算法可以得到Pareto Front圖,即您展示的結果。至於評價方法應由您自己確定,比如最簡單的線性加權函數評價方法,評價值Evalue=w1*minf1(x1,x2)+w2*minf2(x1,x2),其中w1+w2=1。
總的來說,就是依據自己的需要進行評價,matlab中不含有評價方法(因為評價方法很靈活)。
Ⅸ matlab,遺傳演算法,多目標函數求極值
如何用matlab求多目標函數求極值?實際上處理的方法和單目標是一樣的,你可以這樣來自定義目標函數。例如:
function [z1,z2,z3]=myfun(x)
z1=目標函數表達式 1
z2=目標函數表達式 2
z3=目標函數表達式 3
end
然後,用ga()遺傳演算法函數調用其函數。調用格式:
fitnessfcn=@myfun;
nvars=變數數;
[x,fval,exitflag] = ga(fitnessfcn,nvars)
Ⅹ 如何用matlab解決多元遺傳演算法問題
如何用matlab解決多元遺傳演算法的極值問題?可以按下列步驟做
1、首先,建立自定義帶條件的最大值目標函數文件,ga_fun.m
if x(1)+x(2)>=-1
y=-(exp(-0.1*(x(1)^4+x(2)^4))+ exp(cos(2*pi*x(1))+cos(2*pi*x(2)))
)
else
y=inf
end
式中:x=x(1),y=x(2)
2、利用ga遺傳演算法工具箱求解
3、在工具箱中,Fitness function項輸入@ga_fun;Number of variables項輸入2;Lower項輸入[-1,2];Upper項輸入[2,1];
4、點擊Start按鈕,運行可以得到 fmax(0,0)值(Objective function value)。說明這里負號是最大值的標志
運行界面