遺傳演算法多目標優化
Ⅰ 對於解決多目標優化問題,遺傳演算法、粒子群、模擬退火哪個比較好啊哪位大神能分析一下么
個人感覺是遺傳演算法吧,當然可以和模擬退火演算法結合來使用。
多目標遺傳演算法可解決多目標優化問題,和模擬退火演算法相結合時還能強化局部搜索能力。
Ⅱ 為什麼在多目標優化時選擇遺傳演算法,而不用其他演算法
會說不可以用其他演算法了,遺傳演算法最精華就在於fitness,要是多目標優化也是把多個目標融合在一起 變成一個目標 然後再結合實際目標意義(越大越優,越小越優)進行計算fitness。至於優點,在大多數智能搜索演算法裡面,遺傳演算法的全局最優概率最大!
Ⅲ 用遺傳演算法工具箱求解一個多目標優化問題,現在需要一個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遺傳演算法工具箱求解非線性多目標優化問題,煩請高人指點!
matlab中沒有rep這個函數,需要你自己定義這個函數。
Ⅳ 基於DEAP庫的Python進化演算法從入門到入土--(六)多目標遺傳演算法 NSGA-II
在很多實際工程問題中,我們的優化目標不止一個,而是對多個目標函數求一個綜合最優解。例如在物流配送問題中,不僅要求配送路徑最短,還可能需要參與運輸車輛最少等。
多目標優化問題的數學模型可以表達為:
多目標優化問題通常具有如下特點:
對於多目標優化問題,傳統方法是將原問題通過加權方式變換為單目標優化問題,進而求得最優解。該方法具有兩大問題:
遺傳演算法具有多點多方向搜索的特徵,在一次搜索中可以得到多個Pareto最優解,因此更適合求解多目標優化問題。
而當前用於求解多目標優化問題的遺傳演算法一般有兩種思路:
NSGA-II(nondominated sorting genetic algorithm II)是2002年Deb教授提出的NSGA的改進型,這個演算法主要解決了第一版NSGA的三個痛點:
針對這三個問題,在NSGA-II中,Deb提出了快速非支配排序運算元,引入了保存精英策略,並用「擁擠距離」(crowding distance)替代了共享(sharing)。
在介紹NSGA-II的整體流程之前,我們需要先了解快速非支配排序和擁擠距離的定義。
解的支配關系與Pareto最優解
下圖表示了解之間的支配和強支配關系:
下圖表示了一個最小化問題解集中的Pareto最優解和Pareto弱最優解:
快速非支配排序步驟
快速非支配排序就是將解集分解為不同次序的Pareto前沿的過程。
它可以描述為:
DEAP實現
DEAP內置了實現快速非支配排序操作的函數 tools.emo.sortNondominated
tools.emo.sortNondominated(indivials, k, first_front_only=False)
參數:
返回:
擁擠距離的定義
在NSGA II中,為了衡量在同一個前沿中各個解質量的優劣,作者為每個解分配了一個擁擠距離。其背後的思想是 讓求得的Pareto最優解在objective space中盡量分散 。也就有更大可能讓解在Pareto最優前沿上均勻分布。
DEAP實現
DEAP中內置了計算擁擠距離的函數 tools.emo.assignCrowdingDist
tools.emo.assignCrowdingDist(indivials)
參數:
返回:
比較操作
根據快速非支配排序和擁擠距離計算的結果,對族群中的個體進行排序:
對兩個解 ,
在每個迭代步的最後,將父代與子代合為一個族群,依照比較操作對合並後族群中的個體進行排序,然後從中選取數量等同於父代規模的優秀子代,這就是NSGA-II演算法中的精英保存策略。
DEAP實現
DEAP內置了實現NSGA-II中的基於擁擠度的選擇函數 tools.selNSGA2 用來實現精英保存策略:
tools.selNSGA2(indivials, k, nd='standard')
參數:
返回:
這里選用ZDT3函數作為測試函數,函數可表達為:
其Pareto最優解集為
這里為了方便可視化取 。
下圖給出了該函數在Decision Space和Objective Space中的對應:
其pareto最優解在Objective Space中如下圖紅點所示:
將結果可視化:
得到:
可以看到NSGA-II演算法得到的Pareto最優前沿質量很高:最優解均勻分布在不連續前沿的各個線段上;同時在最優前沿以外沒有個體存在。
Ⅵ matlab程序Pareto 遺傳多目標演算法
您好,GA不論是在應用、演算法設計上,還是在基礎理論上,均取得了長足的發展,應用也非常廣泛.本文通過對基本遺傳演算法的研究,以及對其在多目標優化問題上的實現,在遺傳演算法領域進行探討,並通過程序來驗證.在多目標優化問題的研究中,所採用的一些方法在一些算例中獲得了比較好的Pareto解集.
遺傳演算法作為求解全局優化問題的有力工具之一,應用十分廣泛,目前主要應用在以下幾個領域:
(1)基於遺傳演算法的機器學習(GeneticBaseMachineLearning).這一新的學習機制給解決人工智慧中知識獲取和知識優化精煉的瓶頸難題帶來了希望。
(2)遺傳演算法與其他計算智能方法的相互滲透和結合.
(3)並行處理的遺傳演算法的研究十分活躍.這一研究不僅是對遺傳演算法本身的發展,而且對新一代智能計算機體系結構的研究都是十分重要的.(4)遺傳演算法在數據挖掘(DataMining)領域中的應用。
Ⅶ MATLAB遺傳演算法工具箱求解非線性多目標優化問題
將下屬兩個目標函數分別保存在兩個m文件中
function f1=func1(x) %第一目標函數
f1=x(:,1).*x(:,1)./4+x(:,2).*x(:,2)./4;
function f2=func2(x) %第二目標函數
f2=x(:,1).*(1-x(:,2))+10;
function GA()
clear;clc;close all
NIND=100; %個體數目
MAXGEN=50; %最大遺傳代數
NVAR=2; %變數個數
PRECI=20; %變數的二進制位數
GGAP=0.9; %代溝
trace1=[];trace2=[];trace3=[]; %性能跟蹤
%建立區域描述器
% rep([PRECI],[1,NVAR])
FieldD=[rep([PRECI],[1,NVAR]);rep([1;2],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI); %初始種群
v=bs2rv(Chrom,FieldD) ; %初始種群十進制轉換
gen=1;
while gen<MAXGEN,
[NIND,N]=size(Chrom);
M=fix(NIND/2);
ObjV1=func1(v(1:M,:)); %分組後第一目標函數值
FitnV1=ranking(ObjV1); %分配適應度值
SelCh1=select('sus',Chrom(1:M,:),FitnV1,GGAP); %選擇
ObjV2=func2(v(M+1:NIND,:)); %分組後第二目標函數值
FitnV2=ranking(ObjV2); %分配適應度值
SelCh2=select('sus',Chrom(M+1:NIND,:),FitnV2,GGAP); %選擇
SelCh=[SelCh1;SelCh2]; %合並
SelCh=recombin('xovsp',SelCh,0.7); %重組
Chrom=mut(SelCh); %變異
v=bs2rv(Chrom,FieldD);
trace1(gen,1)=min(func1(v));
trace1(gen,2)=sum(func1(v))/length(func1(v));
trace2(gen,1)=min(func2(v));
trace2(gen,2)=sum(func2(v))/length(func2(v));
trace3(gen,1)=min(func1(v)+func2(v));
trace3(gen,2)=sum(func1(v))/length(func1(v))+sum(func2(v))/length(func2(v));
gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid on;
legend('解的變化','種群均值的變化')
xlabel('迭代次數');ylabel('目標函數值');
figure(2);clf;
plot(trace2(:,1));hold on;
plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');
plot(trace2(:,2),'.');grid;
legend('解的變化','種群均值的變化');
xlabel('迭代次數');ylabel('目標函數值');
figure(3);clf;
plot(trace3(:,1));hold on;
plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');
plot(trace3(:,2),'.');grid;
legend('解的變化','種群均值的變化');
xlabel('迭代次數');ylabel('目標函數值');
figure(4);clf;plot(func1(v));hold on;
plot(func2(v),'r-.');grid;