2D函式最小值優化

2021-10-07 17:37:23 字數 2537 閱讀 2621

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import axes3d

import torch

defhimmelblau

(x):

return

(x[0]**

2+ x[1]

-11)**

2+(x[0

]+ x[1]

**2-7

)**2x = np.arange(-6

,6,0.1

)y = np.arange(-6

,6,0.1

)print

('x,y range:'

, x.shape, y.shape)

x,y = np.meshgrid(x,y)

print

('x,y maps:'

,x.shape,y.shape)

z = himmelblau(

[x,y]

)fig = plt.figure(

'himmelblau'

)ax = fig.gca(projection=

'3d'

)ax.plot_su***ce(x,y,z)

ax.view_init(60,

-30)ax.set_xlabel(

'x')

ax.set_ylabel(

'y')

plt.show(

)#分別用[0.,0.],[4.,0.],[-4.,0.]對x進行初始化

x = torch.tensor([0

.,0.

], requires_grad=

true

)optimizer = torch.optim.adam(

[x], lr=1e-

3)for step in

range

(20000):

pred = himmelblau(x)

optimizer.zero_grad(

)#將梯度手動清零,避免梯度累加

pred.backward(

)#反向傳播,計算當前的梯度值

optimizer.step(

)#根據梯度更新網路引數

if step %

2000==0

:print

('strp{}: x = {}, f(x) = {}'

.format

(step,x.tolist(

),pred.item())

)

x,y range: (120,)

(120,)

x,y maps: (120, 120)

(120, 120)

strp0: x =

[0.0009999999310821295, 0.0009999999310821295], f(x)

= 170.0

strp2000: x =

[2.3331806659698486, 1.9540692567825317], f(x)

= 13.730920791625977

strp4000: x =

[2.9820079803466797, 2.0270984172821045], f(x)

= 0.014858869835734367

strp6000: x =

[2.999983549118042, 2.0000221729278564], f(x)

= 1.1074007488787174e-08

strp8000: x =

[2.9999938011169434, 2.0000083446502686], f(x)

= 1.5572823031106964e-09

strp10000: x =

[2.999997854232788, 2.000002861022949], f(x)

= 1.8189894035458565e-10

strp12000: x =

[2.9999992847442627, 2.0000009536743164], f(x)

= 1.6370904631912708e-11

strp14000: x =

[2.999999761581421, 2.000000238418579], f(x)

= 1.8189894035458565e-12

strp16000: x =

[3.0, 2.0], f(x)

= 0.0

strp18000: x =

[3.0, 2.0], f(x)

= 0.0

可以看到初始值為(0,0)時函式的最小值的座標為(3,2)。

而不同的初始值得到的結果也是不同的,所以初始值不能隨意設定。

2D功能函式

一 2d功能函式 1 2d位移 transform translate x,y transform translatex x軸移動的距離 transform translatey y軸移動的距離 2 2d的縮放 transform scale x,y transform scalex transfo...

粒子群優化演算法求函式最小值

1.演算法簡介 粒子群演算法 簡稱pso 是一種有效的全域性尋優演算法,最早由美國的kennedy和eberhart於1995年提出。基於群體智慧型理論的優化演算法,通過個體之間的協作和資訊共享來尋找最優解,具有 自我 學習提高和向 他人 學習的優點,被廣泛應用於函式優化 資料探勘 神經網路訓練等領...

2d專案的記憶體優化

記憶體優化 一 設計優化 1 控制每個場景的資源使用量 2 控制大圖,特別是全屏圖的使用量。3 使用的資源要盡量的少。二 美術優化 1 出圖要按照2冪次方進行。2 盡量往小的出,用小圖拼成大圖的思想。3 資源盡可能的重複使用。4 使用png 不用jpg 三 程式優化 1 資源打包成 pvr.ccz格...