問題タブ [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++ - cplexで解くときのギャップの設定方法
私はc ++でコードを書いており、それを解決するためにCPLEXを呼び出しています。非常に優れたソリューションはすぐに見つかりますが、それを改善しようとすると非常に長い時間がかかります。したがって、コードを終了するためにギャップをより大きな値に設定したいので、これを使用します。
しかし、コンパイラEpGap
は、宣言されていない識別子であるというエラーを表示します。相対ギャップのデフォルト名は?
matlab - 距離+荷重の割り当て matlab または cplex
MATLAB または CPLEX で最適化問題を解こうとしています。2 つのセット A (n 個の要素) と B (m 個の要素) があります。A の 1 つの要素を B の 1 つの要素に正確に割り当てる必要があります。
B の 1 つの要素に、必要な数の A の要素を割り当てることができます (最大 n)。A の要素 i を B = cijの j 要素に割り当てるにはコストがかかります。
さらに、B 内のエレメントに割り当てられた A 内のエレメントの NUMBER に関連付けられた別のコスト (ロード) があります。そのコストは次 のとおりです。 lj = ( sum (j に割り当てられた要素の数) ^2 )
したがって、全体のコストは次のようになります。 sum (cij+lj)
sum (cij+lj) が最小になるような最適な割り当てを見つけたいと考えています。この問題は、負荷がない場合の 2 進整数プログラミングとして定式化できます。私の懸念は、MATLAB または CPLEX でそのような関数をどのように記述できるかです。
c - C で CPLEX API を使用する MEX ファイルの「Symbols not found for Architecture x86_64」
現在、C の CPLEX API を使用して線形計画法の問題を解決する MATLAB で MEX ファイルを作成しています。残念ながら、コンパイルしようとすると「アーキテクチャ x86_64 のシンボルが見つかりません」という問題が発生し、解決方法がわかりません。
いくつかの基本情報:
yprime.c
CPLEX API を使用しない他の MEX ファイルをコンパイルできます- Mac OSX 10.7.2 で MATLAB 2011b を使用しています
- XCode 4.2 に含まれる GCC 4.2 パッケージを使用しています。
- MATLAB 用の XCode 4.2 パッチを既に適用しています
人々のアドバイスをいただければ幸いです。以下に詳細なエラー レポートを含めます。
c - CPLEX API を使用する MEX ファイルのコンパイラ エラー
現在、C の CPLEX API を使用して線形計画法の問題を解決する MATLAB で MEX ファイルを作成しています。
残念ながら、コンパイルしようとすると「アーキテクチャ x86_64 のシンボルが見つかりません」という問題が発生し、解決方法がわかりません。以下に (MATLAB) 出力のコピーを含めました。正常にコンパイルするにはどうすればよいですか?
レジスタの割り当てに関連して保存されたリンカーの「コンパクトなアンワインドを作成できませんでした」というエラーも多数あります。あまりにも多く、読みやすくするために 80% を削除しました。これらは関連しているのでしょうか?それらは懸念の原因ですか?
役立つ可能性のあるその他の情報:
- CPLEX API を使用しない yprime.c およびその他の MEX ファイルをコンパイルできます。
- Mac OSX 10.7.2 で MATLAB 2011b を使用しています
- XCode 4.2 に含まれる GCC 4.2 パッケージを使用しています。
- MATLAB 用の XCode 4.2 パッチを既に適用しています
(MATLAB)出力は次のとおりです。
問題は解決された:
今後の参考として、CPLEX を使用する場合、警告メッセージは問題になりません。実際の問題は、XCode 4.2 に含まれる CoreFoundation および IOKit フレームワークに通常バンドルされているシンボルの欠落でした。通常、-framework CoreFoundation および -framework IOKit フラグを使用してそれらを含めることができますが、MATLAB の mex コマンドはこの機能をサポートしていません。ただし、幸いなことに、LDFLAGS='\$LDFLAGS -framework CoreFoundation -framework IOKit'... を使用して、リンク プロセス用のカスタム ベースのフラグを追加できます。
c# - 外部 API のエラーは、メイン アプリケーションでの GC.Collect() の呼び出しにどのように依存しますか?
私は、C# 最適化ルーチンでこの動作を説明しようとしています。
このプログラムは、サブルーチンで cplex 12.2 API を使用して大規模な LP を作成および解決します。このバグを追跡する目的で、同じ問題を繰り返し解決するように変更しました。解決後、インスタンスで cplex.End() を呼び出すと、cplex インスタンスがスコープ外になるため、メモリの割り当てが解除されます。
2 回目にモデルを作成して cplex.Solve() を呼び出すと、モデルが解決されません。「CPLEX エラー 1217: 解決策がありません」というエラーが表示されますが、これは最初に同じ問題を解決したため信頼できません。(クラッシュ時のメモリ要件はわずか 1.3 GIG でした)
ここで、2 つの解決の間にガベージ コレクションを強制すると、cplex は最初と同じように 2 回目にモデルを解決します。
誰かが私にこの動作を説明できますか? そして、それを適切に修正する方法は?
java - 32 & 64 ビット Java コードの実行
32 ビット CPLEX Optimizer を呼び出す Java プログラムを開発していますが、
このコードを 64 ビット マシンで実行します。
プログラムの一部を 64 ビットで実行し、他の部分を 32 ビットで実行できますか?
linear-algebra - cplex で 2 次計画法を読み込もうとすると、エラーが発生します
「読み取り」コマンドを使用して、CPLEX LP ファイルを CPLEX にロードしようとしています。この問題には、2次の一連の制約があると思います。しかし、私が理解していることから、CPLEX は引き続き二次計画問題を解決しようとします。
ただし、読み込もうとすると、次のエラーが発生します。
二次計画問題を読むために何か特別なことをする必要がありますか?
注: この LP ファイルを scip にロードして、次を使用して解決できます: scip -f
java - ハイスループットのためのCPLEXJavaの最適な使用
CPLEXJavaAPIを使用して大規模な最適化問題を解決しています。現在私はただ
これはうまく機能しますが、係数を変更するだけの場合は、このプロセスを頻繁に繰り返します。繰り返すたびに、新しいcplex
オブジェクトを作成し、すべての変数を再作成します。
これを行うためのより効率的な方法はありますか?IBMのドキュメントには、「モデルをモデルのインスタンスに追加する」などの言葉があり、奇妙に聞こえますが、それは物事を再利用できることを示唆していると思いました。
より経験豊富なユーザーからの提案は素晴らしいでしょう。ありがとう。
matlab - スレッドセーフではないAPI関数が原因で並行して発生するセグメンテーション違反の回避
現在、MATLAB 2012aのparfor関数を使用して実験を並行して実行するために、MATLABでMEXファイルをコーディングしています。MEXファイルは、いくつかの非常に単純な数値タスクを実行しますが、IBMのCPLEX12.4APIに依存しています。
私のMEXファイルは順番に動作しますが、並列で実行すると、必然的に「ランダムな」セグメンテーション違反が発生します。セグメンテーション違反のスタックトレースをMATLABに送信した後、彼らは、エラーがCライブラリの「putenv()」関数に起因することを示唆しました。これは明らかにスレッドセーフではありません。
MEXコードでputenv()関数を使用していませんが、CPLEX12.4から絶対に呼び出さなければならない関数の1つがそれを使用していることがわかりました。この関数の結果として発生するセグメンテーション違反を回避するために何かできることがあるかどうか疑問に思っています。以前、誰かが「ビットをロックする」と「セマフォを使用する」ことを提案しましたが、これらの概念に関しては、私は本当に頭がおかしいです。
アドバイスや指示をいただければ幸いです。
c++ - 行列形式のすべての変数の解の値にアクセスする方法は?
(注:この質問は、IBMのILOG CPLEX C ++ API、2007年頃のドキュメントがここでHTTP経由でPDFになっていること、およびIBMのFTP経由で入手できる「バージョン12」の現在の資料に関連しています)
行列変数があり、それらの値を行列パラメーターに転送したいと思います。これは私がしたことです:
しかし、どうやらgetValues()
でのみ動作しIloNumVarArray
ます。どうすればこれを修正できますか?