問題タブ [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.
python - PuLPプログラミング出力
私は、線形計画法を含む特定の最適化プロジェクトで協力者と協力しています。問題を解決するために、Coin-OR 分岐切断ソルバーを使用します。Python ベースの PuLP パッケージを使用して .LP ファイルを作成します。協力者がどのように .LP ファイルを作成したかは完全にはわかりません (間違いなく Python を使用していません) が、本質的に、まったく同じ問題に対して .LP ファイルを生成する 2 つの異なるシステムがあります。つまり、目的関数、変数、制約がまったく同じです。 .
私は通常、Python 内で問題を解決します ( myProblm.solve()
) が、.LP ファイルを生成し、コマンド ラインから CBC ソルバーを呼び出してこのファイル (問題) を解決することもありました。次に、自分のシステム (Python またはコマンドライン) から取得した出力と、共同作業者が取得した出力を比較します。[私の側の問題の出力は、PuLP で解決してもコマンドラインで解決してもまったく同じであることに注意してください。]
目的関数の値は私たちの間でよく一致していますが、他の詳細は完全には一致していません。たとえば、このウィスカのブレンド問題を解く場合、材料の総コストはまったく同じになりますが、材料の比率は異なります。それはなぜでしょうか?
手動で .LP ファイルを比較したところ、いくつかの違いに気付きました。まず、制約と変数の順序が異なります。つまり、5 つの制約がある場合、私のファイルではそれらが としてリストされますC1,C2,C5,C4,C3
が、同じ制約は としてリストされC1,C2,C3,C4,C5
ます。また、私の Python コードはすべての数値を 10 の位に丸めますが、彼のシステムはそれらを 1 の位に丸めます。したがって、一部の変数の係数はわずかに異なる値になります。
これらの違いは、ソルバーの正確な出力に影響しますか?
また、拡張による次の質問は次のとおりです: 線形計画法の最適化問題を解くときに、まったく同じ出力を得るにはどうすればよいでしょうか? LP 問題の解決に影響を与える要因はどれですか? .LP ファイルの構造などの要因は影響しますか? 同じ LP ファイルをまったく同じ条件で別のコンピューターで実行すると、まったく同じ出力が得られますか?
c++ - 線形計画法: モジュロ制約
Coin-Or のリハーサルを使用して線形計画法を実装しています。
モジュロ制約が必要です。例:x
の倍数である必要があり3
ます。
の結果はx
6 になるはずです。しかし、z
は に設定され2.5
ていCellIntVar
ます。
z
整数であることを強制するにはどうすればよいですか?
c++ - コマンドラインツールを使用して COIN-OR Cbc でタイムアウトを設定するには?
コマンド ライン ツールを介してCOIN-OR Cbcを使用しcbc
ていますが、時間がかかりすぎる場合は一部の計算を中止する必要があります。
タイムアウトの期限が切れた後に cbc を強制終了するために、cbc の周りに制御プロセスを作成できることを認識しています。また、cbc を C++ ライブラリとして使用できることも認識しています。どちらも非常に面倒なようです。より単純で直接的な解決策を探しています。
cbc
これはコマンドラインツールから直接可能ですか?
そうでない場合、cbc を C++ ライブラリとして使用する簡単な方法はありますか? (ファイルの読み取り、*.lp
タイムアウトの適用、ファイルの作成*.soln
)
optimization - .lp ファイルのサイズや CBC/GLPK の変数の数に制限はありますか?
GLPK や CBC で MIP を解決しようとしています。.lp ファイルは 907 メガバイトで、約 500 万の変数がありますが、CBC でも実行されず、解決策が見つからないまま GLPK で 8 日間以上実行されています。また、GLPK に時間制限を設定すると、TIME LIMIT EXCEEDED と表示されます。SEARCH TERMINATED が終了し、CMD ウィンドウまたは python を使用して出力を取得できるかどうか疑問に思っていました。
python - PULP CBC マルチスレッドが COIN_CMD で機能しない
私は Python で PuLP を使用して最適化を行っています。データが非常に大きいため、問題が非常に大きいため、マルチスレッドを試すことにしました。
ただし、主な問題の小さなサブセット (100 万人ではなく 10k 人) を対象としたテストでは、マルチスレッドで実際に複数のスレッドを使用することはできません。
Coin-OR Web サイトで説明されているように、フラグを使用してソースからソルバーをビルドするための指示に従いました。すべてがうまく機能し、すべてのテストに合格しました。CBC 構成のログインを確認したところ、845 行にメッセージが表示されているため、確実に機能するようになっています。../configure --enable-cbc-parallel
build/Cbc/config.log
configure:30105: Cbc multithreading enabled
システム:
- Mac OS X 10.14.3
- i7-4870HQ クアッドコア
- Python 3.6.7 とアナコンダ
- 問題はJupyterとコマンドラインからのPythonインタープリターでの実行の両方で発生します
ここの例のようなコード:
マルチスレッド ソルバーを指定した場合も、デフォルトのソルバーを使用した場合も、その時間はほぼ同じでした。
実行時の CBC メッセージには、次の行がありました。
また、次の行:
これは、すべてのスレッドが作成されたが使用されていないことを意味しますか?
私が考えたが解決方法がわからない解決策の 1 つ: ソルバーへのパスが間違っている可能性があります。つまり、COIN_CMD ソルバーを別の場所に向けるべきではありませ.../cbc
ん。私はそれについて何も見つけていません。
それで、私は何を間違っていますか?スレッドの使用方法に関する他のドキュメントは見つかりませんでした。うまくいけば、これは簡単な解決策を持つばかげた質問です。ご協力いただきありがとうございます。