GNU MathProgは、線形計画法(LP)、混合整数計画法(MIP)、およびその他の関連する最適化問題の作成と解決のために設計された高水準の数理モデリング言語です。これはAMPL(A Mathematical Programming Language)のサブセットであり、主にGNU Linear Programming Kit(GLPK)と組み合わせて使用されます。
GNU MathProgは、データ、決定変数、制約条件、目的関数を構造的に定義します。これにより、複雑な最適化問題を、解法アルゴリズムとは別に、人間が読みやすい形式で記述できます。この言語は、集合、パラメータ、変数、制約条件、目的関数をサポートし、外部データの読み込みやレポート生成のための機能も備えています。
MathProgはAMPLと構文的に類似しているため、より大規模または複雑な問題に対して商用ソルバーへの移行を容易にすると同時に、無料およびオープンソースのソフトウェアツールとの互換性も維持します。
MathProgモデルは通常.modファイル(場合によっては.mplファイル)で記述され、glpsolコマンドラインツール、デスクトップインターフェース、またはオンラインインターフェースを介してGLPKソルバーを使用して解かれます。一般的なコマンドラインの使用パターンは次のとおりです。
glpsol --math my-model.mod --data my-data.dat
MathProgは、教育目的、小規模な最適化、およびより堅牢な最適化環境に展開する前のモデルの迅速なプロトタイピングに特に適しています。
2つの製品(AとB)の利益を最大化したいと考えています。Aのパレット1つあたりの利益は80ポンド、Bのパレット1つあたりの利益は100ポンドです。両製品とも同じ資源(時間と材料)を使用します。Aのパレット1つを生産するには2時間、Bのパレット1つを生産するには4時間かかります。時間は1日あたり80時間に制限されています。Aのパレット1つを生産するには80kg の材料が必要です。同様に、 Bのパレット1つを生産するには60kgの材料が必要です。AとBに共通する材料は2400kgに制限されています 。利益を最大化するには、AとBをそれぞれ何パレット生産すればよいでしょうか?数学的な問題の定式化は次のとおりです。
MathProgの利点は、数学的な定式化に類似している点にある。
# 決定変数var x1 ; # 製品 A var x2 ; # 製品 Bポンドを最大化する: 80 * x1 + 100 * x2 ; # 目的# 制約条件時間: 2 * x1 + 4 * x2 < = 80 ;材料: 80 * x1 + 60 * x2 < = 2400 ;解決;# 出力コードprintf "1日あたりの最適な生産量は:\n" ; printf "製品Aの%.1fパレット\n" , x1 ; printf "製品Bの%.1fパレット\n" , x2 ; printf "これにより%.2fポンドの利益が得られます\n" , pounds ; end ;この例は、MathProg モデルと数式との類似性を示しています。出力コードセクションが含まれており、目的値や最適決定値などの重要な値をフォーマットして表示できます。たとえば、上記の出力コードは以下を生成します。
1日あたりの最適な生産量は以下のとおりです。 製品Aのパレット24.0個、 製品Bのパレット8個 これにより2720.00ポンドの利益が得られます。
GNU MathProg は、Andrew Makhorin によって GNU Linear Programming Kit (GLPK) の一部として開発されました。[ 1 ]これは、GLPK の C API を深く掘り下げることなく、宣言的なスタイルの最適化モデリングを好むユーザーのためのインターフェースとして機能します。