資源簡介
多目標perota優化MATLAB算法,運用算法,通過MATLAB進行自動優化

代碼片段和文件信息
%%?該函數演示多目標perota優化問題
%清空環境
clc
clear
load?data
%%?初始參數
objnum=size(P1);?%類中物品個數
weight=92;????????%總重量限制
%初始化程序
Dim=5;?????%粒子維數
xSize=50;??%種群個數
MaxIt=200;?%迭代次數
c1=0.8;????%算法參數
c2=0.8;????%算法參數?
wmax=1.2;??%慣性因子
wmin=0.1;??%慣性因子
x=unidrnd(4xSizeDim);??%粒子初始化
v=zeros(xSizeDim);??????%速度初始化
xbest=x;???????????%個體最佳值
gbest=x(1:);??????%粒子群最佳位置
%?粒子適應度值?
px=zeros(1xSize);???%粒子價值目標
rx=zeros(1xSize);???%粒子體積目標
cx=zeros(1xSize);???%重量約束
%?最優值初始化
pxbest=zeros(1xSize);?%粒子最優價值目標
rxbest=zeros(1xSize);?%粒子最優體積目標
cxbest=zeros(1xSize);??%記錄重量,以求約束
%?上一次的值
pxPrior=zeros(1xSize);%粒子價值目標
rxPrior=zeros(1xSize);%粒子體積目標
cxPrior=zeros(1xSize);%記錄重量,以求約束
%計算初始目標向量
for?i=1:xSize
????for?j=1:Dim?%控制類別
????????px(i)?=?px(i)+P(x(ij)j);??%粒子價值
????????rx(i)?=?rx(i)+R(x(ij)j);??%粒子體積
????????cx(i)?=?cx(i)+C(x(ij)j);??%粒子重量
????end
end
%?粒子最優位置
pxbest=px;rxbest=rx;cxbest=cx;
%%?初始篩選非劣解
flj=[];
fljx=[];
fljNum=0;
%兩個實數相等精度
tol=1e-7;
for?i=1:xSize
????flag=0;??%支配標志
????for?j=1:xSize??
????????if?j~=i
????????????if?((px(i)rx(j)))?||((abs(px(i)-px(j)) ????????????????????&&??(rx(i)>rx(j)))||((px(i)weight)?
????????????????flag=1;
????????????????break;
????????????end
????????end
????end
????
????%判斷有無被支配
????if?flag==0
????????fljNum=fljNum+1;
????????%?記錄非劣解
????????flj(fljNum1)=px(i);flj(fljNum2)=rx(i);flj(fljNum3)=cx(i);
????????%?非劣解位置
????????fljx(fljNum:)=x(i:);?
????end
end
%%?循環迭代
for?iter=1:MaxIt
????
????%?權值更新
????w=wmax-(wmax-wmin)*iter/MaxIt;
?????
????%從非劣解中選擇粒子作為全局最優解
????s=size(fljx1);???????
????index=randi(s11);??
????gbest=fljx(index:);
????%%?群體更新
????for?i=1:xSize
????????%速度更新
????????v(i:)=w*v(i:)+c1*rand(11)*(xbest(i:)-x(i:))+c2*rand(11)*(gbest-x(i:));
????????
????????%位置更新
????????x(i:)=x(i:)+v(i:);
????????x(i:)?=?rem(x(i:)objnum)/double(objnum);
????????index1=find(x(i:)<=0);
????????if?~isempty(index1)
????????????x(iindex1)=rand(size(index1));
????????end
????????x(i:)=ceil(4*x(i:));????????
????end
????
????%%?計算個體適應度
????pxPrior(:)=0;
????rxPrior(:)=0;
????cxPrior(:)=0;
????for?i=1:xSize
????????for?j=1:Dim?%控制類別
????????????pxPrior(i)?=?pxPrior(i)+P(x(ij)j);??%計算粒子i?價值
????????????rxPrior(i)?=?rxPrior(i)+R(x(ij)j);??%計算粒子i?體積
????????????cxPrior(i)?=?cxPrior(i)+C(x(ij)j);??%計算粒子i?重量
????????end
????end
????
????%%?更新粒子歷史最佳
????for?i=1:xSize
????????%現在的支配原有的,替代原有的
?????????if?((px(i)rxPrior(i)))?||((abs(px(i)-pxPrior(i)) ?????????????????&&??(rx(i)>rxPrior(i)))||((px(i)weight)?
????????????????xbest(i:)=x(i:);%沒有記錄目標值
????????????????pxbest(i)=pxPrior(i);rxbest(i)=rxPrior(i);cxbest(i)=cxPrior(i);
??????????end
????????
????????%彼此不受支配,隨機決定
????????if?~(?((px(i)rxP
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-20?15:01??多目標perota優化問題\
?????文件?????????422??2018-05-17?14:20??多目標perota優化問題\data.mat
?????文件????????6048??2018-05-17?14:20??多目標perota優化問題\main.m
- 上一篇:PSO優化BP神經網絡模型.zip
- 下一篇:小波神經網絡matlab詳細代碼
評論
共有 條評論