MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。Supportersはじめに先日、最適化技術の一つである線形計画法や二次計画法の紹介をしましたが、myenigma.hatenablog.commyenigma.hatenablog.com最適化の式が、そこで紹介した標準形と同じでないと最適化が実現できないという問題があります。上手く数式変換することで上記の標準形に変換することができます。今回はこの最適化モデリングツールの一つであり、Python製のCVXPYというツールの紹介をしたいと思います。CVXPYとは?CVXPYはPython製の最適化モデリングツールです。二次計画法などの標準形ではない形式の最適化問題を標準形に変換することなく、計算することができます。最適化計算が可能だということです。下記の資料を参照下さい。下記に各プラットフォームのインストール方法が記述されています。上記のようにAnacondaでインストールする必要がありました。CVXPYによる最小二乗法のサンプルコード下記のコードは最小二乗法をCVXPYで解くサンプルコードです。標準形ではない形式の最適化問題を解くことができます。最適化の結果を取得することができます。github.comシンプルな最適化問題を解いてみる(その2)下記の最適化問題を解いてみます。下記のコードで解くことができます。prob.value)github.comナップサック問題をCVXPYで解いてみる下記の記事を参照下さいmyenigma.hatenablog.comシンプルなモデル予測制御をCVXPYで解いてみる下記の記事を参照下さい。下記のマニュアルの翻訳です。既存のビルドイン関数と同じ名前の関数が多く設定されています。*とすると、関数がオーバライドされてしまうので注意が必要です。制約条件を追加しても大丈夫です。解けなかったかったり、コスト関数が無限方向に発散している場合、prob.statusが"infeasible"や"unbounded"になります。最適化変数は変更されません。推定精度が低い場合はそれぞれ下記のようなステータスが表示されます。“optimal_inaccurate”“unbounded_inaccurate”“infeasible_inaccurateまた、Solverが完全に最適化に失敗すると、SolverErrorという例外を投げます。この場合はソルバーを変更することを検討した方が良いようです。ちなみにcvxpyでは、それぞれのステータスを簡単に評価するためのエイリアスが設定されています。下記のように簡単に最適化が成功したかどうかを判断することができます。最適化用の変数はスカラーやベクトル、行列に対応しています。不等式制約は、==,<=,>=で指定することができます。x<=1とすると、xのすべての要素は0と1の間に設定されます。行列の不等式制約において,半定値(semi-definite)凸制約を追加したい場合は、こちらの資料を参照下さい。複数の等号、不等号を同時に設定することはできません。パラメータCVXPYでは、定数をパラメータとして設定することができます。最適化のパラメータを変更することができます。パラメータは変数のように、スカラー、ベクトル、行列で設定できます。パラメータには符号を設定することができます。documentation最適化問題に使うことができます。7))パラメータは下記のように初期化することができます。value=2)このパラメータを上手く使うことにより、パラメータを変更しただけの同一の最適化問題を並列処理することができます。簡単に実行することができます。gamma_vals)CVXPYにおける関数こちらの説明を元にまとめています。/の二項演算子は、関数として扱われます。-はアフィン関数として、*と/もCVXPYもアフィン関数として扱われます。a*bはどちらか一つがスカラーの時しか計算されず、a/bではbがスカラーの時のみ計算されるからです。インデクシングとスライシングすべてのスカラーでない項は、a[i,j]という形でインデックス指定することができます。このインデックス指定もアフィン関数です。ある項が列ベクトルの時、expr[i,0]でインデックス指定することもできますが、expr[i]でもできます。行ベクトルも同じように簡略化したインデックス指定ができます。Pythonの標準のスライシングも対応しています。r])加えてCVXPYでは、インデックスリストやブール配列によるデータ取得にも対応しています。詳しい方法は下記を参照下さい。Manual転置すべての項における転置はa.Tで取得できます。転置もアフィン関数です。power(a,p)で計算できます。べき乗はアフィン関数ではありません。スカラー関数スカラー関数は入力に対して、スカラー値を返す関数になります。cvxpyには様々なスカラー関数が準備されています。詳しいスカラー関数の説明は下記を参照下さい。min_entriesは各軸に対して実行することができます。func(a,axis=0))要素関数cvxpyでは各要素毎に計算を実施する関数も多数用意されています。詳しい要素関数の説明は下記を参照下さいhttp://www.cvxpy.org/en/latest/tutorial/functions/index.html#elementwise-functionsベクター/行列関数ベクターや行列を返す関数も多数用意されています。詳しい各関数の説明は下記を参照下さい。下記のように、.travis.ymlでAnacondaの最小設定であるminicondaをインストールして、condaコマンドでインストールすると良いです。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。