IPOPTを使った最適化

IPOPT (Interior Point OPTimizer)は,数理最適化問題の局所解を求めるために設計された,大規模非線形最適化のためのソフトウェアパッケージである.

IPOPTLink Wolfram LibraryLink を使ってIPOPT関数にリンクする,Wolframシステムのアプリケーションである.IPOPTLinkIPOPTMinimizeParametricIPOPTMinimize等,さまざまな関数を提供する.これらの関数はパラメータを使って,または使わないで極小値を求めるのに使用できる.これらはWolfram言語のFindMinimum等の最適化関数で自動的に使用される.

IPOPTソルバでFindMinimumを使用する.

しかし,IPOPTLink の関数を直接呼び出して,IPOPTに実装された機能をより柔軟に使用することもできる.

IPOPTMinimizeIPOPTを使って極小値を計算する
IPOPTDataIPOPTMinimizeが返したデータ式
IPOPTMinValueIPOPTData式から目的関数の極小値を取得する
IPOPTArgMinIPOPTData式から極小値の位置を取得する
ParametricIPOPTMinimizeIPOPTを使ってパラメータを伴う極小値を計算する

IPOPTLink の基本的な関数

IPOPTはの約条件付きの数学的な 次元制最適化問題の解を求めるように設計されている.条件付き最適化問題は,目的関数と呼ばれる,複数の変数の実数値の関数 を制約条件の下で極小化する問題である.制約条件として,変数を制約する条件か,関数で定義される制約条件の2種類を指定することができる.変数を制約する条件は, (ただし x=(x1,,xn))という形である.関数の制約条件は,という形である.

IPOPTMinimizeは,制約条件の種類によって,次の3つの方法で使用できる:

IPOPTMinimize[f(x),x,x0]制約条件のない極小化
IPOPTMinimize[f(x),x,x0,xbounds]境界の制約条件付き極小化
IPOPTMinimize[f(x),x,x0,xbounds,g(x),gbounds]関数の制約条件と変数の境界による,制約条件付き極小化

IPOPTMinimizeの使用法

目的関数の極大化は,関数の負数を極小化することで行える.

制約条件なしの極小化

IPOPTMinimize[f,{x1,},{x1i0,}]制約条件のない極小化

制約条件なしの極小化IPOPTMinimize

IPOPTLink を使用するためには,パッケージをロードする必要がある.

IPOPTLink パッケージをロードする.

最初の例では,から始めて,の極小値を求める.

目的関数をプロットする.

IPOPTMinimizeを使ってIPOPTソルバを呼び出す.目的関数を ,引数変数を{},初期値を{}とする.

x=10から始めて, を極小化する.

IPOPTMinimizeIPOPTDataオブジェクトを返す.オブジェクトには極小値が含まれる.

IPOPTDataオブジェクトから目的関数の極小値を抽出する.

IPOPTDataオブジェクトは,極小値が見付かった座標点も含んでいる.

IPOPTDataオブジェクトから極小化点を抽出する.
目的関数を,求められた極小値の場所とともにプロットする.

境界の制約付き極小化

IPOPTMinimize[f,{x1,},{x1i0,},{{x1min,x1max},}]境界の制約付き極小化

境界制約条件付き極小化IPOPTMinimize

x が区間 に制限された の極小値を,から始めて求める.ここでもIPOPTMinimizeを使い,目的関数を ,引数変数を ,初期値を とする.変数の境界も指定する必要がある:

x が10と20の間の値であるときに,x=11から始めて を極小化する.

IPOPTMinimizeIPOPTDataオブジェクトを返す.オブジェクトには極小値と極小化点が含まれる.

IPOPTDataオブジェクトから目的関数の極小値とその位置を抽出する.
目的関数を,求められた極小値の場所とともにプロットする.

境界の制約条件は,関数の制約条件の特殊な場合である.

同じ問題を,制約関数を x として,関数の制約条件を使って表現する:
IPOPTDataオブジェクトから極小値とその位置を抽出する.

制約条件付き関数の極小化

IPOPTMinimize[f,{x1,},{x1i0,},{{x1min,x1max},},{g1,},{{g1min,g1max},}]関数の制約条件と変数の境界による,制約条件付き極小化

関数の制約条件と変数の境界による制約条件付き極小化IPOPTMinimize

を円上で極小化する.制約関数は であり,上下制約境界は1に等しい.

において,{x,y}={0,1}から始めて極小化する.
IPOPTDataオブジェクトから極小値と極小化点を抽出する.
解をプロットする:

ParametricIPOPTMinimize

ParametricIPOPTMinimizeは問題設定において任意の場所にパラメータが存在する極小化問題を設定する際に使用できる.最適化問題はその後,異なるパラメータ値で繰り返し解くことができる.ParametricIPOPTMinimizeIPOPTMinimizeの引数すべてに加え,最後にパラメータ変数引数{p1,}を取る.

ParametricIPOPTMinimize[f,{x1,},{x1i0,},{{x1min,x1max},},{g1,},{{g1min,g1max},},{p1,}]制約条件付きのパラメトリックな極小化

制約条件付きのパラメトリックな極小化ParametricIPOPTMinimize

r はパラメータ)上で極小化問題を設定する.

の下で,{x,y}={0,-r}から始めて極小化する.

このステップは関数の前処理とすべての必要な微分を行い,ParametricFunctionを返してパラメータ値を待機する.

実際の極小化はパラメータ値を与えた後に始まり,解はIPOPTData式に保存される.

与えられたパラメータ値 r=1について極小化する.
IPOPTData式から極小値と極小化点を抽出する.

異なるパラメータ値について,別の解を計算する.

円の半径 r の異なるパラメータ値について問題を解く.
上記のすべてのパラメータ値で極小化する.
すべてのIPOPTDataオブジェクトから極小値を抽出する.
使用したすべてのパラメータ値について極小値をプロットする.
Manipulateを使って異なるパラメータ値についての解を調べる.

複数のパラメータ値についてIPOPTMinimizeの代りにParametricIPOPTMinimizeを使うと,目的関数と制約関数の処理,および必要なすべての微分を繰り返すことによるオーバーヘッドを削減する.これは複雑さによっては大幅な削減となり得る.

IPOPTMinimizeParametricIPOPTMinimizeの処理を比較する.

IPOPTMinimizeを使った極大化

極大値は目的関数の負数を極小化することで求められる.

上での極大値を求める.

の場合に,{x,y}={1,0}から始めて,を極大化する.

再び-f の極小値の負数を取っての極大値を求める.

の極大値と極大化点を抽出する:

工学における例

カムの曲率と半径に制約条件があるとき,凸面カムが1回転する際に,弁の開口面積を最大化するカムを設計する.問題設定はCOPSテストスイートからのものであり,以下にまとめる.

カムの形状は角度6π/5においては半径 rmin の円周であり,設計変数 ri,i=1,,n は,角度2π/5に均等に配分された角度 θ におけるカムの半径を表す.残りの角度2π/5は,これと対象となる.

以下の制約条件を指定する.各半径 ri は区間{rmin, rmax}において制約される.また,A(ri-1,ri+1)A(ri-1,ri)+ A(ri,ri+1)で表される凸面の制約条件もある.ここでA(ri,rj)は原点とカム面の点 rirj で定義される三角形の面積である.さらにパラメータ α に依存する曲率についての条件-α (ri+1-ri)/θ α もある.

目的関数を定義するために,弁の開口面積と設計変数 ri には π rv 2(r1++rn)/n という単純な線形関係があると仮定する.ここで rv は弁の形状に関連する定数である.

これは,パラメータ rminrmaxα のパラメトリックな問題として設定することができる.設計変数には n=20 を選び,と仮定する.

パッケージをロードする.
変数,初期値,制約条件,目的関数を設定する.
パラメトリックな問題を設定する.
与えられたパラメータ値について解を求める.
カムの形状をプロットする.
パラメトリックな設定を使って,さまざまなパラメータ値で簡単に計算し直せるようにする.

参考文献

IPOPTは​Andreas Wächter氏,​Carl Laird氏他によってCOIN-OR Initiativeの一環として書かれたものである.これは以下の論文に基づいている.A. Wächter and L. T. Biegler, 「​On the Implementation of a Primal-Dual Interior Point Filter Line Search Algorithm for Large-Scale Nonlinear Programming」,Mathematical Programming 106(1),2006,pp. 25-57.