• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签:

资源简介

多目标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

评论

共有 条评论