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]
制限領域がない場合は,
NMinimize
は最小値を求めようと試み,数値結果を返す:
実行
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
​​
上で定義した2つの領域のうちの最初の領域上で,
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]}]​​

凸最適化問題を解く

2つの陰的領域を制約条件を介して定義する:
実行
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]
点間の距離が最小となる点のペア(各領域から1つ)を求める:
実行
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

組込みの形状を使って三次元領域を手早く定義する:
実行
In[]:=

1
=Dodecahedron[{0,0,0},{0,0}];​​

2
=Ellipsoid[{4,0,0},DiagonalMatrix[{2,3,1}]];
これらの形状を可視化する:
実行
In[]:=
Graphics3D[{

1
,

2
}]
点間の距離が最小となる点のペア(各領域から1つ)を求める:
実行
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​​]​​

データを平滑化するために最適フィットを使う

最短ツアーを求める

記号最適化問題の厳密解を入手する

記号最適化問題のパラメトリック解を入手する