問題タブ [cplex]
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.
c++ - 現在のノードのノード深度を取得する
作業中のモデルにいくつかのカットを追加するユーザー カット コールバックを作成しました。これは完全に正常に機能します。検索ツリーの最上位ノードにのみ、これらのカットを追加したいと考えています。問題は、現在のノードの深さを取得する方法がわからないことです。呼び出されるたびに整数変数をインクリメントするノード コールバックを作成しました。これは、この整数が特定の数値を超えると、cut コールバックで何もできないことを意味します。しかし、cplexにfxがある場合、私は今はしません。左の枝にのみノードを作成しました。つまり、右の枝のノードにカットを追加したり、その逆を行ったりすることはありません。
ノード コールバックのドキュメントを参照して
ください http://pic.dhe.ibm.com/infocenter/cosinfoc/v12r4/index.jsp?opic=%2Filog.odms.cplex.help%2Frefpythoncplex%2Fhtml%2Fcplex.callbacks.NodeCallback- class.html
ノード識別子を引数として取る getDepth() メソッドがあることがわかります。しかし、この識別子を取得する方法は、私にはわかりません。
algorithm - 最適化ですべての可能な準最適 (最適ではない!!!) ソリューションを見つける
コマンド ライン引数として r と n を取る行列を生成する CPLEX 最適化コードを作成していますが、現時点では 2 と 4 を想定している可能性があります。
行列を生成するための条件は、任意の行または任意の列の要素の合計が 10 に等しく、要素が 0 ~ 10 の整数であることです (つまり、二重確率行列)。
この条件を制約に変えて行列を生成しましたが、10 と 0 の行列しか得られません。
CPLEXは常に「最適な」解決策を見つけるからだと思いますが、解決したい問題については、これはあまり役に立ちません。
残りは 6、7、8、9、10、0 ~ 5 の行列が必要です。
そのような条件 (および後で追加される条件) を満たすすべての可能な行列を生成して、それらすべてをテストし、ケースを使い果たすことができるようにしたいと考えています。
どうやってやるの?
このソリューション プールのことを調べていますが、簡単ではありません..
また、
cplex.out() << "解の数 = " << cplex.getSolnPoolNsolns() << endl;
これにより 1... が得られます。これは、解が 1 つしかないことを意味しますが、これらの行列が何百万もあることがわかっています。
すべての「最適ではない」行列を生成する方法があれば、助けてください。
ありがとうございました。
コードを IPGenMat.cpp に添付すると、aa.sol が解決策になりました。
こちらも下にコピペしました。
(要するに、2 つの質問: 1. どうすれば「あまり最適でない」ソリューションを見つけることができますか? 2. どうすればそのようなソリューションをすべて見つけることができますか?)
matlab - CPLEX の主な実行不可能性
CPLEX API を使用して MATLAB で CPLEX (バージョン 125) を実行しています。制約付き二次計画法の問題を解決しようとしていますが、主な実行不可能性に直面しています。特に、問題の MATLAB コードは次のとおりです。
これは問題に対応します:
ただし、ystar
によって返されるソリューションcplexqcp
は次のようになります。
この実現不可能なギャップを減らしたい。主な実現可能性の境界を変更しようとしましたが、効果がないようです:
実行不可能性を平準化するようにソルバーを構成するにはどうすればよいですか? ソルバーは次の診断メッセージを表示します。
したがって、解決策の主な実行不可能性は次のように思われ2.19e-08
ます。ただし、解決策はそれほど実現可能ではないようです。
更新:次のように、等式と不等式の制約を正規化しました。
(注: の要素phi
はゼロまたはほぼゼロではありません。このようにして、 のすべての要素はまたは のphi
いずれ1
かになります-1
。)
私が今得ている実行不可能性は、 (更新された正規化された行列とに対して)5.577e-07
として計算されます。CPLEX は内点ソルバーを使用していますか? はいの場合、実行不可能性はないはずです。max(F*ystar-phi)
F
phi
更新 2:この問題のデータとテスト ケースをアップロードしました。
visual-studio-2012 - x64コンパイラを構成するVisual Studio 2012の問題
Visual Studio 2012でCPLEXを使用しようとしていますが、VS を構成して 64 ビット アプリケーションをコンパイルする必要があります。dreampark.com からソフトウェア全体をダウンロードしたので、コンパイラがインストールされていることはほぼ確実です。ただし、 Microsoft の段階的な指示に従おうとすると、ドロップダウン リストに 64 ビット プラットフォームのオプションがないため、手順 5 より先に進むことができません。
x64 を作成して他の指示に従おうとしましたが、ビルド中にエラーが発生します。ログを見ると、VS 2010 と VS 2012 のコンフリクトかもしれませんが、VS12 をインストールする前に VS2010 を削除してしまいました (何か忘れていたのでしょうか? 環境変数を消去し、ソフトウェアをアンインストールしました)。とにかく、ここにログがあります:
c#-4.0 - CPLEX エラー 1016: 制限付きバージョン
Cplex モデルをロードして線形システムを解決する C# を使用してアプリを開発しました (または、綴りが正しければプログラムします)。私が得る問題は、タイトルでモーションされたエラーです。しかし、Opl studio 9.0 のモデルを使用して問題を解決しようとすると、問題なく動作します。バージョンが限定されているのか、C#に問題があるのかはわかりません。私が助けてくれる人がいるなら、私はそれを感謝します. 手動で (コードで) 埋めずに C# から Cplex モデルをロードする方法はありますか?
python - Python 2.7 で cplex 12.5 モジュールをインポートすると、Unicode エラーが発生する
RHEL6.3 マシン (x86 64 ビット) に CPLEX 12.5 をインストールしましたが、正常に動作しているようです。ただし、Python APIを使用しようとすると、次のエラーが発生します。
私が間違っているかもしれないことについての指針はありますか?
optimization - AMPL での操作の順序
モデル ファイルに次の問題があります。CPLEX ソルバーが最初に括弧内のアクションを実行してから乗算したいと考えています。通常の数学と同様に....しかし、この制約でモデルファイルを実行すると:
ここで、E、K、O はセットです。delta、f はバイナリ変数です。そして残りはパラメータです。この括弧で前に説明した問題があります: "(1-f[l,o])"。サンプル データ ファイルを解決しようとすると、次のバグが発生します。
ここでは、最初の CPLEX ソルバーがブラケットの要素を b[l,e] で乗算し、それらを追加しようとしていることがわかります。私の質問は次のとおりです。この状況を回避するにはどうすればよいですか?
java - Java プログラムによる CPLEX の開始
値を変更して何度も解決する必要がある線形の問題があります。だから私は正常に動作するILOG CPLEX OPLでプログラムを書きました。今、これらのプログラムを Java プログラムで開始したいと考えています。最初の Run Java の後、出力を処理して変更する必要があります。その後、別の Cplex ソルビングが開始されます。
Cplex Optimization Studio を起動し、解決を開始し、Excel でデータを変更し、Cplex Studio を再度起動する Windows スクリプトを試しましたが、このソリューションはうまく機能しません。私の問題は、Ilog Cplex OPL に記述したコードを Java に変更したくないということです。Java で Solving を開始したいだけです。
java - 同時 CPLEX プロセスは、単一プロセスよりもはるかに遅い
シングルスレッド CPLEX と Java (Linux 下) を使用して、線形プログラム (LP) をモデル化し、解決しています。私の目的は、並列スレッドで複数の小さな LP を解決することです。理想的には、各コアが 1 つの LP を個別に解決します。
問題は、2 つ以上の LP を並行して解くと、1 つの LP を解くよりもはるかに時間がかかることです。非常に単純なテストで、同じ LP を解決する複数の同じプロセスを同時に開始しました。単一のプロセスを開始する場合と複数のプロセスを開始する場合の実行時間の違いは非常に大きくなります。
- 1工程:180秒
- 2工程:225秒
- 3工程:280秒
同様に、同じプロセスから複数のスレッドを開始して複数の LP を同時に解決するのは、単一の LP を解決するよりもはるかに時間がかかりました。
メモリ アクセスがボトルネックになるのではないかと考えましたが、メモリへの読み書きが頻繁に行われるコードをテストしたところ、同等のランタイムが得られました。
- 1工程:87秒
- 2工程:85秒
- 3プロセス 88秒
遅さの原因は何ですか?
私がこれを実行しているマシンには、スワッピングを避けるために 6 つのコアと十分なメモリがあります。IBM ILOG Cplex ライブラリーはバージョン 12.5 です。
memory-management - Cplex C++ インターフェイス。メモリをクリーンアップするには?
背景: IBM ILOG Cplex の C++ インターフェースは、型にはまらない方法でメモリーの割り当てと割り当て解除を行います。
ILO 環境を宣言し、IloEnv environment;
この環境内でモデルとソルバーを構築し、これらすべてのオブジェクト (環境を含む) をスコープ外に出すと、メモリ リークが発生します。new
演算子を使用していないことに注意してください。これを回避する 1 つの方法はenvironment.end();
、オブジェクトがスコープ外になる前に呼び出すことです。
設定:現在、特定の ILP を解決することを目的としたクラスがあります。このクラスにはいくつかのメンバー変数があります。
これらのメンバー変数は、コンストラクターの初期化リストで初期化されます。
デストラクタは、すべてのメモリ (メンバー変数を操作するクラスのメンバー関数によって割り当てられた) の割り当てを解除します。
質問:void clear()
メモリの割り当てを解除し、クラスを初期状態に戻すメンバー関数を実装するにはどうすればよいですか? これは、私が行った、うまくいかない2つのかなり単純な試みです。