8.运筹学复刻 之 非线性规划算法


无约束问题

三类:

a.只知道 f(x):一维搜索法
b.f(x),▽f(x)已知:梯度法
c…f(x),▽f(x),▽2f(x)已知:牛顿法


a.只知道 f(x)

解法:一维搜索法

条件:f(x)是单峰函数(指定区间内仅有一个极点){分段}

1.算法阐述:
给定初始区间包含极值,随后在保证极值在区间内的条件下缩小区间,直至|a b|区间长度趋向0,则趋向x*(极值)

假设:max f(x) {在(a,b)内}
则性质:(a,x*)上升 (x*,b)下降

缩小区间:对区间内任意两点 x1<x2
比较 f(x1) 和 f(x2),新区间是老区间去掉小的那方的边缘部分

1.if: f(x1) < f(x2) ⇒ 新区间 [x1 , b ]
2.if: f(x1) > f(x2) ⇒ 新区间 [a , x2 ]
3.if: f(x1) = f(x2) ⇒ 新区间 [x1 , x2 ]

2.To get x1 & x2

方法一:二分法

含义:新的x1,x2选在老区间的中点左右各△/2处, △很小

x1(k)=(xR(k-1)+xL(k-1) - △)/2
x2(k)=(xR(k-1)+xL(k-1) + △)/2

设原区间长度 C
这样每次减去的区间长度 = | (C-△)/2 |
c0 =C
c1 = C/2 - △/2
c2 = c1/2 -△/2 = C/4 - △3/4
c3 = C/8 - △7/8

cn = C/2n-1 - △(1 - 1/2n-1)
limn->∞ = △

反思:
二分法虽然快速,但是每次都需要计算 f(x1) & f(x2) ,显然计算很复杂
而在刚才的迭代过程中,我们发现始终还有一个点在新区间中,我们不禁思考
如果我们想办法使得新的区间中的x1,x2是原来的某个点,以此来简化运算
从而得到下面的这个方法。

方法二:黄金分割法

我们现在推导黄金分割法的 点迭代式

令 C(k)= xR(k)-xl(k)

x1(k) = xR(k-1) - a C(k-1)
x2(k) = xL(K-1) +a C(k-1)

x1(k+1) = x2(k) - a C(k)
x2(k+1) = xL(K) +a C(k)


_________________________________________________________
XL         X1(k)                           X2(k)               XR

______________________________________________        
XL    X1(k+1)         X2(K+1)              X2(k)

所以这里我们认为 X1(k)= X2(k+1)

代入上式得:

xR(k-1) - a C(k-1) = xL(K) +a C(k)

化简,结合其他式子得:

a2 + a - 1 = 0

⇒ a = (√ 5 - 1 )/2

所以我们得到了黄金分割的迭代式:

C(k)= xR(k)-xl(k)
a = (√ 5 - 1 )/2 = 0.618

x1(k) = xR(k-1) - a C(k-1)
x2(k) = xL(K-1) +a C(k-1)
x1(k+1) = x2(k) - a C(k)
x2(k+1) = xL(K) +a C(k)

c1 = C
c2 = 0.618 C
c3 = 0.6182 C

cn = 0.618n C

limn->∞ = 0



b.知道 f(x),▽f(x)

解法:梯度法

算法阐述: X(k)是初始值,梯度方向▽f(x(k))找下一个点

r为步长
X(r) = X(k) + r ▽f(x(k)) : max
X(r) = X(k) - r ▽f(x(k)) : min

发布了108 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/k_x_k_baoqian/article/details/102673685