-
大小: 1.8MB文件類型: .rar金幣: 2下載: 0 次發布日期: 2023-09-01
- 語言: Matlab
- 標簽: nsga2??matlab??optimization??
資源簡介
Matlab編寫多目標優化算法NSGA-Ⅱ的詳解以及論文詳解

代碼片段和文件信息
function?NSGAII()
clc;
%?format?compact;
tic;
%?hold?on
%--初始化?參數設定
generations=100;????????%迭代次數
popnum=100;?????????????%種群大小(偶數)
poplength=30;???????????%個體長度
minvalue=repmat(zeros(1poplength)popnum1);???%個體最小值---B?=?repmat(A?m?n)?%將矩陣A復制m*n塊,即B由m*n塊A平鋪而成
maxvalue=repmat(ones(1poplength)popnum1);????%個體最大值
population=rand(popnumpoplength).*(maxvalue-minvalue)+minvalue;????%產生新的初始種群
????%--開始迭代進化
????for?gene=1:generations??????%開始迭代
????????%--交叉
????????newpopulation=zeros(popnumpoplength);??%子代種群
????????for?i=1:popnum/2????????????????????????%交叉產生子代
????????????k=randperm(popnum);?????????????????%從種群中隨機選擇出兩個父母,不采用二進制聯賽方法
????????????beta=(-1).^round(rand(1poplength)).*abs(randn(1poplength))*1.481;?????%采用正態分布交叉產生兩個子代
????????????newpopulation(i*2-1:)=(population(k(1):)+population(k(2):))/2+beta.*(population(k(1):)-population(k(2):))./2;??%產生第一個子代
????????????newpopulation(i*2:)=(population(k(1):)+population(k(2):))/2-beta.*(population(k(1):)-population(k(2):))./2;????%產生第二個子代
????????end
????????%--變異
????????k=rand(size(newpopulation));????%隨機選擇要變異的基因位
????????miu=rand(size(newpopulation));??%采用多項式變異
????????temp=k<1/poplength?&?miu<0.5;???%要變異的基因位
????????newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*((2.*miu(temp)+(1-2.*miu(temp)).*(1-(newpopulation(temp)-minvalue(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21)-1);????????%變異情況一
????????newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*(1-(2.*(1-miu(temp))+2.*(miu(temp)-0.5).*(1-(maxvalue(temp)-newpopulation(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21));??%變異情況二
????????%--越界處理/種群合并
????????newpopulation(newpopulation>maxvalue)=maxvalue(newpopulation>maxvalue);?%子代越上界處理
????????newpopulation(newpopulation ????????newpopulation=[population;newpopulation];???%合并父子種群
????????%--計算目標函數值
????????functionvalue=zeros(size(newpopulation1)2);???%合并后種群的各目標函數值,這里問題是ZDT1
????????functionvalue(:1)=newpopulation(:1);???%計算第一維目標函數值
????????g=1+9*sum(newpopulation(:2:poplength)2)./(poplength-1);
????????functionvalue(:2)=g.*(1-(newpopulation(:1)./g).^0.5);?%計算第二維目標函數值
????????%--非支配排序
????????fnum=0;?????%當前分配的前沿面編號
????????cz=false(1size(functionvalue1));??????%記錄個體是否已被分配編號
????????frontvalue=zeros(size(cz));?????????????%每個個體的前沿面編號
????????[functionvalue_sortednewsite]=sortrows(functionvalue);?%對種群按第一維目標值大小進行排序?則第一行個體p即為種群中支配個體p的數量為零的個體,Np=0
????????while?~all(cz)??????%開始迭代判斷每個個體的前沿面,采用改進的deductive?sort
????????????fnum=fnum+1;
????????????d=cz;
????????????for?i=1:size(functionvalue1)?%:(1)找到種群中所有n=0的個體,并保存在當前集合F1中;
????????????????if?~d(i)
????????????????????for?j=i+1:size(functionvalue1)?%判斷i對應的所有集合里面的支配和非支配的解,被i支配則為1,不被i支配則為0
????????????????????????if?~d(j)
????????????????????????????k=1;
????????????????????????????for?m=2:size(functionvalue2)?%判斷是否支配,找到個體p不支配的個體,標記為k=0
???????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5838??2019-06-10?13:52??nsga2\nsga2.m
?????文件????????310??2019-06-10?13:52??nsga2\備注.txt
?????文件????1970580??2019-06-10?13:52??nsga2\非支配排序遺傳算法(NSGA)的研究與應用.pdf
?????目錄??????????0??2019-06-10?13:52??nsga2
-----------?---------??----------?-----??----
??????????????1976728????????????????????4
評論
共有 條評論