Wolfram 优化 | 应用示例

在代码中点击并按下
+
,即可编辑并运行任何代码。
建模,求解与分析设计。Wolfram 优化提供了一整套综合解决方案,用于在给定约束条件下找到最佳设计方案或做出最优决策,并与高度自动化的机器学习、统计学、即时可计算的内置数据等功能完全集成。

寻找局部极值或全局极值

绘制一个既有全局极值又有局部极值的函数:
Run
In[]:=
Plot[
4
x
+
3
x
-5
2
x
,{x,-3,3}]
使用数值方法在
x1
附近搜索局部最小值:
Run
In[]:=
FindMinimum[
4
x
+
3
x
-5
2
x
,{x,1}]
现在使用数值方法在
x-1.8
附近搜索局部最小值:
Run
In[]:=
FindMinimum[
4
x
+
3
x
-5
2
x
,{x,-1.8}]
Minimize
找到精确的全局最小值,而
FindMinimum
则返回搜索过程中遇到的局部最小值:
Run
In[]:=
Minimize[
4
x
+
3
x
-5
2
x
,x]
还可以添加约束条件,以在受限域中查找最小值:
Run
In[]:=
Minimize[{
4
x
+
3
x
-5
2
x
,0<x<2},x]
如果需要数值结果,
NMinimize
可以使用与
Minimize
相同的语法。注意,限定区域内的最小值与之前搜索到的局部最小值相对应:
Run
In[]:=
NMinimize[{
4
x
+
3
x
-5
2
x
,0<x<2},x]
如果没有受限域,该函数会寻找全局最小值并返回数值结果:
Run
In[]:=
NMinimize[
4
x
+
3
x
-5
2
x
,x]
可视化找到的全局最小值和局部最小值:
Run
In[]:=
Plot
4
x
+
3
x
-5
2
x
,{x,-3,3},Epilog->
Epilog for global and local minima


高维空间极值求解

同样的方法也适用于更高维度的情况。定义一个可以在三维空间中可视化的目标函数和约束条件:
Run
In[]:=
objective=3Sin[
2
x
+
2
(y-1)
]-x-2y;​​constraints=Norm[{x,y}]>=1&&
4
x
+
4
y
<=10;
在约束区域上可视化目标函数:
Run
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)
附近的局部最小值:
Run
In[]:=
{localmin3D,localminimizer3D}=FindMinimum[objective,{{x,0},{y,1}}]
找到目标函数在约束区域中的全局最小值:
Run
In[]:=
{globalmin3D,globalminimizer3D}=NMinimize[{objective,constraints},{x,y}]
可视化找到的全局最小值(显示为红色)和局部最小值(显示为蓝色):
Run
In[]:=
Show[​​regionandobjective,​​Graphics3D[{​​PointSize[Large],​​Blue,Point[{x,y,localmin3D}]/.localminimizer3D,​​Red,Point[{x,y,globalmin3D}]/.globalminimizer3D​​}]​​]

约束条件下最小化目标函数

通过约束条件、交集和内置图形来定义区域:
Run
In[]:=
ℛ
1
=RegionIntersection
,ImplicitRegion[2x-y>=3,{x,y}];​​
ℛ
2
=RegionIntersection
,ImplicitRegion[2x-y<3,{x,y}];
在先前定义的区域上可视化目标函数:
Run
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
在上述两个区域中的第一个区域内以数值方式找到目标函数的最小值:
Run
In[]:=
NMinimize[
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
]
使用
Minimize
找到目标函数在目标区域内的精确最小值:
Run
In[]:=
{minvalue,minimizer}=Minimize[
3
(x+1)
+
2
(y-1)
,{x,y}∈
ℛ
1
]
显示找到的约束最小值以及目标函数:
Run
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]}]​​

求解凸优化问题

通过约束定义两个隐式区域:
Run
In[]:=

1
=
2
x
+
2
y
<=1;​​

2
=
2
(x-2)
+
2
(y-1)
<=1;
可视化这些区域:
Run
In[]:=
RegionPlot[{

1
,

2
},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False]
找出两个区域间距离最近的点对(每个区域各取一点):
Run
In[]:=
closest2D=ConvexOptimization[Norm[p1-p2],{},{p1∈ImplicitRegion[

1
,{x,y}],p2∈ImplicitRegion[

2
,{x,y}]}]
可视化找到的点对及其间距:
Run
In[]:=
RegionPlot{

1
,

2
},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False,Epilog->
Epilog for points and line

使用内置形状快速定义三维区域:
Run
In[]:=

1
=Dodecahedron[{0,0,0},{0,0}];​​

2
=Ellipsoid[{4,0,0},DiagonalMatrix[{2,3,1}]];
可视化这些形状:
Run
In[]:=
Graphics3D[{

1
,

2
}]
找出两个区域间距离最近的点对(每个区域各取一点):
Run
In[]:=
closest3D=ConvexOptimization[Norm[p1-p2],{},{p1∈

1
,p2∈

2
}]
用连接线可视化找到的点:
Run
In[]:=
Graphics3D[{

1
,

2
,{Red,Thick,Line[{p1,p2}/.closest3D]}}]
求解并可视化前一个示例的动态版本:
Run
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​​]​​

使用最优拟合平滑数据

最短路径问题

符号优化问题的精确求解

符号优化问题的参数化求解