1 算法介绍

1.1 模拟退火算法

1.2 粒子群算法

粒子群算法同遗传算法相似,也是根据生物界中的种群行为而发明的一种算法。也是解决优化问题常用的一种算法。其原理简单,实现起来也不复杂,并且经过自己编程实践发现其速度要优于遗传算法。

粒子群算法源于鸟群觅食行为,假设有一群鸟,在随机搜索食物,在搜索区域内只有一块儿食物,一开始时所有的鸟儿都不知道食物所在的方位,但它们能够知道自己离食物有多远,以及它们能够记住在自己飞过的路程当中距离食物最近的位置,同时它们也能够知道鸟群中所有鸟儿经过的路程当中,离食物最近的位置。那每一只鸟儿将如何去寻找食物呢?简单来说,每一只鸟儿在当前位置的基础上,如何做出决策,下一步向哪里飞呢?实际,每只鸟儿将综合自身的经验,以及群体的经验来在做出下一步飞向哪里的决策,即每只鸟儿将根据自己所经过的路程中离食物最近的位置以及鸟群中所有鸟儿经过的路程当中离食物最近的位置来做出决策,决定下一步自己向哪里飞。这便是粒子群算法的基本原理

在粒子群算法中,粒子的位置对应于原问题的解。粒子的适应值就是将粒子的位置(对应于原问题的解)带入到目标函数中所得到的目标函数值。粒子的速度决定粒子下一步向哪里飞以及飞多远。

接下来先给在粒子群算法中最重要的两个公式:

在给出公式之前,先设定一些符号,

:代表优化问题在D维空间上的一个解,对应于粒子群中第i个粒子的位置

:代表第i个粒子所经历的所有路程上最优的位置,即其在飞翔过程中离目标函数最优解最近的位置

:代表所有粒子经历过的路程上的最优位置(可以认为是所有个体最优位置当中的最优位置)

:代表粒子i的飞翔速度

好了,接下来给出两个粒子群算法中的核心公式

公式一:

公式二:

在上面两个公式中,代表粒子编号;代表维度编号;为惯性因子,其取值范围为非负;为加速常数,其取值范围为非负常数;为0到1范围内的随机数;为约束因子,用来控制速度的权重。

需要说明的是,为了限制某个粒子的飞翔范围过大,我们为粒子的每一个维度设置一个最大飞翔速度,即如果粒子i在d维上的飞翔速度大于,则将这一维上的飞翔速度设置为,如果小于则将其设置为的取值一般为对应维度所代表的决策变量取值范围的百分之十到百分之二十。例如设决策变量的取值范围为,则

接下来对上文中的一些参数加以解释说明:

1.粒子数:粒子数的选取一般在20个到40个之间,但是需要具体问题具体对待,如果对于复杂问题,则需要设置更多的粒子,粒子数量越多,其搜索范围就越大。

2.惯性因子:用来控制继承多少粒子当前的速度的,越大则对于当前速度的继承程度越小,越小则对于当前速度的继承程度越大。有些同学可能会产生疑问,是不是说反了。其实不是,从公式中可以明确看出,其值越大,则速度的改变幅度就越大,则对于粒子的当前速度继承越小;反之,速度的改变幅度越小,则对于粒子当前速度继承越大。因此如果的值越大,则解的搜索范围越大,可以提高算法的全局搜索能力,但也损失了局部搜索能力,有可能错失最优解;反之如果的值越小,则解的搜索范围也就越小,算法的全局搜索能力也就越小,容易陷入局部最优。如果是变量,则其值应该随着迭代次数的增加而减小(类似于梯度下降当中的学习率)。如果为定值,则建议在0.6到0.75之间进行选取。

3.加速常数:通过公式一可以看出,加速常数控制着飞翔速度的计算是更加看重自身经验还是群体经验。公式一中的第二项就是自身经验的体现,加速常数可以看做是用来调整自身经验在计算粒子飞翔速度上的权重。同理是用来控制群体经验在计算粒子飞翔速度过程中的权重的。如果为0,则自身经验对于速度的计算不起作用,如果为0,则群体经验对于粒子飞翔速度的计算不起作用。的取值在学术界分歧很大主要有如下几种情况:

学者
Clerc
Carlisle
Trelea
Eberhart

以下为粒子群算法的具体流程:

1.3 含有分布式电源的配电网结构

2 部分代码

%% 模拟退火粒子群算法分布式电源定容选址优化规划
tic                                                             %测试时间
format short ;
clc;
clear all;
%% 算法初始参数设置
pop=90;                                                         %种群粒子数目
gen=200;                                                         %最大迭代次数M
M=4;                                                            %目标函数个数
V=68;                                                           %控制变量个数
Xmax=10;                                                        %控制变量约束最大值
Xmin=0;                                                         %控制变量约束最小值
g_best=zeros(gen,V);                                            %全局最优存放位置
pop_num=40;                                                     %保存的最优前沿
lamda=0.5;                                                      %退火常数
%% 初始化种群个体
[pop_x,pop_v]=initial(pop,V,M);
%% 模拟退火粒子群算法
for t=1:gen                                                     %进入主要循环,gen迭代次数clear Gbest_valueclear R%%  1.寻找全局最优[pbest,pbest_value,k]=gbest_fitness(pop_x,V,M,pop); g_best(t,:)=pbest;g_best_value(t,:)=pbest_value;%% 1.对各目标函数值进行排序for j = 1 : M[Gbest_value(:,j),R(:,j)]=sort(g_best_value(:,j));end%% 2.根据个体排序计算其适应度for i = 1 : tfor j = 1 : Mif R(i,j)>1ex(i,j)=(pop-R(i,j))^2;else ex(i,j)=k*pop;  endendendex=sum(ex');%% 3.得到适应度最好的全局最优解[Fit,index]=sort(ex');%[y_val,index]=min(g_best_value);clear Fit;gbest=g_best(index,:);%% 2.速度更新change_v=update_v(t,gen,pop_v,pop_x(:,1:68),g_best,V,pop,pbest);pop_v=change_v;%% 2.更新位置change_x=pop_x(:,1:V)+change_v(:,1:V);%% 控制变量约束for i = 1 : popfor j = 1 : Vif change_x(i,j)>Xmaxchange_x(i,j)=unidrnd(10);else if change_x(i,j)<Xminchange_x(i,j)=unidrnd(10);endendendend%% 粒子群速度限制约束%% 求出各个体的目标函数值for i=1:popchange_x(i,V+1:V+M)=mokuaihanshu(pop_x(i,:),pop,M,V);%求出各个体的目标函数值end%% 形成混合种群[y1,x1]=size(pop_x);[y2,x2]=size(change_x);%注意:此时x1不等于x2migle_x(1:y1,:)=pop_x;migle_x(y1+1:y1+y2,1:x2)=change_x;%% 进行非支配排序migle_x = non_domination_sort_mod(migle_x, M, V);%% 选择下一代种群pop_x = replace_chromosome(migle_x, M, V, pop);disp(t);end
Ploss=pop_x(:,V+1)./(10^9);
Cost=pop_x(:,V+2)./(10^6);
if M==3save solution1.txt pop_x -ASCII    %以二进制码保存输出结果[minploss,index]=min(pop_x(:,V+1));L1=(pop_x(index,V+2)); [minCost,indey]=min(pop_x(:,V+2));ploss=pop_x(indey,V+1);plot(pop_x(:,V + 1),pop_x(:,V + 2),'o');xlabel('系统网损');ylabel('总投资与运行成本');title(['NSGAminploss= ',num2str(minploss),' L1= ',num2str(L1),'   ploss=',num2str(ploss),'minL=',num2str(minL)]);
elseif M ==4save solution2.txt pop_x -ASCII    %以二进制码保存输出结果plot3(Ploss,Cost,pop_x(:,V + 3),'.');xlabel('网损');ylabel('总投资与运行成本');zlabel('负荷节点电压偏差');%title(['网损最优',num2str(min(pop_x(:,V + 1))),'成本最优',num2str(min(pop_x(:,V + 2))),'偏差最小',num2str(min(pop_x(:,V + 3)))]);grid
end
​
​
​

3 仿真结果

4 参考文献

[1]王艳敏. 基于可靠性的供应链设施选址问题的优化模型[J]. 科学技术与工程, 2012, 12(011):2517-2520.

5 代码下载

【优化选址】基于模拟退火结合粒子群算法求解分布式电源定容选址问题matlab源码相关推荐

  1. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

  2. 基于多目标粒子群算法在分布式电源选址和定容中的应用matlab程序

    基于多目标粒子群算法在分布式电源选址和定容中的应用matlab程序 摘 要: 为更好地解决分布式电源选址定容问题,提出一种改进的多目标粒子群算法.考虑投资成本.网损以及电压稳定性三因素建立了一个三目标 ...

  3. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1405期】

    ⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...

  4. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】

    ⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...

  5. 【ELM预测】基于粒子群算法改进极限学习机ELM实现数据预测matlab源码

    一.极限学习机的概念 极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法. ELM最大的特点是对于传统的神经网络,尤其是单隐层前馈神经网 ...

  6. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  7. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  8. 粒子群算法,分布式电源选址定容。 以IEEE33节点系统为算例,对分布式电源最佳接入位置及接入容量进行选取

    粒子群算法,分布式电源选址定容. 以IEEE33节点系统为算例,对分布式电源最佳接入位置及接入容量进行选取,以电压越限惩罚和网损为目标,利用粒子群算法进行优化设计,得到最佳接入位置和接入容量,完成选址 ...

  9. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

最新文章

  1. 计算机金融交叉学科考研,22考研:交叉学科可能成为新选择!它有哪些优势?
  2. java里面有控制器吗_java怎么运行控制器里的类 java控制台输入类以及
  3. [zz]Ubuntu10.04源 更新源列表
  4. “傻子”阿甘的大智慧
  5. Python Tensorflow下的Word2Vec代码解释
  6. 挑战性题目DSCT301:求不同形态的二叉树数目
  7. 运动会管理系统的需求调研会纪要
  8. 老式计算机如何设置u盘启动,技嘉主板老式bios设置u盘启动教程
  9. 手工编译Flex SDK 多国语言包
  10. 戴尔服务器加装固态硬盘吗,戴尔如何加装固态硬盘_戴尔电脑增加固态硬盘教程...
  11. 非三星手机无法登录三星账号_如何解决所有三星手机的烦恼
  12. 智能音箱里小度、小爱、天猫精灵哪个更加好?(上)
  13. poi操作word实现分页
  14. char 类型的数组,在函数内能最大能定义多大?
  15. python绘制气象等值线图_用Matplotlib绘制Python等值线图
  16. scriptmanager
  17. Date 的GMT、UTC、ISO、CST、timestamp 等格式 及Moment、Dayjs
  18. 小波阈值去噪的原理及程序
  19. 函数缓存 (Function caching)
  20. python系统命令切换目录_Windows 命令行切换目录

热门文章

  1. H5/C3实践(2) --3D导航栏旋转木马
  2. 换一种思维方式之罗浩的《降级论》
  3. Android — 在服务中发送通知Notification
  4. Oracle RAC集群资源的两种配置方式,Admin Managed 和 Policy Manager,以及实验
  5. SpringBoot整合Swagger2/Swagger3之拦截器配置
  6. 2021年全球聚二甲基二烯丙基氯化铵收入大约252.5百万美元,预计2028年达到307.8百万美元,2022至2028期间,年复合增长率CAGR为 %。同时2020年全球聚二甲基二烯丙基氯化铵销量大
  7. (2022版)一套教程搞定k8s安装到实战 | Ingress
  8. antd Modal
  9. 安装vmware虚拟机详细教程
  10. 考研复试 计算机英语