⑴ matlab程序Pareto 遺傳多目標演算法
您好,GA不論是在應用、演算法設計上,還是在基礎理論上,均取得了長足的發展,應用也非常廣泛.本文通過對基本遺傳演算法的研究,以及對其在多目標優化問題上的實現,在遺傳演算法領域進行探討,並通過程序來驗證.在多目標優化問題的研究中,所採用的一些方法在一些算例中獲得了比較好的Pareto解集.
遺傳演算法作為求解全局優化問題的有力工具之一,應用十分廣泛,目前主要應用在以下幾個領域:
(1)基於遺傳演算法的機器學習(GeneticBaseMachineLearning).這一新的學習機制給解決人工智慧中知識獲取和知識優化精煉的瓶頸難題帶來了希望。
(2)遺傳演算法與其他計算智能方法的相互滲透和結合.
(3)並行處理的遺傳演算法的研究十分活躍.這一研究不僅是對遺傳演算法本身的發展,而且對新一代智能計算機體系結構的研究都是十分重要的.(4)遺傳演算法在數據挖掘(DataMining)領域中的應用。
⑵ 為什麼在多目標優化時選擇遺傳演算法,而不用其他演算法
會說不可以用其他演算法了,遺傳演算法最精華就在於fitness,要是多目標優化也是把多個目標融合在一起 變成一個目標 然後再結合實際目標意義(越大越優,越小越優)進行計算fitness。至於優點,在大多數智能搜索演算法裡面,遺傳演算法的全局最優概率最大!
⑶ 基於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程序,求高人指點
用遺傳演算法工具箱求解一個多目標優化問題的步驟:
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值。
⑸ 遺傳演算法可以用來求多目標優化么
我給你一個標准遺傳演算法程序供你參考:
該程序是遺傳演算法優化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]);
⑹ 誰能通俗的講解一下NSGA-II多目標遺傳演算法
NSGA-II特別的地方就在它的選擇過程上,其他的和其他演算法也沒什麼區別。
選擇過程分兩個部分:
1. 把種群分成一組Pareto非支配集。一個非支配集里的個體不被當前或之後非支配集里的任何個體支配。方法就是每次選出所有不被任何其他個體支配的非支配個體,從種群里刪除當一個非支配集,然後剩下的再不停重復這個過程,直到取完。
2. 按crowd distance排序。就是在各個維度左右相鄰個體的距離之和。
選擇的時候,先從前往後一個個取非支配集。取到手裡的個體數量大於等於需要的數量了,最後一個非支配集里再怎麼選?選crowd distance大的。
⑺ 多目標優化遺傳演算法求解混合整數規劃問題
可以參考多目標尋優遺傳方法的進化思路,把遺傳演算法修改為針對整數規劃的方法就可以
⑻ MATLAB遺傳演算法編程(多目標優化)
多目標是通過分布性 和非劣解來進行評價的
⑼ 多目標遺傳演算法 目標函數的權重問題
推薦演算法中幾種常用的多目標變單一目標的方法:
(1)目標加權法:F(x)=∑λf(x),∑λ=1。λ可固定或隨機或自適應,加權求和之前一般需要進行無量綱化處理
(2)乘除法:min F(x)=(minf1×minf2×...)/(maxfn×maxfn+1×...).
(3)主要目標法/約束法:次要目標構成對主要目標的約束條件, 缺點:需要人為設定次要目標的約束參數
謝採納~