次の用語を見てください。
- 最小二乗法
- 線型計画法
- 二次計画法
- 二次錐計画問題
- 半正定値計画問題
- 混合整数二次計画法
確実に、私たちの脳を混乱させようとしてきていますよね。
でも、あなたがPythonを使えるならラッキーです。
CVXPYを使えば、脳を混乱させずに対応できます。
本記事の内容
- CVXPYとは?
- CVXPYのシステム要件
- CVXPYのインストール
- CVXPYの動作確認
それでは、上記に沿って解説していきます。
CVXPYとは?
CVXPYとは、Pythonに組み込まれた凸最適化問題のモデリング言語です。
モデリング言語というところが、ポイントです。
CVXPY単体では、凸最適化問題を解くことはできません。
そのため、ソルバーに依存しています。
このソルバーが、実際には凸最適化問題を解くことになります。
標準で利用可能なソルバーは、以下。
- ECOS
- OSQP
- SCS
これらのソルバーは、単体でも利用可能です。
なお、追加で他のソルバーをインストールすることもできます。
ここで疑問に思いませんか?
「CVXPYは必要なのか?」という疑問です。
はい、必要です。
ソルバー自体は、Python以外のC言語などで開発されています。
よって、そのままではPythonからソルバーを利用できません。
そこで、CVXPYの出番です。
CVXPYを利用して、Pythonとソルバーがやり取りをできるようになります。
簡単に言うと、CVXPYは通訳です。
さらには、各ソルバー毎に仕様が異なります。
しかし、CVXPYがその仕様の違いを吸収してくれています。
そのため、私たちはCVXPY用の仕様(言語)を覚えるだけで済みます。
これらのことから、CVXPYがモデリング言語だと言えるのでしょう。
以上、CVXPYについての説明でした。
次は、CVXPYのシステム要件を見ていきます。
CVXPYのシステム要件
現時点(2021年3月末)でのCVXPYの最新バージョンは、1.1.11となります。
この最新バージョンは、2021年3月5日にリリースされています。
比較的高い頻度でアップデートが、実施されていますね。
その点では、安心して利用できそうです。
サポートOSに関しては、以下を含むクロスプラットフォーム対応になります。
- Windows
- macOS
- Linux
システム要件として注意すべきポイントは、以下の2点。
- Pythonバージョン
- Microsoft C++ Build Tools(Windowsのみ)
それぞれを以下で説明します。
Pythonバージョン
Python 3.5以降のみが、サポート対象となります。
古いPythonは切り捨てるスタイルでいいと思います。
Pythonの公式開発サイクルに準じていれば、古いバージョンへの対応は不要です。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月 |
3.7 | 2018年6月27日 | 2023年6月 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
でも、いまだにPython 2系やPython 3.4以前に対応するライブラリが存在しています。
セキュリティやメンテナンスコストを考えたら、割り切った方がいいと思います。
あと、互換性を考慮する分だけ、パフォーマンスも落ちるでしょうね。
ちなみに、私は以下のバージョンで検証しています。
>python -V Python 3.9.1
Microsoft C++ Build Tools(Windowsのみ)
Windowsの場合、 Microsoft C++ Build Toolsのインストールが必要です。
この理由は、ソルバーがC言語で開発されているためです。
Microsoft C++ Build Toolsについては、以下の記事で詳しく説明しています。
インストール方法も解説しているので、参考にしてください。
まとめ
システム要件ではありませんが、Python仮想環境へのインストールが推奨されています。
ソルバーをインストールしたりして、結構ゴチャゴチャするからでしょうね。
以上、CVXPYのシステム要件の説明でした。
次は、CVXPYをインストールしていきます。
CVXPYのインストール
最初に、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.0.1 setuptools 54.2.0
次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip
では、CVXPYのインストールです。
CVXPYのインストールは、以下のコマンドとなります。
pip install cvxpy
インストールは、数分程度かかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ----------- cvxpy 1.1.11 ecos 2.0.7.post1 numpy 1.20.1 osqp 0.6.2.post0 pip 21.0.1 qdldl 0.1.5.post0 scipy 1.6.2 scs 2.1.2 setuptools 54.2.0
ソルバーに関するパッケージが、インストールされています。
以上、CVXPYのインストールの説明でした。
最後に、CVXPYの動作確認を行います。
CVXPYの動作確認
公式に載っているサンプルコードです。
import cvxpy as cp # Create two scalar optimization variables. x = cp.Variable() y = cp.Variable() # Create two constraints. constraints = [x + y == 1, x - y >= 1] # Form objective. obj = cp.Minimize((x - y)**2) # Form and solve problem. prob = cp.Problem(obj, constraints) prob.solve() # Returns the optimal value. print("status:", prob.status) print("optimal value", prob.value) print("optimal var", x.value, y.value)
上記を実行して、以下の結果が出れば動作確認はOKです。
status: optimal optimal value 1.0 optimal var 1.0 1.570086213240983e-22
プログラムの内容は、制約条件を満たす最適値(最小)を求めるモノです。
そして、その時のxとyの値を求めています。
上記サンプルは、暗算レベルで計算できます。
制約条件がもっと複雑になれば、CVXPYはその力を発揮するはずです。
以上、CVXPYの動作確認の説明でした。
本記事は、これにて終了です。
今後は、CVXPYを使って線形計画法の問題などを解いていこうと考えています。
また、その際は記事にする予定です。