Wolfram 最佳化 | 值得嘗試的事情

透過點擊程式碼內部並按下
+
可以編輯並執行任何程式碼.
模型、求解和分析設計。Wolfram 最佳化提供了一套全面的工具來找到最佳設計或在特定限制條件下做出最佳決策,與高度自動化的機器學習、統計、可立即計算的內建資料等完全整合。

求局部或全域極限值

繪製具有全域和局部極限值的函數:
執行
In[]:=
Plot[
4
x
+
3
x
-5
2
x
,{x,-3,3}]
使用數值方法找出
x1
附近的局部最小值:
執行
In[]:=
FindMinimum[
4
x
+
3
x
-5
2
x
,{x,1}]
使用數值方法找出
x-1.8
附近的局部最小值:
執行
In[]:=
FindMinimum[
4
x
+
3
x
-5
2
x
,{x,-1.8}]
Minimize
找到精確的全域最小值,而
FindMinimum
則回傳搜尋時遇到的局部最小值:
執行
In[]:=
Minimize[
4
x
+
3
x
-5
2
x
,x]
也可以加入限制條件,在受限域中找最小值:
執行
In[]:=
Minimize[{
4
x
+
3
x
-5
2
x
,0<x<2},x]
如果需要數值結果,
NMinimize
可以使用與
Minimize
相同的語法。請注意受限域上的最小值對應於之前搜尋到的局部最小值:
執行
In[]:=
NMinimize[{
4
x
+
3
x
-5
2
x
,0<x<2},x]
沒有受限域,其目標是找出全域最小值並傳回數值結果:
執行
In[]:=
NMinimize[
4
x
+
3
x
-5
2
x
,x]
視覺化找到的全域和局部最小值:
執行
In[]:=
Plot
4
x
+
3
x
-5
2
x
,{x,-3,3},Epilog->
Epilog for global and local minima


在更高維度中尋找極值

相同的功能可以用於更高的維度。定義一個可以在三維中視覺化的目標函數和限制條件:
執行
In[]:=
objective=3Sin[
2
x
+
2
(y-1)
]-x-2y;​​constraints=Norm[{x,y}]>=1&&
4
x
+
4
y
<=10;
在受限區域上視覺化目標函數:
執行
regionandobjective=Show​​Plot3Dobjective,{x,-2,2},{y,-2,2},AxesLabel{x,y,z},
Options settings
,​​DiscretizeRegionImplicitRegion[constraints&&z-9,{{x,-2,2},{y,-2,2},z}],
Options settings
​​
求目標函數在
(0,1)
附近的局部最小值:
執行
In[]:=
{localmin3D,localminimizer3D}=FindMinimum[objective,{{x,0},{y,1}}]
求目標函數在限制區域內的全域最小值:
執行
In[]:=
{globalmin3D,globalminimizer3D}=NMinimize[{objective,constraints},{x,y}]
視覺化找到的全域最小值(紅色顯示)和局部最小值(藍色顯示):
執行
In[]:=
Show[​​regionandobjective,​​Graphics3D[{​​PointSize[Large],​​Blue,Point[{x,y,localmin3D}]/.localminimizer3D,​​Red,Point[{x,y,globalmin3D}]/.globalminimizer3D​​}]​​]

最小化受限的目標函數

根據限制、交叉點及內建形狀的方式定義區域:
執行
In[]:=
ℛ
1
=RegionIntersection
,ImplicitRegion[2x-y>=3,{x,y}];​​
ℛ
2
=RegionIntersection
,ImplicitRegion[2x-y<3,{x,y}];
在先前定義的區域上視覺化目標函數:
執行
In[]:=
Show​​Plot3D
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
,
Options settings
,​​Plot3D
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
2
,
Options settings
​​
使用
NMinimize
以數值方式找出上述兩個區域中第一個區域的目標函數最小值:
執行
In[]:=
NMinimize[
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
]
使用
Minimize
求找目標函數在關注區域內的精確最小值:
執行
In[]:=
{minvalue,minimizer}=Minimize[
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
]
顯示找到的受限最小值以及目標函數:
執行
In[]:=
Show​​Plot3D
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
,
Options settings
,​​Plot3D
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
2
,
Options settings
,​​Graphics3D[{Red,PointSize[Large],Point[{x,y,minvalue}/.minimizer]}]​​

解決凸最佳化問題

透過限制定義兩個隱含區域:
執行
In[]:=

1
=
2
x
+
2
y
<=1;​​

2
=
2
(x-2)
+
2
(y-1)
<=1;
將區域視覺化:
執行
In[]:=
RegionPlot[{

1
,

2
},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False]
找出使兩點間距離最小的一對點 (每個區域一個點):
執行
In[]:=
closest2D=ConvexOptimization[Norm[p1-p2],{},{p1∈ImplicitRegion[

1
,{x,y}],p2∈ImplicitRegion[

2
,{x,y}]}]
視覺化找到的一對點以及兩點間的距離:
執行
In[]:=
RegionPlot{

1
,

2
},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False,Epilog->
Epilog for points and line

使用內建形狀快速定義 3D 區域:
執行
In[]:=

1
=Dodecahedron[{0,0,0},{0,0}];​​

2
=Ellipsoid[{4,0,0},DiagonalMatrix[{2,3,1}]];
將形狀視覺化:
執行
In[]:=
Graphics3D[{

1
,

2
}]
找出使兩點間距離最小的一對點(每區域一個):
執行
In[]:=
closest3D=ConvexOptimization[Norm[p1-p2],{},{p1∈

1
,p2∈

2
}]
將找到的點用線連接起來進行視覺化:
執行
In[]:=
Graphics3D[{

1
,

2
,{Red,Thick,Line[{p1,p2}/.closest3D]}}]
求解並視覺化前一個範例的動態版本:
執行
In[]:=
Manipulate[​​shape1=Dodecahedron[{0,0,0},{theta,phi}];​​shape2=Ellipsoid[{4,0,0},DiagonalMatrix[{2,3,1}]];​​dynamic3D=ConvexOptimization[Norm[p1-p2],{},{p1∈shape1,p2∈shape2}];​​Graphics3D[{shape1,shape2,{Red,Thick,Line[{p1,p2}/.dynamic3D]}},PlotRange->{{-1.5,5.5},{-2,2},{-1.4,1.4}}​​],​​{{theta,0,"Rotation about Z"},0,2Pi},{{phi,0,"Rotation about Y"},0,2Pi},​​ControlPlacement->Top,SaveDefinitions->True​​]​​

使用最佳擬合來平滑資料

求找最短路線

獲取符號最佳化問題的精確解

獲取符號最佳化問題的參數解