Wolfram 最適化 | 試してみよう
Wolfram 最適化 | 試してみよう
コードはどれも,コード内をクリックして編集してからを押せば,実行できます.
+
設計のモデル化,問題解決,分析 Wolframの最適化は,最適な設計を見付けたり制約条件内で最高の決定をしたりするためのツールの包括セットを提供します.これらのツールは高度に自動化された機械学習や統計の機能およびその場で計算可能な組込みデータ等と完璧に統合されています.
極大値・極小値あるいは最大値・最小値を求める
極大値・極小値あるいは最大値・最小値を求める
最大値・最小値と極大値・極小値の両方を持つ関数をプロットする: |
In[]:=
Plot[+-5,{x,-3,3}]
4
x
3
x
2
x
数値法を用いて x1 |
In[]:=
FindMinimum[+-5,{x,1}]
4
x
3
x
2
x
次に,数値法を用いて x-1.8 |
In[]:=
FindMinimum[+-5,{x,-1.8}]
4
x
3
x
2
x
In[]:=
Minimize[+-5,x]
4
x
3
x
2
x
制限された領域内の最小値を見付けるために制約を含めることもできる: |
In[]:=
Minimize[{+-5,0<x<2},x]
4
x
3
x
2
x
数値による結果が望ましい場合, |
In[]:=
NMinimize[{+-5,0<x<2},x]
4
x
3
x
2
x
制限領域がない場合は, |
In[]:=
NMinimize[+-5,x]
4
x
3
x
2
x
求まった最小値と極小値を可視化する: |
In[]:=
Plot+-5,{x,-3,3},Epilog->
4
x
3
x
2
x
高次元の極値を求める
高次元の極値を求める
同じ機能を高次元で使うことができる.三次元で可視化可能な目的関数と制約条件を定義する: |
In[]:=
objective=3Sin[+]-x-2y;constraints=Norm[{x,y}]>=1&&+<=10;
2
x
2
(y-1)
4
x
4
y
制約領域上で目的関数を可視化する: |
regionandobjective=ShowPlot3Dobjective,{x,-2,2},{y,-2,2},AxesLabel{x,y,z},,DiscretizeRegionImplicitRegion[constraints&&z-9,{{x,-2,2},{y,-2,2},z}],
(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
,ImplicitRegion[2x-y>=3,{x,y}];
ℛ
2
,ImplicitRegion[2x-y<3,{x,y}];
上で定義した領域上で目的関数を可視化する: |
In[]:=
ShowPlot3D+,{x,y}∈,,Plot3D+,{x,y}∈,
3
(x+1)
2
(y-1)
ℛ
1
3
(x+1)
2
(y-1)
ℛ
2
上で定義した2つの領域のうちの最初の領域上で, |
In[]:=
NMinimize[+,{x,y}∈]
3
(x+1)
2
(y-1)
ℛ
1
関心領域上で |
In[]:=
{minvalue,minimizer}=Minimize[+,{x,y}∈]
3
(x+1)
2
(y-1)
ℛ
1
求まった条件付きの最小値を目的関数とともに示す: |
In[]:=
ShowPlot3D+,{x,y}∈,,Plot3D+,{x,y}∈,,Graphics3D[{Red,PointSize[Large],Point[{x,y,minvalue}/.minimizer]}]
3
(x+1)
2
(y-1)
ℛ
1
3
(x+1)
2
(y-1)
ℛ
2
凸最適化問題を解く
凸最適化問題を解く
2つの陰的領域を制約条件を介して定義する: |
In[]:=
1
2
x
2
y
2
2
(x-2)
2
(y-1)
これらの領域を可視化する: |
In[]:=
RegionPlot[{,},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False]
1
2
点間の距離が最小となる点のペア(各領域から1つ)を求める: |
In[]:=
closest2D=ConvexOptimization[Norm[p1-p2],{},{p1∈ImplicitRegion[,{x,y}],p2∈ImplicitRegion[,{x,y}]}]
1
2
求まった点のペアとその間の距離を可視化する: |
In[]:=
RegionPlot{,},{x,-1,3},{y,-1,3},PlotTheme->"Minimal",Axes->False,Epilog->
1
2
組込みの形状を使って三次元領域を手早く定義する: |
In[]:=
1
2
これらの形状を可視化する: |
In[]:=
Graphics3D[{,}]
1
2
点間の距離が最小となる点のペア(各領域から1つ)を求める: |
In[]:=
closest3D=ConvexOptimization[Norm[p1-p2],{},{p1∈,p2∈}]
1
2
求まった点を両者を繋ぐ線とともに可視化する: |
In[]:=
Graphics3D[{,,{Red,Thick,Line[{p1,p2}/.closest3D]}}]
1
2
先ほどの例の動的バージョンを解いて可視化する: |
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]
データを平滑化するために最適フィットを使う
データを平滑化するために最適フィットを使う
最短ツアーを求める
最短ツアーを求める
記号最適化問題の厳密解を入手する
記号最適化問題の厳密解を入手する
記号最適化問題のパラメトリック解を入手する
記号最適化問題のパラメトリック解を入手する