下山单纯形法 matlab,智能优化 之 下山单纯形法 C++

单纯形法简介在其他网站上都可以查到,我就不多说了

我们主要说方法

它主要解决的是局部最优解的问题

利用多边形进行求解的,若有n个变量,则利用n+1边形

我们这里以两个变量为例,求解第三维度的最优解

例如解决

min  f(x,y)=x2 - 4*x + y2 - y - x*y

matlab 图

AAffA0nNPuCLAAAAAElFTkSuQmCC

可以看出,差不多是(3,2)附近取得最小

我们来用下山单纯形求解

我们设立三个初始点 (0,0),(1.2,0),(0,0.8)

我们把它们分别带入f中,函数值越小的越接近解,我们把它称为最好点,反之,函数值最大的点,我们称之为最坏点

我们要做的是,利用已知点,寻找更加接近解的点

我们需要了解几种寻找下一个点的思想

反射 reflect

AAffA0nNPuCLAAAAAElFTkSuQmCC

假设三角形的三个点是ABP,其中P是最坏点,那么我们寻找一个Q点,使得APBQ是一个平行四边形

设向量α为p->A,β为p->B    (假设1)

那么Q = p + (α+β),其中p和Q是坐标

扩张 extern

AAffA0nNPuCLAAAAAElFTkSuQmCC

假设,我们得到的新点Q,它比原来三角形中最好的点还要好,那么,我们可以假定这个探索方向是正确的,我们不妨再往前走一步!

其中Q->R = (p->R)/2,我们这里称扩张Q点

设向量α为Q->A, β为Q->B     (假设2)

于是,R =  Q - (α+β)/2

收缩 Shrink

我认为收缩有两种

因为我们一般先做反射点,所以,之后的操作如果针对反射点,那么就是对反射点进行收缩

AAffA0nNPuCLAAAAAElFTkSuQmCC

基于(假设2),R = Q + (α+β)/4

还有一种是最优解本来就在三角形PAB中,我们对P做收缩

AAffA0nNPuCLAAAAAElFTkSuQmCC

基于(假设1),则Q = P + (α+β)/4

压缩 compress

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们认为,如果上述操作均没有找到更好的点来替代最坏点,那么说明之前的三角形是非法的,那么我们进行压缩操作

即,取两边中点与最坏点构成新的三角形

我们用下山单纯形法求解步骤如下:

求出初始点的最坏点,构成三角形

重复下述,直到满足精度

先做一次反射

如果反射点比最好点还要好(更加接近条件:min f(x0,y0))->做一次扩张

如果扩张点比反射点还要好->扩张点代替之前的最坏点,形成新的三角形

反之->反射点代替之前的最坏点

反之,如果反射点比最坏点还要坏->反射点做收缩1

如果收缩点1比最坏点好->收缩点1代替最坏点

反之->最坏点做收缩2

如果收缩点2比最坏点好->收缩点2代替最坏点

反之->三角形做收缩

反之,反射点代替最坏点,形成新的三角形

C++代码:

triangle.h<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值