このページは、nAGライブラリのJupyterノートブックExampleの日本語翻訳版です。オリジナルのノートブックはインタラクティブに操作することができます。
簡単なSOCP例
このデモンストレーションは、nAG Library for Pythonに同梱されている例のセットから取られています。コマンドシェルで以下のコマンドを実行すると、すべての例を表示できます。
python -m naginterfaces.library.examples --locate
nAGのhandle_solve_socp_ipm関数(e04ptとしても知られる)は、大規模な二次錐計画問題(SOCP)のためのnAG最適化モデリングスイートのソルバーです。これは内点法(IPM)に基づいています。
ここで、
- 二次錐:
- 回転二次錐:
このルーチンの完全な説明については、nAGライブラリマニュアルのe04ptcを参照してください。
この例は、handle_set_group関数のドキュメントから派生したもので、以下のSOCP問題を解きます:
minimize
from naginterfaces.base import utils
from naginterfaces.library import opt
# 問題のサイズ:
= 3
n
# 問題ハンドルを作成する:
= opt.handle_init(nvar=n)
handle
# 目的関数を設定する
=[10.0, 20.0, 1.0]) opt.handle_set_linobj(handle, cvec
以下の制約条件に従う
# 箱型制約を設定する
opt.handle_set_simplebounds(
handle,=[-2.0, -2.0, -1.e20],
bl=[2.0, 2.0, 1.e20]
bu )
一般線形制約
# 線形制約を設定する
= opt.handle_set_linconstr(
_
handle,=[-1.e20, 1.0],
bl=[1.5, 1.e20],
bu=[1, 1, 1, 2, 2, 2],
irowb=[1, 2, 3, 1, 2, 3],
icolb=[-0.1, -0.1, 1.0, -0.06, 1.0, 1.0]
b )
そして円錐制約
# 円錐制約を設定
= opt.handle_set_group(
_
handle,='Q',
gtype=[ 3,1, 2],
group=0
idgroup )
アルゴリズムのオプションをいくつか設定します
# アルゴリズムのオプションをいくつか設定します。
for option in [
'Print Options = NO',
'Print Level = 1'
]:
opt.handle_opt_set(handle, option)
# 省略された反復出力のために明示的なI/Oマネージャーを使用する:
= utils.FileObjManager(locus_in_output=False) iom
最後に、ソルバーを呼び出します
# SOCP内点法ソルバーを呼び出す
= opt.handle_solve_socp_ipm(handle, io_manager=iom) result
E04PT, Interior point method for SOCP problems
Status: converged, an optimal solution found
Final primal objective value -1.951817E+01
Final dual objective value -1.951817E+01
最適解は以下の通りです
result.x
array([-1.26819151, -0.4084294 , 1.3323379 ])
そして目的関数の値は
0] result.rinfo[
-19.51816515094211
最後に、ハンドルを破棄して後片付けをします
# ハンドルを破棄する:
opt.handle_free(handle)