MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。既存のソルバーと呼ばれるライブラリを使うことが一般的です。Pythonでは以前紹介したcvxoptというソルバーが有名です。myenigma.hatenablog.comしかし、別の言語で最適化システムを実装したいときなど、このソルバーを使わずに凸最適問題を解きたい時もあります。等式制約条件のみの凸二次計画法(不等式制約は無し)の解法を数学的に導出し、それを元にPythonでソルバーを使わずに凸二次最適化を解くサンプルコードを作成したので紹介したいと思います。凸二次計画問題であるとします。x'Pxは>=0であるとします。上記の問題を解くために上記の問題をラグランジュの未定乗数法を使って下記の式に変換します。ラグランジュの未定乗数法に関しては下記を参照下さい。上記の式をそれぞれxとλで偏微分した値が0になります。下記のような行列式を作ることができます。上記の式を変形すると、となるので、xとλの最適値は下記の行列計算から計算できます。ここで、逆行列をとっている行列をKKT行列と呼ぶようです。下記のようなPythonコードで等式制約下の凸二次計画法を解くことができます。最適値のxベクトルを計算してくれます。0.0001上記のコードは下記でも公開しています。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。