CVXPYのインストール【 Pythonによる数理最適化(凸最適化)】

CVXPYのインストール【 Pythonによる数理最適化(凸最適化)】 プログラミング

次の用語を見てください。

  • 最小二乗法
  • 線型計画法
  • 二次計画法
  • 二次錐計画問題
  • 半正定値計画問題
  • 混合整数二次計画法

確実に、私たちの脳を混乱させようとしてきていますよね。
でも、あなたが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.62016年12月23日2021年12月
3.72018年6月27日2023年6月
3.82019年10月14日2024年10月
3.92020年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を使って線形計画法の問題などを解いていこうと考えています。
また、その際は記事にする予定です。

タイトルとURLをコピーしました