粒子群算法应用重心法选址问题-基于MATLAB实现

发布于:2022-10-29 ⋅ 阅读:(2283) ⋅ 点赞:(2)

   设在某计划区域内有n个需求点,它们各自的坐标为(x_{i},y_{_{i}}),各点的需求量为w_{i}_{},配送中心到需求点的运费率是r_{i},设该配送中心的坐标是(x,y)。

1、根据求平面中物体重心的方法求配送中心坐标点(模拟重心法)

模拟重心法公式

代入数值,实际求得的值,即为所求得配送中心位置的坐标。

2、精确重心法

   假设配送中心到各需求点的运费为 r_{i},总的运费用为 D,则有:

要想使求得总费用D最小的方法是根据 一阶偏导数为零的原理求解的,计算公式如下:

精确重心法公式

如果从两个方程式的右边完全消除x_{0}y_{0},计算将变得很复杂,计算量也很大。因此,可以采用迭代的方法进行计算,迭代过程如下:

  1. 可用模拟重心公式计算得出的结果作为初始解代入
  2. 利用方程式(1-4)和(2-1)计算该重心点与需求点的总运费
  3. 把分别代入方程式(1-4)和(2-2)中,计算配送中心的改善坐标

计算相对应的总的运输费用C,并与上一次总运费进行比较,如果,则说明为最优解;如果,则说明计算结果得到改善,并且有待更进一步优化,于是返回第三步进行迭代计算。

3、粒子群算法(Particle Swarm Optimization)的基本原理

3.1PSO算法流程

  1. 初始化

初始化粒子群算法的基本参数:问题维度(dimension)、种群规模(population)、迭代次数(interaction)、粒子位置Xi、粒子速度Vi 、历史最优位置(pbest)、全局最优位置(gbest)、位置限制范围(Xlimit)、速度限制范围(Vlimit)、学习因子(自我学习因子C1;社会学习因子C2)、惯性权重w

  • 2.产生粒子的初始位置和速度
 %进入for循环,随机生成一个种群
for i=1:pop 
    for d=1:Dimension
        x(i,d)=Lb(d)+(Ub(d)-Lb(d))*rand(1);
        V(i,d)=Vmin(d)+(Vmax(d)-Vmin(d))*rand(1);
    end
end
  • 3.计算粒子的适应度,更新粒子的历史最优值和全局最优值
  • 4.更新粒子的速度和位置(pso的重点公式)

速度更新:v^{k+1}= wv^{k}+c_{1}rand()\left (pbest- x^{k} \right )+c_{2}rand()\left ( gbest- x^{k}\right )

位置更新:x^{k+1}=x^{k}+v^{k+1}

  • 5.边界处理

迭代过程中,如果粒子i的位置超过了位置和速度的边界,就该粒子i的位置和速度设置为边界值。

  • 6.判断是否达到终止条件(迭代次数),输出全局最优解

3.2 PSO的流程图和伪代码

(2)伪代码

%%本例以求最小值为目标

procedure PSO

for each particle(i)

     Initialize position(Xi) and velocity(Vi) for each particle

     Evaluate particle(i) and set pbest=Xi

end for

gbest=min{pbest}

while not stop

for i=1to pop

Update the position and velocity of each particle

Evaluate particle(i)

if fitness(Xi)<fitness(pbest)

   pbest=Xi

if fitness(gbest)< fitness(pbest)

   gbest=pbest;

end for

end while

print gbest

end procedure


 


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章