python實現最優化演算法 負梯度法(最速下降法)

2021-10-13 03:02:02 字數 2183 閱讀 8287

啥也別說了,最優化太心酸了,可能是每個計算機專業人的噩夢(主要是數學渣)。直接上**。

# 向前查詢搜尋區間,接受線搜尋方向的導數f為唯一引數,返回搜尋區間左右端點left,right

deffind_interval

(f):

left =

0 step =

1 coefficient =

2 right = left + step

while f(right)

<0:

left = right

step = step*coefficient

right = left + step

return left, right

# 實現用二分法精確線搜尋,接受線搜尋方向的導數和搜尋區間左右端點為三個引數,返回

# 絕對值不超過10**-6的近似極小點mid

deffind_root

(f, left,right)

: limit =1e-

6 mid =

(left + right)/2

while

abs(f(mid)

)>= limit:

if f(mid)

<0:

left = mid

elif f(mid)

>=0:

right = mid

mid =

(left + right)/2

return mid

# 接收待優化函式的梯度g和初始值x(numpy陣列型別)為兩個引數,返回梯度向量長度

# (norm(g(x))不超過1e-5的近似極小值點(呼叫norm 函式計算向量長度,測試時

# 可以使用numpy庫中的linalg模組的norm函式實現)

defgrad_min

(g, x)

:import numpy

while numpy.linalg.norm(g(x)

)>1e-

5:d=

-g(x)

d=-g(x)

/numpy.linalg.norm(g(x)

)

h =lambda y:numpy.dot(g(x+y*d)

,d)# d搜尋方向,h為線搜尋方向的導數

x = x+find_root(h,find_interval(h)[0

], find_interval(h)[1

])*d return x

import numpy

from sympy import lambdify, symbols, matrix, matrixsymbol, diff

g = matrixsymbol(

'g',2,

2)b = matrixsymbol(

'b',2,

1)c = matrixsymbol(

'c',1,

1)ps =

[c, b,g]

xs = symbols(

'x1:3'

)x = matrix(xs)

quad =

(x.t*g*x/

2+b.t*x+c)[0

,0]expr=

lambda y:quad.subs(

[(p, matrix(y.pop())

)for p in ps]

).simplify(

)fexpr=expr([[

[21,4

],[4

,1]]

,[2,

3],[

10]])

gexpr=

[diff(fexpr,x)

for x in xs]

glambdify=

[lambdify(

[xs]

,f,"numpy"

)for f in gexpr]

g =lambda y:numpy.array(

[f(y)

for f in glambdify]

)# 計算梯度

x = numpy.array([1

,1])

grad_min(g,x)

# 執行結果 array([ 1.99999231, -10.9999606 ])

最優化演算法 模擬退火 Python實現

模擬退貨演算法可以分解為解空間 目標函式和初始解三部分 求乙個函式的最優解可以通過貪心演算法獲得其最優解,但有可能是區域性最有解,而不是全域性最優解。為了解決這一問題,產生了模擬退火演算法,該演算法是在搜尋的過程中加入了隨機的因素,以一定的概率接受比當前解要差的解,因此有可能會跳出這個區域性最優解,...

最優化演算法(一) 梯度下降法

梯度下降法的目標是 此時輸入 目標函式f x 梯度函式g x 精度e 輸出 f x 的極小點 1 取初始值 2 計算 3 計算梯度值更新,k k 1。注意 一般當目標函式為凸函式時,梯度下降法為全域性最優解,對於複雜函式並不一定。對於梯度下降有兩種實現方法 批量梯度下降 每次遍歷所有的樣本取最小化所...

《最優化導論》 8梯度方法

1.梯度迭代 a 0時,負梯度方向,是函式值下降方向 1.1梯度下降法 當接近極小值時,梯度接近0,通用形式如下,有一些具體實現 1 最速下降法 梯度下降的一種具體實現,理念是在每次迭代時,選擇最佳合適的步長ak,使得目標函式值最大程度的減少。流程 初始迭代點出發,沿負梯度方向開展前面說的一維搜尋,...