2017-03-13 31 views
0

最適な解決策が見つからない(10分以内)最適化の問題が発生しています。私はそれが非常に小さな改善が見つかっているという事実によって引き起こされたと思います。私はこのプロシーズを短くしたいので、少しでも改善するにはあまり時間を費やさないようにしたい。PuLP終了基準:fracgap(COIN-CMD)

私は(ExcelのSolverStudio経由)COIN-CMDクラスを使用しています:

class pulp.solvers.COIN_CMD(path=None, keepFiles=0, mip=1, msg=0, cuts=None, presolve=None, dual=None, strong=None, options=[], fracGap=None, maxSeconds=None, threads=None) 

一つの可能​​性は、時間制限を設定することであるが、これの欠点は、私がどのように大きな改善がわからないということですのソリューションのです。したがって、これは最終的な戦略になるはずです。

十分に良い解決策が見つかった場合など、解決プロセスを終了する別の方法がありますか?あるいは、パラメータとその動作がうまく記述されている場所はありますか?私はhttps://pythonhosted.org/PuLP/index.htmlがそれに関してちょっと貧弱だと気づいています。

+0

1つの改善の価値は、一般的なさらなる改善(特にMIPの場合)については何も言及していないので、上記の代替案は少し怖いです。これは、ソルバーがより良いソリューションを簡単に見つける前に停止するか、これをより複雑にする必要があることを意味します(n_non_improvements、running-averageおよびco)。私はこの種の行動がほとんどのソルバー(商用のものを含む)によってサポートされているとは思わない。私はあなたがTimeLimit/maxSecondsとMIPGap/fracGap(相対的または絶対的)に固執しなければならないことを恐れています。あなたが研究をしている場合:Gurobi – sascha

+0

@ saschaの学術ライセンスを取得することができます。迅速な回答ありがとうございます。私はMIPギャップと虚弱をどこで読むことができるのか分かりますか? –

+0

パルプはこれらのオプションをCBCに渡すだけなので、CBCの文書から始めてください。彼らはそれほど素晴らしいものではありませんが、[ここでは例を挙げて](https://www.coin-or.org/Cbc/cbcuserguide.html)から学ぶことができます。おそらく、このマッピングがどのように行われているかを知るためには、パルプ源も掘り下げる必要があります。 – sascha

答えて

0

いくつかの掘削は、私は、CBC(C++でプログラム)hereのギャップを指定するための3つの異なる方法見つけた後:私はsetAllowableGapであなたは絶対値を設定することを推測し、いつでも最高の間のギャップのです

bool setAllowableGap(double value) 
bool setAllowablePercentageGap(double value) 
bool setAllowableFractionGap(double value) 

を可能な最良の解がその値より小さい場合、解法が終了する。 setAllowablePercentageGapでは、ギャップは指定されたパーセンテージ(たとえば5%)より小さくなければならず、setAllowableFractionGapとの間にはギャップが分数(たとえば0.05)より小さくなるように見えます。私は可能な最良の解決策が何であるか、それがどのように計算されるかはわかりません。誰かがこれを拡張することができれば素晴らしいだろう。

PuLPでは、fracgapパラメータのみを指定できます。

+0

これはCBC内部にあります。あなたはたぶん 'パルプ'で指定できるものがほしいと思うでしょう。あなたの目的がゼロに近くない場合(その場合、相対的なギャップはそれほど有用ではありません)、 'fracGap = 0.05'またはあなたが望むどんなギャップ許容度を使ってもかまいません。 –

+0

@ErwinKalvelagenありがとうございます。私はそれを私の答えに加えました。私は解決策が本当に0の周りにある場合にギャップを指定する方法に興味があります。 –

+0

プログラミングを行い、PluPに 'absgap'オプションを追加するか、人為的に目的を非ゼロにします(用語を追加する)。 –