Pythonを使った最適化計算の方法を調べてみた

Pythonを使ってポートフォリオの最適化計算をしてみようと思いたちまして、複数資産から構成されるポートフォリオの期待リターンとボラティリティを算出するところまでできました。ここで最適化計算を行う必要性に迫られたので、ちょっと調べてみました。

自力で最適化計算のコードを書くのは大変そうだったので、Pythonで最適化計算をしてくれるライブラリやツールを探して、使えそうなものがあるか検討してみました。調べた結果をここにメモしておきます。

高性能な数理最適化ソルバー「Gurobi Optimizer」

書店で最適化問題に関する書籍をあさっていたら、「あたらしい数理最適化: Python言語とGurobiで解く」というそのものズバリの書籍を発見し、音速で購入しました。ポートフォリオ最適化問題にも一節をさいており、非常に参考になりそうです。

これまでは特殊なプログラミング言語やアルゴリズム等に精通している事が必要であった最適化問題(数理計画)の解決が、高性能な数理最適化ソルバー(Gurobi)と超高水準プログラミング言語(Python)を用いることで容易に可能となりつつある。本書は、具体例を用いて最適化の基礎理論を解説し、それに即した正確・高速なプログラムを示すことで、問題解決の手本を多数示す。最適化の手法を根本から変える、新しい時代の幕開けを告げる書である。
(出典:あたらしい数理最適化: Python言語とGurobiで解く)

調べたところ、このGurobiというソルバーは商用のソフトウェアとなっており、日本ではOctober Sky社が販売代理店になっています。商用ライセンスとアカデミックライセンス、また評価版のライセンスが提供されています。

最適化ツールとしては優れていそうですが、今回はちょっとした計算をするだけなので、できればお金を使いたくないところです。一応、評価版もあるようですが…。

Pythonで使えるその他の最適化計算ツール

インターネットで調べているうちに、「数理最適化とPython」というこれまたそのものズバリの資料をslideshareで発掘しました。

上記のスライドによると、Pythonで最適化計算をするためには、以下の方法やツールがあるようです(抜粋。全部見たい方は上記スライドを参照してください)。

  • Cooper(Common Optimization Python Repository)
    • COIN-OR(最適化関連ソフトウェアをオープンソースで提供することで学術研究の発展をはかるプロジェクト)のサブプロジェクト。
  • or-tools(Operation Research Tools developed at Google)
    • Googleのプロジェクト。
  • Gurobi
    • 既出。
  • OpenOpt(SciPy)
    • NumPy、SciPyベースのフリーのライブラリ。
  • escpy
    • 遺伝的アルゴリズム等の進化的計算パッケージ。

色々あって調べきれませんが、CooperOpenOptあたりが良さそうです。このあたりを使ってみたいと思います。

シェアしてもらえるとうれしいです。゚(´っωc`)゚。