MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。高速に実行できるように、C++などに最適化のコードを移植する必要があります。そこで、モデリングツールでありながら、モデリングした対象を実行するc言語ソフトを自動生成するCVXGENというツールを使ってみたのでその時の使い方をメモしておきたいと思います。高速で、コード量の小さいCコードを生成するWebツールです。数式から直接高速なソルバーを生成することを目的としています。ライブラリフリーのcソルバーを自動生成できるCVXGENが生成するCコードは、ライブラリに依存していないため、コンパイラでコンパイルすれば、すぐに利用することができます。ソルバーだけでなく、MATLABのmexファイルからソルバーを利用できるMATLAB関数のファイルも生成することができます。非常に高速なソルバーを生成できるCVXGENは凸最適化問題を解くための数式の変換やコードの最適化をコード生成時に自動で実施するため、オンラインでの計算の高速化を実現しています。実際の最適化の計算は数ミリ秒で終わることが多いです。小さな最適化問題の場合は10000倍速度が高速化されます。CVXGENの制約事項CVXGENは凸二次計画形式の問題しか解くことができません。比較的に小規模の問題しか解くことができません。制約条件とコスト関数のパラメータが約2000個以下の問題しか対応できないようです。CVXGENのライセンス残念ながら、CVXGENはオープンソースではなく、アカデミックライセンスと、商用ライセンスしかありません。学生の場合は、下記のHPからライセンス依頼を出すことで無料で利用できます。Optimization商用ライセンスの場合は、直接作者にコンタクトする必要があるそうですCVXGENの使い方CVXGENはCVXGEN特有のモデリング言語で問題を記述すると、その問題を解くソルバーコードを生成してくれます。Optimization下記に注意点をまとめておきます。コメントコメントはpythonと同じで、#から始まる行がコメントになります。下記の属性を付けることができます。計算が高速化されます。使い方のメモを書いておきます。./test_solverとすればソルバーが実行されます。任意のシステムでの最適化を実現できます。最適化が実施されます。下記の構造体はすべてsolver.hに定義されています。OptimizationZERO_LIBRARY_MODECVXGENはprintfとsqrtを使うために、stdio.hとmath.hをインクルードしていますが、solver.hのZERO_LIBRARY_MODEのdefineをONにすると、stdio.hとmath.hを利用しない状態で、コンパイルすることができます。処理結果などは表示されません。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。