改进粒子群算法MATLAB代码,基于粒子群优化算法求解指派问题
经济负荷调度问题是在满足约束条件的情况下,以最低的成本将负荷分配给工厂。它被公式化为一个优化问题,即在满足需求和损耗的同时,使所有承诺厂的总燃料费用最小。这些问题有许多变体,它们以不同的方式模拟目标和约束。
在数学上,基本的经济调度问题可以描述为最小化所有承诺的工厂的总燃料成本的最小化问题。
第二部分代码% pso _ Trelea _矢量化. m
%通用粒子群优化器
%查找任何项目的最小值或最大值
%谷氨酸钠基质功能
%
%使用率:
%[选择选项]=PSO(函数名,d)
%或:
%[选择输出,tr,te]=.
% PSO(functname,D,mv,VarRange,minmax,PSOparams,plotfcn,PSOseedValue)
%
输入百分比:
% functor name-要优化的matlab函数字符串
函数输入的% D-#值(问题的维数)
%
%可选输入:
% mv-最大粒子速度,长度为d的标量或矢量
%(这允许每个组件具有自己的最大速度),
%默认值=4,如果不输入,则设置为NaN或enter。
%
%变量范围-每个输入变量的范围矩阵,
%默认值-100到100,格式为:
%[最小值1最大值1
%最小2最大2
% .
%最小值最大值]
%
% min=0,函数最小化(默认值)
%=1,函数最大化
%=2,函数的目标是P(12)(最小化遍历的距离)
% PS蛋白酶-PSO参数
% P(1)-更新显示之间的时间,默认值=100。如果它是0,
%无显示
% P(2) -要训练的最大迭代次数(历元),默认值=2000。
% P(3) -人口规模,默认值=24
%
% P(4) -加速度常数1(局部最佳影响),默认值=2
% P(5) -加速度常数2(全局最佳影响),默认值=2
% P(6) -初始惯性权重,默认值=0.9
% P(7) -最终惯性权重,默认值=0.4
% P(8) -惯性重量为最终值时的历元,默认值=1500
% P(9)-最小全局误差梯度,
%如果abs(Gbest(i 1)-Gbest(i))梯度超过
%特定时段长度,终止运行,默认值=1e-25
% P(10)-误差梯度标准终止运行之前的时期,
默认值%=150(如果SSE在250年中没有变化)
%然后退出
% P(11)-错误目标,如果NaN具有无约束的最小值或最大值,则默认值为NaN。
% P(12)-类型标志(要使用哪个PSO)
% 0=带间隙的普通粒子群算法(默认)
% 1,2=托雷里类型1,2
% 3=Klarck收缩PSO,类型1 "
% P(13)- PS已经确定,默认值为0。
%=0表示初始位置都是随机的。
%=1表示初始粒子作为用户输入。
%
% drawing fcn-可选的绘图函数名,默认为"主题"、
%自己做,放在这里。
%
% PS摄入值-取决于P(13)的初始粒子位置必须为
如果P(13)为1或2,并且没有用于P(13)=0,则需要
%是nXm,其中n=ps,m=d。
%如果n ps和/或m D,剩余的值是随机设置的。
%在情人节。
%输出:
% opt out-最佳输入和相关的最小/最大输出函数,形式为:
% [ bestin1
% bestin2
如果存在(“PSOSE值”)
tmpsz=size(psose value);
如果D (2)
错误(" PSOSE值列大小必须为d或更小");
目标
如果ps tmpsz(1)
错误(" PSOSE值行长度必须等于或小于粒子数");
目标
目标
%设置绘图标志
If (P(1))~=0
plot flg=1;
仍然
plot=0;
目标
%预分配变量以加快速度。
Tr=one (1,me)* nana;
%负责在此设置最大速度和位置参数。
如果长度(mv)==1
Velkmin=-mv * 1%最小值,psXD矩阵
Velkmax=mv * one (ps,d);%最大垂直度
Elseif长度(mv)==D
如果(迭代最佳误差)^2=(gbestval-ergoal)^2) 2
Bestwal=Et Bestwal
gbest=pbest(idx1,);
%与用于神经网络训练的训练方案一起使用。
%在每次迭代中将gbest分配给净值,这些临时分配
%主要用于绘图。
if strcmp(functname, pso_neteval(i-250:i,(bestpos(i-250:i,dimcnt)),20);
% % pred_coef=polyfit(200:i,(bestpos(200:i,dimcnt)),20);
% gbest_pred(i,dimcnt)=polyval(pred_coef,I 1);
%结束
%否则
% gbest_pred(i,)=zeros(size(GB est));
%结束
%gbest_pred(i,)=gbest
%assignin(base , gbest_pred ,GB est _ pred);
% %转换到非惯性坐标系
% gbestoffset=GB est-GB est _ pred(I,);
% GB est=GB est-gbestoffset;
% pos=pos repmat(gbestoffset,ps,1);
% pbest=pbest repmat(gbestoffset,ps,1);
% psopsopsopsopsopsopsopsopsopsopsopsopsopsopsopso
%获得新的速度、位置(这是粒子群算法算法的核心)
%每个历元获得一组新的随机数
rannum1=rand([ps,D]);用于特雷利亚和Clerc类型的%
rannum2=rand([ps,D]);
如果trelea==2
%来自特雷利亚的论文,参数集2
vel=0.729 .*vel.%上一级别
1.494.*rannum1 .*(最佳位置).独立百分比
1.494.*rannum2 .*(repmat(gbest,ps,1)-pos);社交百分比
elseif trelea==1
%来自特雷利亚的论文,参数集一
vel=0.600 .*vel.%上一级别
1.700.*rannum1 .*(最佳位置).独立百分比
1.700.*rannum2 .*(repmat(gbest,ps,1)-pos);社交百分比
elseif trelea==3
% Clerc的类型1 粒子群优化
vel=chi*(vel.%上一级别
ac1 .*rannum1 .*(最佳位置).独立百分比
ac2 .*rannum2 .*(repmat(gbest,ps,1)-pos));社交百分比
其他
%带惯性权重的通用粒子群算法算法
%获得惯性权重,只是一个线性函数西印度群岛。历元参数国际焊接工程师
如果我=我
iwt(I)=((iw2-iw1)/(iwe-1))*(I-1)iw1;
其他
iwt(I)=iw2;
目标
%随机数,包括加速度常数
ac11=rannum1 .* ac1具有惯性的通用粒子群算法的百分比
ac22=rannum2 .* ac2
vel=iwt(i).*vel.%上一级别
ac11 .*(最佳位置).独立百分比
ac22 .*(repmat(gbest,ps,1)-pos);社交百分比
目标
%此处使用屏蔽限制速度
vel=( (vel=velmaskmin).*velmaskmin ) ( (vel velmaskmin).* vel);
vel=( (vel=velmaskmax).*velmaskmax ) ( (vel velmaskmax).* vel);
%更新新职位(PSO算法)
位置=位置级别
%位置屏蔽,将位置限制到所需的搜索空间
%方法:0)无位置限制,1)极限时饱和,
% 2)在极限时绕回,3)在极限时反弹
minposmask _ throwaway=pos=posmaskmin;%这些是psXD矩阵
minposmask _ keep=pos posmaskmin
maxposmask _ throwaway=pos=posmaskmax;
maxposmask _ keep=pos posmaskmax
如果posmaskmeth==1
%这是饱和法
pos=( minposmask_throwaway .*posmaskmin ) ( minposmask_keep).* pos);
pos=( maxposmask_throwaway .*posmaskmax ) ( maxposmask_keep).* pos);
elseif posmaskmeth==2
%这是绕回方法
pos=( minposmask_throwaway .*posmaskmax ) ( minposmask_keep).* pos);
pos=( maxposmask_throwaway .*posmaskmin ) ( maxposmask_keep).* pos);
elseif posmaskmeth==3
%这是反弹方法,粒子从边界反弹
pos=( minposmask_throwaway .*posmaskmin ) ( minposmask_keep).* pos);
pos=( maxposmask_throwaway .*posmaskmax ) ( maxposmask_keep).* pos);
vel=(vel .*minposmask_keep).* minposmask _ throwaway);
vel=(vel .*maxposmask_keep) (-vel .* maxposmask _ throwaway);
其他
%没有变化,这是最初的埃伯哈特肯尼迪法,
%如果psoparams (P),它会让粒子增长超出界限
%特别是Vmax,设置不正确,见文献
目标
% psopsopsopsopsopsopsopsopsopsopsopsopsopsopsopso
%根据收敛速度检查停止标准
%误差
TM P1=ABS(tr(I)-gbestval);
如果tmp1 ergrd
CNT 2=0;
elseif tmp1=ergrd
CNT 2=CNT 2 1;
如果cnt2=ergrdep
如果plotflg==1
fprintf(message,I,gbestval);
disp(" ");
显示([ -解决方案可能,GBest至少没有改变,
num2str(ergrd), for ,
num2str(cnt2),纪元]);
评估(错误目标)
if((gbestval=errgoal)(minmax==0))((gbestval=errgoal)(minmax==1))
如果plotflg==1
fprintf(message,I,gbestval);
disp(" ");
显示([ -达到错误目标,成功终止!]);
eval((tr(I)errgoal)(gbestval=errgoal))((tr(I)errgoal).
(gbestval=errgoal))
如果plotflg==1
fprintf(message,I,gbestval);
disp(" ");
显示([ -达到错误目标,成功终止!]);
eval(gbestoffset,ps,1);
% Pb est=Pb est-rep mat(gbestoffset,ps,1);
% gbest=gbest gbestoffset
结束%结束历元循环
%%清除温度输出
% eval(find(~ isnan(tr)))];
返回
3运行结果
四参考文献[1]芮钧,陈守伦。矩阵实验室粒子群算法工具箱求解水电站优化调度问题[J]的缩写.中国农村水利水电, 2009(1):3.
[2]解玖霞。基于粒子群算法的主动配电网经济优化调度[J]的缩写.电气技术, 2017(9):4.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。