LPSolve - 定数係数を指定します
-
21-12-2019 - |
質問
LP 問題を解決するために LPSolve IDE を使用しています。約 10 ~ 20 セットの異なるパラメーターに対してモデルをテストし、それらを比較する必要があります。
一般的なモデルを保持しつつ、定数を希望どおりに指定する方法はありますか?たとえば、次のような制約があるとします。
A >= [c]*B
モデルがどのように動作するかをテストしたい [c] = 10
, [c] = 20
, 、 等々。今のところ、検索と置換を使用して別の .lp ファイルを準備しているだけですが、次のとおりです。
a) あまり効率的ではないようです
b) ある時点で、フォームの制約を考慮する必要がある A >= B/[c] // =(1/[c]*B)
. 。ただし、LPSolve は除算演算子を認識していないようです。指定しています 1/[c]
毎回直接行う唯一の選択肢は?
解決
lp_solve でどのような形式を使用するかは完全には明らかではありません。たとえば cplex lp 形式の場合、これより良い方法はありません。係数に除算 (さらに言えば乗算) を使用することはできません。また、別のファイルを「インクルード」したり、パラメーターに記号名を導入したりする機能もありません。これは非常に単純な言語なので、複雑なタスクには適していません。
あなたの問題にはいくつかの解決策があります。それは、迅速に実装できるもの、または「クリーン」で再利用可能で実行時間が短いものに興味があるかどうかによって異なります (もちろん、これは妥協です)。
別の言語から lp ファイルを生成することもできます。Python、bashなど。これは「手っ取り早い」解決策です。実行時は非常に遅いですが、おそらく実装は速くなります。
私が知っているすべての lp ソルバーと同様に、lp_solve にはいくつかのモデリング インターフェイスが付属しています。たとえば、 GNU mp フォーマット 現在のものの代わりに。乗算、除算、条件文などを認識します。(探しているものはすべて、セクション 3.1「数値式」を参照してください)
最後に、別のプログラミング言語 (例:C) これは最も柔軟なオプションですが、もう少し作業が必要になる場合があります。
を参照してください。 lp_solve ドキュメント サポートされている入力形式と API リファレンスの詳細については、を参照してください。