問題タブ [coin-or-cbc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - PuLP - COIN-CBC エラー: 二重不等式と緩和で制約を追加するには?
この一連の制約を追加したい:
-M(1-X_(i,j,k,n) )≤S_(i,j,k,n)-ToD_(i,j,k,n)≤M(1-X_(i,j,k,n) ) ∀i,j,k,n
ここで、M は大きな数値、S は 0 ~ 1440 の値を取る整数変数です。ToD は、Excel シートから値を取得する 4 次元マトリックスです。X i 二重変数。値は 0 ~ 1 です。
私は次のようにコードに実装しようとします:
および次のような別の制約:
私の経験によると、コードでは、これら 2 つの制約は、私たちが望むものと完全に同等です。問題は、PuLP と CBC がそれらを受け入れないことです。次のエラーが発生します。
パルプ:
と CBC:
何が問題なのかわからないのですが、助けてもらえますか? 私はこれに不慣れです。情報が十分でない場合は、何を追加すればよいか教えてください。
c++ - C++ を使用したベクトル配列の .MPS ファイルへの変換
Coin-OR の線形計画法 (LP) ソフトウェアを使用して、一連の線形計画法を解こうとしています。各プログラムのほとんどのデータは、いくつかの .csv ファイルに含まれていますが、線形最適化を実行するたびに一部のデータを修正する必要があります。
Coin-OR の LP ソルバーに .MPS ファイルの読み取りを依頼することしかできないようで、AMPL などのプログラムを使用して .MPS ファイルを個別にビルドすることは可能です。しかし、一連の自動化された一連の最適化を繰り返し実行しようとしていることを考えると、AMPL または Gurobi を使用して 1 つの問題インスタンスを構築し、結果の .MPS ファイルでソルバーを呼び出すだけでは実行できません。問題が発生するたびに、おそらく何千回または何百万回もファイルを変更する必要があります。
ベクトル配列またはその他の標準 C++ データ構造を .MPS ファイルに変換できる C++ ライブラリがあるかどうか、誰か知っていますか? または、これらのデータ構造を Coin-OR の LP ソルバーの入力として指定する方法はありますか?
python - 冗長な制約がある実行不可能なソリューション - PuLP と COIN-OR
with を使用PuLP
して、Python で LP モデルを操作していCBC
ます。モデルには多くの制約があり、もちろんそれらの多くは冗長です。その例を示します。
この結果は次のとおりです。
もちろん、この例では両方の制約が明らかに冗長であり、私が解決する問題では、制約の魔女が冗長であることを確認するのが少し難しくなります。
問題がソルバー ( CBC
) にあるのかどうかわからないので、代わりに多分を使用CPLEX
して冗長な制約の問題を解決するか、問題がPuLP
あり、別のライブラリを使用する必要があります。または、問題をモデル化して冗長性を証明する必要があるかもしれません。
ガイダンスはありますか?ありがとう!
編集:私はオープンソルバー(Excelで)を使用して試してみましたCBC
が、PuLP
うまくいきました。PuLP
c++ - コインまたは線形計画法: ClpPlusMinusOneMatrix 表現
Coin-or Linear Programmingライブラリを使用しています。ClpPlusMinusOneMatrixを構築したい。そのコンストラクタは次のとおりです。
startPositive
とが何であるかは正確には明らかではありませんstartNegative
。ここで別のクラスについて説明したのと同じ概念である場合、マトリックスはどのように +1 値と -1 値を区別するのでしょうか?
たとえば、1x4 マトリックスを実装したい場合: [1 -1 1 -1]
. Clp は最後の 2 つの要素の値をどのように知るのでしょうか?
ありがとう
julia - JuMP における制約のシャドウ プライス (Julia)
次のLOPがあります。
私はcbcソルバーを使用しており、ジュリアを使用してこの問題を解決しています。ただし、制約のシャドウ プライスを取得したいと考えています。特に、制約、assemblyCondition、および testingCondition のシャドウ プライスを取得したいと考えています。
これを行うためのコード/関数を知っている人はいますか? getdual() を試しましたが、うまくいきませんでした。
mathematical-optimization - ILP ソルバーの下限の提案
私が試したソルバー (CPLEX、CBC) で解決するのに非常に時間がかかる整数線形計画法の問題があります。彼らはそれを完全に証明するのに永遠にかかります.
最小化問題の客観的な値の自明な下限を計算するのは簡単ですが、CPLEX の出力 (Best Bound 列) を見ると、長い間、その下限に近づいていないことがわかります。すぐに本当に良い解を見つけますが、最適な解がもっと優れている可能性があると誤って考えます。
これらのソルバーがどのように機能するかはよくわからないことを認めざるを得ませんが、信じられないほど楽観的なソリューションを探して、途方もなく弱い下限を改善しようとして時間を無駄にしているようです。だから私の質問は:
ソルバーに適切な目的の下限を伝えることで、より速く実行できるでしょうか?
もしそうなら、どのソルバーが追加入力として提供された既知の下限を受け入れることができますか?
例として、実行例からの CPLEX の出力の最初の数行を貼り付けます (目標のさらなる改善と最良の境界の非常に遅い改善なしで、はるかに長く続きます)。
ソルバーに、目的が 10 未満の解を探す必要がないように (より単純な方法でそれを証明できるため)、特に負の目的値を使用しないように (私のモデルでは不可能なため) 教えてくれたらいいのにと思います。
c++ - Coin-or-CBC ソルバーのパフォーマンス: コマンド ライン ユーティリティとコンパイル済みの C++ プログラム
私は CBC の C++ API を学んでいますが、MPS ファイルをロードして CbcModel クラスを使用して解決するコンパイル済み C++ プログラムのパフォーマンスを、CBC コマンド ライン ユーティリティを開いて同じものをインポートする場合と比較して一致させるのに問題があります。ファイルと使用solve
. コマンド ライン ユーティリティは 1 秒で MIP を解決し、C++ プログラムは 10 分以内に終了しません。
問題は、C++ API を使用しているときに、すべてのパラメーターを明示的に構成する必要があることです。cmd ライン ユーティリティで使用される既定のパラメーターは、平均的な MIP モデルに対してかなり適切に丸められているようです。
cmd ライン ユーティリティで使用され、パフォーマンスを一致させるために C++ プログラムで有効にする必要がある事前解決、ヒューリスティック、およびカットのデフォルト パラメータのリストはありますか。誰かがこれらのパラメーターをいじって、経験的に適切なパラメーターのセットを見つけたのかもしれません。
C++ プログラムは次のとおりです。
問題の MIP モデルは、 HEREからダウンロードできます。最適な目標値: -771.2957。
あらゆる種類の高度な機能がアクティブ化されていることを示す Cbc コマンド ライン ユーティリティ ログ (前処理、主要ヒューリスティック、強い分岐):