m基于PSO粒子群优化的可靠性和费用优化问题求解MATLAB仿真

1.算法概述

PSO是粒子群优化算法(——Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。。这里理论部分和论文《基于配电系统可靠性的开关优化配置研究》完全相同,项目就仿真代码的算法流程做简单的介绍。



传统的PSO如下:

本课题对PSO做了如下两点改进:

第一,引入惯性因子:


那么上面的式子可以表示为:


第二,引入变异因子:

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解,在每一次迭代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值。另一个极值是整个种群目前找到的最优解,这个极值是全局机制。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。


PSO 过程:

第1 步: 种群随机初始化。

第2 步: 对种群内的每一个个体计算适应值(fitness value) , 适应值与最优解的距离直接有关。

第3 步: 种群根据适应值进行复制。

第4 步: 如果终止条件满足, 则停止; 否则转到第2 步。

PSO 算法中每个优化问题的解都有是搜索空间中的一只鸟, 称为粒子。与其他进化计算技术不同的是群体中的每个粒子可以记忆自己到过的最优位置, 并能感知邻近群体已达到的最优位置, 每个粒子能够根据自身到过的最优位置和邻近群体已到过的最优位置来更新自己, 然后粒子们不断地追随当前的最优粒子在解空间搜索。



2.部分程序

..................................................................

popsize = 10;

num     = 5;

%注意,如下两组参数,在实际中,可有配电网的公式得到,这里重点是对PSO在可靠性满足的情况下进行费用优化,故直接通过参数进行输入

%定义价格初始参数

%F = min(alpha*ASUI + beta*f);

%F           = [0.025,0.075,0.04,0.035,0.05];


%计算f = CS + CM + CL

%CS开关设备投资费用

%CS开关设备投资费用

M = 5;            %开关类型的总数

N = [2 10 3 10 24];      %每个类型的开关的安装台数,该参数的设置和M值有关

Cs= [0.0003 0.0004 0.0005 0.0006 0.0005];%每个类型的开关的单价,该参数的设置和M值有关

i = 0.6;          %贴现率

P = [2 2 2 2 2];   %第j中开关的使用寿命,该参数的设置和M值有关

for j = 1:M

CS_sub(j) = N(j) * Cs(j) * ( ((1+i)^P(j))*i )/( ((1+i)^P(j)) - 1 );

end

CS = 0;

for j = 1:M

CS = CS + CS_sub(j);%公式4.3

end

%CM

%CM

Cso = 0.1;%投资费用

r   = 0.3; %运行费用所在投资费用的比例

CM = Cso * r;

%CL

%CL

%系统年停电损失费用

LP = num;

T  = 4;

for i = 1:LP

for j = 1:T

EENS(i,j) = 0.05*N(i)*rand();

C(i,j)    = 0.05*rand();

end

end

for i = 1:LP

for j = 1:T

CL_sub(i,j) = EENS(i,j)*C(i,j);    

end

CL(i) = sum(CL_sub(i,:));

end

for i = 1:LP

f(i) = CS  + CM + CL(i);

end


%ASUI

NT = 1000;

for i = 1:LP

U(i) = round(100*rand);

ASUI(i) = U(i)*N(i)*100 / NT/8760;

end

alpha = 0.5;

beta  = 0.5;

for i = 1:LP

F(i) = alpha*ASUI(i) + beta*f(i);

end


%在不同价格指数下的可靠性指标

Reliability =[0.95,0.92,0.75,0.88,0.83];

F           = F';

r0          = 0.9;

Pop_sub     = zeros(popsize,num+2);                   

New_pop_sub = zeros(popsize,num+2);    

PSO_V         = zeros(popsize,num);

%在论文中,这两个参数定义为2.05

c1          = 2.05;%加速度常数

c2          = 2.05;%加速度常数

MaxIteration= 50;%最大迭代次数

%最大最小速度

V_max       =  1;

V_min       = -1;

%最大最小个体

P_max       = 3;

P_min       = 0 ;

%% 粒子参数初始化

%粒子参数初始化,且初始化得满足可靠性指标

[BEST,Pop_sub,New_pop_sub] = PSO_initial(Pop_sub,New_pop_sub,popsize,num,Reliability,F,r0);


%速度初始化

for i=1:popsize

for j=1:num

PSO_V(i,j)=rands(1);

end

end


%% 主程序,通过PSO进行费用优化

ws = zeros(MaxIteration,1);


for k=1:MaxIteration

k

ws(k) = 0.9-0.5*k/MaxIteration;%惯性权重,对应论文公式4.17


%最大值计算

for i=1:popsize                                                      

if Pop_sub(i,num+2) < New_pop_sub(i,num+2)  

New_pop_sub(i,:) = Pop_sub(i,:);  

end


if New_pop_sub(i,num+2) < BEST(num+2)  

BEST = New_pop_sub(i,:);  

end

end


%将计算状态进行保存

PSO_state(k,1) = k;


PSO_state(k,2) = BEST(num+2);


PSO_state(k,3) = min(Pop_sub(:,num+2));


PSO_state(k,4) = max(Pop_sub(:,num+2));


%更新位置与速度  

for i=1:popsize

for j=1:num

%更新速度,对应论文公式4.15

PSO_V(i,j)     = ws(k)*PSO_V(i,j) + c1*rand*(New_pop_sub(i,j)-Pop_sub(i,j)) + c2*rand*(BEST(j)-Pop_sub(i,j));


%对速度进行限速

if PSO_V(i,j) > V_max

PSO_V(i,j) = V_max;%小于最大速度

end

if PSO_V(i,j) < V_min

PSO_V(i,j) = V_min;%大于最小速度    

end            



%更新位置,对应论文公式4.16

Pop_sub(i,j) = Pop_sub(i,j)+PSO_V(i,j);                           


%粒子变异

tmp{k} = Pop_sub(i,j);

if k > 1

%随机选择两个点作为父母点

p = rand(1,1);            

Pop_sub(i,j) = p*tmp{k-1} + (1-p)*tmp{k-1};

end


%由父母例子产生子例子,并带有5%的变异概率

if rand>0.95

%变异

Pop_sub(i,j) = 0.3*rand;

end           



Pop_sub(i,j)=(Pop_sub(i,j));



if Pop_sub(i,j) > V_max

Pop_sub(i,j) = V_max;

end

if Pop_sub(i,j) < V_min

Pop_sub(i,j) = V_min;  

end           


end

end


%保证可靠性的要求,同时计算价格

for i=1:popsize,


Pop_sub(i,num+1)=1;

for j=1:num

Pop_sub(i,num+1)=Pop_sub(i,num+1)*(1-(1-Reliability (j))^Pop_sub(i,j));

end

%保证可靠性要求

if Pop_sub(i,num+1)<r0  

Pop_sub(i,:)=func_Reliability(Pop_sub(i,:),F,Reliability ,r0,num);  

end   


Pop_sub(i,num+2)=Pop_sub(i,1:5)*F;

end

end


.........................................................

02-005m




3.算法部分仿真结果图


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容