ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

【优化求解】基于matlab粒子群算法求解货物配装优化问题【含Matlab源码 414期】

【优化求解】基于matlab粒子群算法求解货物配装优化问题【含Matlab源码 414期】 欢迎来到海神之光博客之家✅博主简介热爱科研的Matlab仿真开发者修心和技术同步精进个人主页海神之光代码获取方式海神之光Matlab王者学习之路—代码获取方式⛳️座右铭行百里者半于九十。更多Matlab优化求解仿真内容点击①Matlab优化求解 进阶版②付费专栏Matlab优化求解初级版⛳️关注CSDN海神之光更多资源等你来⛄一、粒子群算法简介1 引言自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在。生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型在他的仿真中每一个个体都遵循避免与邻域个体相撞匹配邻域个体的速度飞向鸟群中心且整个群体飞向目标。仿真中仅利用上面三条简单的规则就可以非常接近地模拟出鸟群飞行的现象。1990年 生物学家Frank Heppner也提出了鸟类模型 它的不同之处在于鸟类被吸引飞到栖息地。在仿真中一开始每一只鸟都没有特定的飞行目标只是使用简单的规则确定自己的飞行方向和飞行速度当有一只鸟飞到栖息地时它周围的鸟也会跟着飞向栖息地最终整个鸟群都会落在栖息地。1995年 美国社会心理学家James Kennedy和电气工程师RussellEberhart共同提出了粒子群算法(ParticleS warm Optimization PSO) 该算法的提出是受对鸟类群体行为进行建模与仿真的研究结果的启发。他们的模型和仿真算法主要对Frank Heppner的模型进行了修正以使粒子飞向解空间并在最优解处降落。粒子群算法一经提出由于其算法简单容易实现立刻引起了进化计算领域学者们的广泛关注 形成一个研究热点。2001年出版的J.Kennedy与R.Eberhart合著的《群体智能》将群体智能的影响进一步扩大[] 随后关于粒子群优化算法的研究报告和研究成果大量涌现继而掀起了国内外研究热潮[2-7]。粒子群优化算法来源于鸟类群体活动的规律性进而利用群体智能建立一个简化的模型。它模拟鸟类的觅食行为将求解问题的搜索空间比作鸟类的飞行空间将每只鸟抽象成一个没有质量和体积的粒子用它来表征问题的一个可能解将寻找问题最优解的过程看成鸟类寻找食物的过程进而求解复杂的优化问题。粒子群优化算法与其他进化算法一样也是基于“种群”和“进化”的概念通过个体间的协作与竞争实现复杂空间最优解的搜索。同时它又不像其他进化算法那样对个体进行交叉、变异、选择等进化算子操作而是将群体中的个体看作在l维搜索空间中没有质量和体积的粒子每个粒子以一定的速度在解空间运动 并向自身历史最佳位置P best和邻域历史最佳位置g best聚集 实现对候选解的进化。粒子群算法具有很好的生物社会背景而易于理解由于参数少而容易实现对非线性、多峰问题均具有较强的全局搜索能力在科学研究与工程实践中得到了广泛关注。目前该算法已广泛应用于函数优化、神经网络训练、模式分类、模糊控制等领域。2 粒子群算法理论2.1粒子群算法描述鸟类在捕食过程中鸟群成员可以通过个体之间的信息交流与共享获得其他成员的发现与飞行经历。在食物源零星分布并且不可预测的条件下这种协作机制所带来的优势是决定性的远远大于对食物的竞争所引起的劣势。粒子群算法受鸟类捕食行为的启发并对这种行为进行模仿将优化问题的搜索空间类比于鸟类的飞行空间将每只鸟抽象为一个粒子粒子无质量、无体积用以表征问题的一个可行解优化问题所要搜索到的最优解则等同于鸟类寻找的食物源。粒子群算法为每个粒子制定了与鸟类运动类似的简单行为规则使整个粒子群的运动表现出与鸟类捕食相似的特性从而可以求解复杂的优化问题。粒子群算法的信息共享机制可以解释为一种共生合作的行为即每个粒子都在不停地进行搜索并且其搜索行为在不同程度上受到群体中其他个体的影响[8]同时这些粒子还具备对所经历最佳位置的记忆能力即其搜索行为在受其他个体影响的同时还受到自身经验的引导。基于独特的搜索机制粒子群算法首先生成初始种群即在可行解空间和速度空间随机初始化粒子的速度与位置其中粒子的位置用于表征问题的可行解然后通过种群间粒子个体的合作与竞争来求解优化问题。2.2粒子群算法建模粒子群优化算法源自对鸟群捕食行为的研究一群鸟在区域中随机搜索食物所有鸟知道自己当前位置离食物多远那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。粒子群算法利用这种模型得到启示并应用于解决优化问题。在粒子群算法中每个优化问题的潜在解都是搜索空间中的一只鸟称之为粒子。所有的粒子都有一个由被优化的函数决定的适应度值每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索[9]。粒子群算法首先在给定的解空间中随机初始化粒子群待优化问题的变量数决定了解空间的维数。每个粒子有了初始位置与初始速度然后通过迭代寻优。在每一次迭代中每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞行速度一个极值就是单个粒子本身在迭代过程中找到的最优解粒子这个粒子叫作个体极值另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子这个粒子是全局极值。上述的方法叫作全局粒子群算法。如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子那么在所有邻居粒子中的极值就是局部极值该方法称为局部粒子群算法。2.3粒子群算法的特点粒子群算法本质是一种随机搜索算法它是一种新兴的智能优化技术。该算法能以较大概率收敛于全局最优解。实践证明它适合在动态、多目标优化环境中寻优与传统优化算法相比具有较快的计算速度和更好的全局搜索能力。(1)粒子群算法是基于群智能理论的优化算法通过群体中粒子间的合作与竞争产生的群体智能指导优化搜索。与其他算法相比粒子群算法是一种高效的并行搜索算法。(2)粒子群算法与遗传算法都是随机初始化种群使用适应值来评价个体的优劣程度和进行一定的随机搜索。但粒子群算法根据自己的速度来决定搜索没有遗传算法的交叉与变异。与进化算法相比粒子群算法保留了基于种群的全局搜索策略但是其采用的速度-位移模型操作简单避免了复杂的遗传操作。(3)由于每个粒子在算法结束时仍保持其个体极值即粒子群算法除了可以找到问题的最优解外还会得到若干较好的次优解因此将粒子群算法用于调度和决策问题可以给出多种有意义的方案。(4)粒子群算法特有的记忆使其可以动态地跟踪当前搜索情况并调整其搜索策略。另外粒子群算法对种群的大小不敏感即使种群数目下降时性能下降也不是很大。3 粒子群算法种类3.1基本粒子群算法3.2标准粒子群算法引入研究粒子群算法经常用到的两个概念一是“探索”指粒子在一定程度上离开原先的搜索轨迹向新的方向进行搜索体现了一种向未知区域开拓的能力类似于全局搜索二是“开发”指粒子在一定程度上继续在原先的搜索轨迹上进行更细一步的搜索主要指对探索过程中所搜索到的区域进行更进一步的搜索。探索是偏离原来的寻优轨迹去寻找一个更好的解探索能力是一个算法的全局搜索能力。开发是利用一个好的解继续原来的寻优轨迹去搜索更好的解它是算法的局部搜索能力。如何确定局部搜索能力和全局搜索能力的比例 对一个问题的求解过程很重要。1998年 Shi Yuhui等人提出了带有惯性权重的改进粒子群算法[10]由于该算法能够保证较好的收敛效果所以被默认为标准粒子群算法。其进化过程为在式(6.7)中第一部分表示粒子先前的速度用于保证算法的全局收敛性能第二部分、第三部分则使算法具有局部收敛能力。可以看出式(6.7)中惯性权重w表示在多大程度上保留原来的速度W较大则全局收敛能力较强局部收敛能力较弱w较小则局部收敛能力较强全局收敛能力较弱。当w1时式(6.7)与式(6.5)完全一样表明带惯性权重的粒子群算法是基本粒子群算法的扩展。实验结果表明w在0.8~1.2之间时粒子群算法有更快的收敛速度而当w1.2时算法则容易陷入局部极值。另外在搜索过程中可以对w进行动态调整在算法开始时可给w赋予较大正值随着搜索的进行可以线性地使w逐渐减小这样可以保证在算法开始时各粒子能够以较大的速度步长在全局范围内探测到较好的区域而在搜索后期较小的w值则保证粒子能够在极值点周围做精细的搜索从而使算法有较大的概率向全局最优解位置收敛。对w进行调整可以权衡全局搜索和局部搜索能力。目前采用较多的动态惯性权重值是Shi提出的线性递减权值策略 其表达式如下3.3压缩因子粒子群算法Clerc等人提出利用约束因子来控制系统行为的最终收敛[11] 该方法可以有效搜索不同的区域并且能得到高质量的解。压缩因子法的速度更新公式为实验结果表明与使用惯性权重的粒子群优化算法相比使用具有约束因子的粒子群算法具有更快的收敛速度。3.4离散粒子群算法基本的粒子群算法是在连续域中搜索函数极值的有力工具。继基本粒子群算法之后 Kennedy和Eberhart又提出了一种离散二进制版的粒子群算法[12]。在此离散粒子群方法中将离散问题空间映射到连续粒子运动空间并适当修改粒子群算法来求解在计算上仍保留经典粒子群算法速度-位置更新运算规则。粒子在状态空间的取值和变化只限于0和1两个值 而速度的每一维vi y代表位置每一位xi取值为1的可能性。因此 在连续粒子群中的vij更新公式依然保持不变 但是P best和best只在[0 1] 内取值。其位置更新等式表示如下4 粒子群算法流程粒子群算法基于“种群”和“进化”的概念通过个体间的协作与竞争实现复杂空间最优解的搜索[13]其流程如下(1)初始化粒子群包括群体规模N每个粒子的位置x和速度Vio(2) 计算每个粒子的适应度值fit[i] 。(3) 对每个粒子 用它的适应度值fit[门和个体极值P best(i)比较。如果fit[i] P best(i) 则用fit[i] 替换掉P best(i) 。(4) 对每个粒子 用它的适应度值fit[i] 和全局极值g best比较。如果fit[i] 8 best 则用fit[i] 替换g best。(5)迭代更新粒子的速度v和位置xj。(6)进行边界条件处理。(7)判断算法终止条件是否满足若是则结束算法并输出优化结果否则返回步骤(2)。粒子群算法的运算流程如图6.1所示。5 关键参数说明在粒子群优化算法中控制参数的选择能够影响算法的性能和效率如何选择合适的控制参数使算法性能最佳是一个复杂的优化问题。在实际的优化问题中通常根据使用者的经验来选取控制参数。粒子群算法的控制参数主要包括粒子种群规模N惯性权重w加速系数c和c 最大速度Via x 停止准则 邻域结构的设定 边界条件处理策略等[14]粒子种群规模N粒子种群大小的选择视具体问题而定但是一般设置粒子数为20~50。对于大部分的问题10个粒子已经可以取得很好的结果不过对于比较难的问题或者特定类型的问题粒子的数量可以取到100或200。另外粒子数目越大算法搜索的空间范围就越大也就更容易发现全局最优解当然算法运行的时间也越长。惯性权重w惯性权重w是标准粒子群算法中非常重要的控制参数可以用来控制算法的开发和探索能力。惯性权重的大小表示了对粒子当前速度继承的多少。当惯性权重值较大时全局寻优能力较强局部寻优能力较弱当惯性权重值较小时全局寻优能力较弱局部寻优能力较强。惯性权重的选择通常有固定权重和时变权重。固定权重就是选择常数作为惯性权重值在进化过程中其值保持不变一般取值为[0.81.2]时变权重则是设定某一变化区间在进化过程中按照某种方式逐步减小惯性权重。时变权重的选择包括变化范围和递减率。固定的惯性权重可以使粒子保持相同的探索和开发能力而时变权重可以使粒子在进化的不同阶段拥有不同的探索和开发能力。加速常数c1和c2加速常数c和c 2分别调节向P best和g best方向飞行的最大步长 它们分别决定粒子个体经验和群体经验对粒子运行轨迹的影响反映粒子群之间的信息交流。如果crc20则粒子将以当前的飞行速度飞到边界。此时粒子仅能搜索有限的区域所以难以找到最优解。如果q0则为“社会”模型粒子缺乏认知能力而只有群体经验它的收敛速度较快但容易陷入局部最优如果oy0则为“认知”模型没有社会的共享信息个体之间没有信息的交互所以找到最优解的概率较小一个规模为D的群体等价于运行了N个各行其是的粒子。因此一般设置c1C2通常可以取c1cg1.5。这样个体经验和群体经验就有了同样重要的影响力使得最后的最优解更精确。粒子的最大速度vmax粒子的速度在空间中的每一维上都有一个最大速度限制值vd max用来对粒子的速度进行钳制 使速度控制在范围[-Vimax va max] 内这决定问题空间搜索的力度 该值一般由用户自己设定。Vmax是一个非常重要的参数如果该值太大则粒子们也许会飞过优秀区域而如果该值太小则粒子们可能无法对局部最优区域以外的区域进行充分的探测。它们可能会陷入局部最优而无法移动足够远的距离而跳出局部最优 达到空间中更佳的位置。研究者指出 设定Vmax和调整惯性权重的作用是等效的 所以!max一般用于对种群的初始化进行设定 即将vmax设定为每维变量的变化范围 而不再对最大速度进行细致的选择和调节。停止准则最大迭代次数、计算精度或最优解的最大停滞步数▲t(或可以接受的满意解)通常认为是停止准则即算法的终止条件。根据具体的优化问题停止准则的设定需同时兼顾算法的求解时间、优化质量和搜索效率等多方面性能。邻域结构的设定全局版本的粒子群算法将整个群体作为粒子的邻域具有收敛速度快的优点但有时算法会陷入局部最优。局部版本的粒子群算法将位置相近的个体作为粒子的邻域收敛速度较慢不易陷入局部最优值。实际应用中可先采用全局粒子群算法寻找最优解的方向即得到大致的结果然后采用局部粒子群算法在最优点附近进行精细搜索。边界条件处理当某一维或若干维的位置或速度超过设定值时采用边界条件处理策略可将粒子的位置限制在可行搜索空间内这样能避免种群的膨胀与发散也能避免粒子大范围地盲目搜索从而提高了搜索效率。具体的方法有很多种 比如通过设置最大位置限制Xmax和最大速度限制Vmax 当超过最大位置或最大速度时 在范围内随机产生一个数值代替或者将其设置为最大值即边界吸收。⛄二、部分源代码%clear all;ticclc;%format long;%------给定初始化条件----------------------------------------------c12; %学习因子1c22; %学习因子2w0.7; %惯性权重MaxDT20; %最大迭代次数HX10;D8; %搜索空间维数未知数个数N40; %初始化群体个体数目%K10^6; %设置精度(在已知最小值时候用)M110;%货车载重V250;%货车容积weight[64,52,50,41,22,20,14,2];%物体重量volume[110,108,96,80,49,50,40,7];%物体体积%load(‘psodata.mat’);%------初始化种群的个体(可以在这里限定位置和速度的范围)------------xround(rand([N D])); %随机初始化位置vrand([N D]); %随机初始化速度%------先计算各个粒子的适应度并初始化Pi和Pg----------------------for i1:Nplbestfitness(x(i,:),D,M,V,weight,volume);%plbest表示个体最优值pxbestx(i,:);%pxbest表示个体最优位置endgxbestx(1,:); %gxbest为全局最优位置for i2:Nif fitness(x(i,:),D,M,V,weight,volume)fitness(gxbest,D,M,V,weight,volume)gxbestx(i,:);endend%fitness(gxbest,D,M,V,weight,volume)%%------进入主要循环按照公式依次迭代直到满足精度要求------------sumv0;summ0;for H1:HXSum0;SUM0;for t1:MaxDTfor i1:Nv(i,:)wv(i,:)c1rand()(pxbest-floor(x(i,:)))c2rand()(gxbest-floor(x(i,:)));x(i,:)x(i,:)v(i,:);%%用于把每个分量取为0和1for j1:Dif rand()1/(1exp(-v(i,j))) %Sigmoid函数x(i,j)0;elsex(i,j)1;endend%x(i,:)x1crossover(x(i,:),gxbest,D);%把当前粒子与全局最优粒子的位置进行交叉%x2crossover(x1,y,D);x3mutation(x1);%把当前粒子的位置进行变异if fitness(x3,D,M,V,weight,volume)plbestplbestfitness(x3,D,M,V,weight,volume);pxbestx3;endendif plbestfitness(gxbest,D,M,V,weight,volume)gxbestpxbest;endglbestfitness(gxbest,D,M,V,weight,volume);%glbest表示全局最优值SumSumglbest(1);aveg1Sum/t;%体积平均SUMSUMglbest(2);aveg2SUM/t;%载重平均Z1(t)aveg1;Z2(t)aveg2;% X(t)Pbest(1);%Y(t)Pbest(2);%Q(t)Pbest(3);end%%----------------最后给出计算结果-----------------------------disp(*******************************************************)disp(‘函数的全局最优位置为’)Solutiongxbestdisp(‘最后得到的优化极值为’)Resultfitness(gxbest,D,M,V,weight,volume)WVResult(1)WMResult(2)Z1(H)WV;Z2(H)WM;%disp(‘箱子的体积利用率’)sumvsumvWV;%disp(‘货车的载重利用率’)summsummWM;endfor i1:Nplbestfitness(x(i,:),D,M,V,weight,volume);%%plbest表示个体最优值pxbestx(i,:);%pxbest表示个体最优位置endgxbestx(1,:); %gxbest为全局最优位置for i2:Nif fitness(x(i,:),D,M,V,weight,volume)fitness(gxbest,D,M,V,weight,volume)gxbestx(i,:);endend%fitness(pg,D,M,V,weight,volume)%%------进入主要循环按照公式依次迭代直到满足精度要求------------Sum0;SUM0;for t1:MaxDTfor i1:Nv(i,:)wv(i,:)c1rand()(pxbest-floor(x(i,:)))c2rand()(gxbest-floor(x(i,:)));x(i,:)x(i,:)v(i,:);%用于把每个分量取为0和1for j1:Dif rand()1/(1exp(-v(i,j))) %Sigmoid函数x(i,j)0;elsex(i,j)1;endendif fitness(x(i,:),D,M,V,weight,volume)plbest plbestfitness(x(i,:),D,M,V,weight,volume); end if plbestfitness(gxbest,D,M,V,weight,volume) gxbestpxbest; end glbestfitness(gxbest,D,M,V,weight,volume);%glbest表示全局最优值 SumSumglbest(1); aveg1Sum/t;%体积平均 SUMSUMglbest(2); aveg2SUM/t;%载重平均 Z3(t)aveg1; Z4(t)aveg2; %X(t)Pbest(1); %Y(t)Pbest(2); %Q(t)Pbest(3);end⛄三、运行结果⛄四、matlab版本及参考文献1 matlab版本2014a2 参考文献[1] 曹宏美.基于改进粒子群算法的车辆配装问题求解[J].控制工程.20083 备注简介此部分摘自互联网仅供参考若侵权联系删除 仿真咨询1 各类智能优化算法改进及应用生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化2 机器学习和深度学习方面卷积神经网络CNN、LSTM、支持向量机SVM、最小二乘支持向量机LSSVM、极限学习机ELM、核极限学习机KELM、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断3 图像处理方面图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知4 路径规划方面旅行商问题TSP、车辆路径问题VRP、MVRP、CVRP、VRPTW等、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化5 无人机应用方面无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配6 无线传感器定位及布局方面传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化7 信号处理方面信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化8 电力系统方面微电网优化、无功优化、配电网重构、储能配置9 元胞自动机方面交通流 人群疏散 病毒扩散 晶体生长10 雷达方面卡尔曼滤波跟踪、航迹关联、航迹融合
返回列表