0. 目錄
1. 老駱提醒
2. 問題描述
Minimize Objective Function
f(x,y):
f(x,y)=(x2+y2)10−cos(x)cos(y)
Subject to the Constraint Equation
g(x,y):
g(x,y)=(x2+y2)≥1.5
Design Variables (Side Constraints)
:
−2≤x≤2−2≤y≤4
Initial Conditions
:
x=2y=2
3. Python Scipy
以下程式碼主要參考 Scipy 的教學文檔設置。
這裡老駱選擇minimize
中的 trust-constr
方法,因為這個方法不用提供額外的jacobian
和hessian
函數即可求解,並且在option
裡附有verbose
選項,可以將其設為2
,方便觀察求解過程。為了符合Scipy
的格式,下方程式中的x[0]
為問題中的x
,而x[1]
則為問題中的y
。
from math import cos
import numpy as np
from scipy.optimize import minimize, Bounds, NonlinearConstraint
def prob(x):
return (x[0]**2 + x[1]**2)/10 - cos(x[0]) * cos(x[1])
def cons_f(x):
return x[0]**2 + x[1]**2
nonlinear_constraint = NonlinearConstraint(cons_f, lb=1.5, ub=np.inf)
bounds = Bounds([-2, -2], [2, 4])
x0 = np.array([2, 2])
resp = minimize(fun=prob, x0=x0, method='trust-constr',
bounds=bounds, constraints=[nonlinear_constraint],
options={'verbose':2})
print(resp)
()內為PythonEquation 被呼叫次數 |
x |
y |
f |
g |
Opt Using PythonEquation(48) |
0.86087 |
0.87115 |
-0.26971 |
1.50000 |
Opt Using DOE(9) |
2.00000 |
0.29777 |
-0.07096 |
4.08891 |
Opt Using DOE(Verified by PythonEquation)(40) |
2.00000 |
0.29777 |
-0.07096 |
4.08891 |
RSA Using DOE(33) |
0.86787 |
0.86306 |
-0.26985 |
1.49966 |
Opt Using localPython(48) |
0.86087 |
0.87115 |
-0.26971 |
1.50001 |
Python Scipy(0) |
-0.86603 |
0.86603 |
-0.26972 |
1.50000 |
可以看出Scipy
與VisualDOC
答案相當接近。
雖然Scipy
求解出來的x
為-0.86603
,但觀察此問題的f
及g
,若將x
以0.86603
代入,並不會影響其值,因
f
及g
的平方項 : x2=(−x)2。
f
及g
的三角函數 : cos(x)=cos(−x)。
最後要特別提醒的是,不同的問題各有其適合求解的算法及搭配的參數。改變求解算法及調整其所使用的參數,都可能會得到不同的答案。甚至,有時候這些答案之間,也存在一段不小的差距。此時,就是考驗使用者對問題了解的程度,從中挑出最適合的算法及參數。
4. 聯絡老駱
如果您或貴單位:
- 有導入
VR&D
產品的意願,但是有報價、採購及發票等問題。
- 有教育訓練或顧問需求。
- 有些建言指教。
- 想交個朋友。
歡迎透過 camel@caeml.ai 聯絡老駱。
0. 目錄
1. 老駱提醒
Python
Scipy
進行函數最小化求解。2. 問題描述
Minimize Objective Function
Subject to the Constraint Equation
Design Variables (Side Constraints)
:Initial Conditions
:3. Python Scipy
以下程式碼主要參考 Scipy 的教學文檔設置。
這裡老駱選擇
minimize
中的trust-constr
方法,因為這個方法不用提供額外的jacobian
和hessian
函數即可求解,並且在option
裡附有verbose
選項,可以將其設為2
,方便觀察求解過程。為了符合Scipy
的格式,下方程式中的x[0]
為問題中的x
,而x[1]
則為問題中的y
。PythonEquation
被呼叫次數x
y
f
g
Opt Using PythonEquation(48)
Opt Using DOE(9)
Opt Using DOE(Verified by PythonEquation)(40)
RSA Using DOE(33)
Opt Using localPython(48)
Python Scipy(0)
可以看出
Scipy
與VisualDOC
答案相當接近。雖然
Scipy
求解出來的x
為-0.86603
,但觀察此問題的f
及g
,若將x
以0.86603
代入,並不會影響其值,因f
及g
的平方項 :f
及g
的三角函數 :最後要特別提醒的是,不同的問題各有其適合求解的算法及搭配的參數。改變求解算法及調整其所使用的參數,都可能會得到不同的答案。甚至,有時候這些答案之間,也存在一段不小的差距。此時,就是考驗使用者對問題了解的程度,從中挑出最適合的算法及參數。
4. 聯絡老駱
如果您或貴單位:
VR&D
產品的意願,但是有報價、採購及發票等問題。歡迎透過 camel@caeml.ai 聯絡老駱。