前些天在忙,他们学生刚盲审完,给他们改完,本想着自己写了一篇准备投出去,事情太多了,现在文章也差不多在写一半了,还有些小细节在修改。
所以现在有些时间写,今天讲的是一个叫做单纯形法的东西。
很多人一听起来就感觉很陌生,什么是单纯形法?
听我下面讲来
单纯形法是代数拓扑中的概念, 通过反射、扩张、收缩等几何变换寻求问题的最优解。是指在空间中构造一个多面体,找出该多面体每个顶点的适配度并进行比较, 找出最佳、次最佳和最差, 通过反射、收缩、扩张等操作更新最差, 形成一个新的多面体。它具有使用方便、适用范围广、收敛速度快等特点。
每一次操作,都会用一个更好的解替换当前的最差解。单纯形法的搜索点如图 1所示。
单纯形法步骤如下: 以最优化问题 为例, 计算最优点 、最差点 、次优点 的函数值, 根据最优点和最差点计算中点位置 , 基本操作如下。
-
反射操作
计算反射点 , 其中 为反射系数 , 常取 1 。
-
扩展操作
如果 , 则计算扩张点 , 其中 为扩展系数, 本文取 2 。如果 , 则用扩张点代替最差点, 否则用反射点替代最差点。
-
压缩操作
如果 , 说明反射方向有误, 进行向内压缩操作 , 其中 为压缩系数, 本文取 0.5 。如果 , 则用压缩点替代最差点。如果 $w<rw则用收缩点s替代最差点w$, 否则用反射点替代最差点。</r
以鲸鱼算法为例,
因此, 反射操作能使最差点搜索所有可行解; 扩张操作能使最优值点向距最差点更远的反方向搜索。如果当前最优值点为极值点, 扩张操作能使该点跳出局部极小值处; 收缩操作则能使较差点收缩到更好的位置, 提高算法的搜索能力和寻优能力。
综上,单纯形法具有较高的价值,很多人也没见过听过,可以说很新颖,适合喜欢自己动手改进的,当然每种策略应用在各种算法上效果各有不同。
代码和参考文献都在里面,直接用即可。
在公众号:算法仓库。链接直接下面点击:阅读原文,或者后台发送:DCX,即可
。