すべての人に良い一日を! 簡単な検索では、
cvxpyモジュールの言及を見つけることができなかったため、トレーニング資料を作成することにしました。
cvxpyは、最適化の問題を解決するために設計されています-特定の制限を持つ関数の最小/最大を見つけます。 このトピックに興味があるなら、猫をお願いします。
問題の一般的な声明
ここで、
xは独立変数(一般的な場合はベクトル)、
f(x)最適化される目的関数。
f(x)の定義のドメインの制限は、等式と不等式を使用して指定できます。
タスクの例
次の
線形計画問題を見てみましょう。
モジュールの不等式によって定義された領域を見ると、この領域は線形不等式を使用して簡単に定義できることがわかります。
この場合、制限は次のようになります。
cvxpyを使用して問題を解決する
モジュールのインストールについては
、モジュールのWebサイトで詳しく説明され
ています 。 テストの最適化の問題を解決できる簡単なコードを作成しましょう。
import numpy as np import cvxpy as cvx
現在のソリューションは完全ではなく、制限を超えていますが、最適なソリューションの隣にあることがわかります
(-9、3) 。
cvxpyでは、さまざまなソルバーを使用して問題を解決し、最適なソルバーを選択できます。
GLPKを試してみましょう:
prob.solve(solver = "GLPK") print(prob.status)
使用可能なソルバーのリストは、
installed_solvers()
関数によって返されます。
他の例
線形計画問題だけでなく解決することも可能です。 問題の最初の声明を見てみましょう。
最小二乗法の解決策を探すこともできます:
もちろん、いくつかのタスクには簡単な解決策があります。
A = np.array([[1, 1], [1, -1], [-1, 1]]) b = np.array([8, 2, 12]) c = np.array([7, -3])
また、解決策がない場合もあります。
A = np.array([[1, 1], [1, -1], [-1, 1], [-1, -1]]) b = np.array([-6, -12, -2, -8])
以上です。 詳細について
は、モジュールのWebサイトをご覧ください 。