【优化调度】基于matlab粒子群算法求解燃机冷热电优化联供问题【含Matlab源码 330期】
一、粒子群算法简介
1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码
二、部分源代码
pop=initpop(80,2,24,66,33);
objvalue=calobjvalue(pop);
PL=[63 57 44 43 43 40 56 66 78 75 89 105 125 121 116 104 101 103 104 121 116 121 106 89];
QL=[139 136 122 128 128 128 131 142 138 138 150 169 183 187 189 183 171 161 154 165 156 148 141 132];
popsize=80;
scope=24;
PMTmax=66;
PMTmin=33;
MaxIt=60;
c1=2;
c2=2;
w=0.6;
v=zeros(2,24,80);
pbest=pop;
objvaluepbest=calobjvalue(pbest);
gbest=pop(:,:,1);
objvaluegbest=objvalue(1);
for i=1:(popsize-1)
if objvalue(i+1)<objvalue(i)
gbest=pop(:,:,i+1); %比较每个粒子的适应度,将适应度最小的粒子位置取做gbest
objvaluegbest=objvalue(i+1);
end
end
iter=0;%迭代次数
while iter<MaxIt
iter=iter+1;
for i=1:popsize
if objvalue(i)<objvaluepbest(i)
objvaluepbest(i)=objvalue(i);
pbest(:,:,i)=pop(:,:,i);%当粒子的适应度小于其最佳适应度时,用其替代原来粒子的最佳适应度,并记下此解
end
end
for i=1:popsize
if objvalue(i)<objvaluegbest
objvaluegbest=objvalue(i);
gbest=pop(:,:,i);%当存在粒子的适应度小于种群的最佳适应度时,用其替代原来种群的最佳适应度,并记下此解
end
end
for i=1:popsize
gbestpop(:,:,i)=gbest;%将二维gbest拓展为三维gbestpop
end
R1=rand(2,24,80);
R2=rand(2,24,80);
v=v*w+c1*R1.*(pbest-pop)+c2*R2.*(gbestpop-pop);
pop=pop+v;
for j=1:popsize
for i=1:scope
if pop(1,i,j)>PMTmax/2.91
pop(1,i,j)=PMTmax/2.91;
end
if pop(1,i,j)<PMTmin/2.91
pop(1,i,j)=PMTmin/2.91;
end
%为满足功率平衡,电网购电由燃气轮机出力求得
pop(2,i,j)=(QL(1,i)-pop(1,i,j)*2*2.91)/2.3+PL(1,i)-2.91*pop(1,i,j);
end
end
objvalue=calobjvalue(pop)
end
gbest
%画图程序
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24];
y1=PL;
y2=2.91*gbest(1,:);
y3=gbest(2,:);
y7=y2+y3-y1;
scatter(x,y1,'k')
hold on
scatter(x,y2,'r*')
hold on
scatter(x,y3,'b^')
hold on
scatter(x,y7,'kx')
plot(x,y1);
hold on
plot(x,y2);
hold on
plot(x,y3);
hold on
plot(x,y7);
xlabel('时刻(h)');
ylabel('输出功率(KW)');
axis([0,24,0,180]);
legend('电负荷','燃机出力','系统与大电网交换功率','电空调功率');
title('夏季各设备电功率曲线图');
y4=QL;
y5=2*2.91*gbest(1,:);
y6=2.3*y7;
figure(2);
scatter(x,y4,'k')
hold on
scatter(x,y5,'r*')
hold on
scatter(x,y6,'b^')
plot(x,y4);
hold on
plot(x,y5);
hold on
plot(x,y6);
xlabel('时刻(h)');
ylabel('制冷功率(KW)');
title('夏季各设备冷功率曲线图');
min)+PMTmin;
VMT(1,i)=PMT(1,i)/2.91;
QMTco(1,i)=2*PMT(1,i);
Qairco(1,i)=QL(1,i)-QMTco(1,i);
if Qairco(1,i)<0;
Qairco(1,i)=0;
QMTco(1,i)=QL(1,i);
VMT(1,i)=QMTco(1,i)/(2*2.91);
end
PGrid(1,i)=PL(1,i)+Qairco(1,i)/2.3- VMT(1,i)*2.91;
pop(1,i,j)=VMT(1,i);
pop(2,i,j)= PGrid(1,i);
end
end
for j=0.5*popsize+1:popsize %按照电网出力均分的粒子(假设从40kw到120kw均分)
for i=1:scope
PGrid(1,i)=(j-40-1)/39*(150-40)+40;
VMT(1,i)=(PL(1,i)-PGrid(1,i)+QL(1,i)/2.3)*2300/4947;
if VMT(1,i)>PMTmax/2.91 %越上限按上限出力
VMT(1,i)=PMTmax/2.91;
end
if VMT(1,i)<PMTmin/2.91 %越下限按下限出力
VMT(1,i)=PMTmin/2.91;
end
QMTco(1,i)=2*PMT(1,i);
Qairco(1,i)=QL(1,i)-QMTco(1,i);%冷功率平衡
PGrid(1,i)=PL(1,i)+Qairco(1,i)/2.3- VMT(1,i)*2.91; %电功率平衡
pop(1,i,j)=VMT(1,i);
pop(2,i,j)= PGrid(1,i);
end
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/113851552
- 点赞
- 收藏
- 关注作者
评论(0)