最优化-直接方法
坐標輪換法
對于n維最優化問題
有初始點x1? ?沿著n個方向(坐標軸的方向)不斷做一維搜索? 得到xn+1
對于x1沿著 xn+1?- x1的方向做一維搜索得到 xn+2
xi+1 = xi +?α*di
當xin+1滿足某一終止準則時,停止算法,否則繼續迭代下去
?
正交程度和共軛程度
正交程度
對于兩個方向向量u1,u2
我們以這兩個方向向量單位向量的平行四邊形面積作為正交程度
對于二維向量?δ = (x1 * y2 - y1*x2)??δ = || u1?× u2||
對于n維向量其中的d需要是已經單位化的向量
δ = | det(d1,d2,d3,,,,,dn) |
det表示行列式的值
?
共軛程度
q = G1/2?* d
q的正交程度即為d關于G的共軛程度
?
正交程度和共軛程度都是越接近與1越好
?
Powell直接方法
對于n維函數f(x)?
取初始點x1和n個正交方向 di? 進行一維搜索
得到點列xi? ??xi+1?= xi?+?α*di
?
求出進行一維搜索時,函數值下降的最大的位置xm
f(xm) - f(xm+1)最大
記這個搜索方向為U
?
求解一維搜索問題
u = xn+1?- x1
xn+2?= x1 +?α*μ? 記步長為alaph
若 ||?xn+2?- x1 || <?ε 終止算法
若最后一次搜索的步長?alaph <(? (f(x1) - f(xn+2)) / u )?1/2
則用最后的搜索方向替換第m次的搜索方向
具體替換方式,用前移的方式去填充空格,然后將最后的方向放在末尾
?
單純形法
單純形法有幾個基本步驟
對于n維函數f(x),單純形有n+1個節點
記函數值最大的節點為xmax
函數值最小的節點為xmin
反射:
對于已有的一個單純形
找出單純形的節點中函數值最大的那一個(xmax,? f(xmax))
剩下的節點求均值得到重心u
xmax?+ xnew = 2*u
xnew即為反射之后的點,將xnew代替xmax即可得到反射之后的單純形
當然u也不是非要作為中點,xnew = u +?α*(u - xmax)
擴大:
得到反射點之后,若f(xnew)?< f(xmin)
則說明這個方向很有可能是下降方向,那就擴大看看
xnew2= u +?γ*(xnew - u) 一般來說γ = 2
其實就是將反射的方向擴大了一倍
若f(xnew2) < f(xnew)
那么用xnew2代替xnew就好
?
收縮:
考慮次大值f(x2nd)
若f(xnew) < f(x2nd)可以進行下一步
若f(xnew) >= f(x2nd) 那么下一步反射時會出現循環(因為f(xnew)仍是最大值,再反射的話會變成xmax)
這個時候就要用到收縮
找到xnew和xmax的最小值X’
xnew3?= u +?? * (X‘? - u)
若f(xnew3) < f(X')
然后用xnew3替換xnew
一般來說?? = 1//2
這就是一個取中點的操作嘛
否則進行縮邊
?
縮邊:
若f(xnew3) >= f(X')
那么就進行縮邊將每個點往xmax的方向移動
xi = xmax?+??*(xi - xmax)
?
當函數的離差平方和< e時終止算法
?
可以看到單純型法就是如下幾步
取初始點x0 步長alaph
獲取n個點 xi = x0 + ei?*alaph
?
先反射
若反射點的值 < 最小值則進行擴大,取擴大點和反射點的最小值來替換最大值----->結束
?
若反射點是反射之后單純形的最大值則進行收縮,就是取最大值和反射點的最小值,然后將其他點的均值和最小值作為端點,求他們的中點
若這個中點不是替換之后單純形的最大值? ----->結束
否則不對最大值進行替換,反而將單純形向最大值進行縮邊? ?----->結束
?
自己的一點理解:
整個算法就是盡量讓單純形向值變小的方向移動
先取試探最大值->均值方向是不是縮小方向
然后看均值往兩端的方向是不是縮小方向
若都不是,那么也就是說最大值點是一定程度上的最優點
就將所有點往最大值點移動
?
可以想象成一個多維空間中的超史萊姆,不斷地往最優點移動哈哈哈哈哈
?
轉載于:https://www.cnblogs.com/shensobaolibin/p/10201681.html
總結
- 上一篇: 我的2018年终总结
- 下一篇: 为sap的alv的最左侧添加【选中】按钮