2

私は GLPK ソルバーで Pulp を使用しており、次の制約があります。

-1000000*f1 + v1 + 1000000*f2 - v2 >= -10.999

ソルバー:

problem.solve(GLPK(options=['--mipgap', '0.000001', '--cuts']))

しかし、結果として、制約違反で解決された問題 (ステータス「最適」) が得られます。

f1 = 0
v1 = 11
f2 = 1
v2 = 1000000

では、この場合はどうすればよいのでしょうか。何らかの方法で精度を上げるか、別のソリューションを使用できますか?

4

1 に答える 1

2

数値の精度に問題があると思います。係数は 1.e7 のオーダーです (そして 1.e-6 の解が必要です)。解は、制約を保持するために 1.e11 で少なくとも正しい必要があり、引数によって最大 1.e-14 相対誤差が必要です。

単純に、純粋な数値ソルバーには多すぎます。(最大 1.e-6 から 1.e-7 までが LP-Solver に対して信頼できる実行を期待します) QSopt のような正確なソルバーがあり、soplex は現在それらの機能を備えていると思います。

QSopt へのリンクは次のとおりです http://www.math.uwaterloo.ca/~bico/qsopt/downloads/downloads.htm

これは、このソプレックスのものへのリンクです。 http://soplex.zib.de/doc/html/EXACT.php

QSopt はバイナリのみで利用でき (私が思うに)、SoPlex は無料で研究できます (私が理解しているように)。

さらに、SCIP を SoPLex と一緒に使用できます。正確なIPプロジェクトを持っている、または持っていた。したがって、ライセンスが問題なければ、この場合は SCIP を使用します。

おそらく、あなたのアプリケーションについてもう少し洞察を与えることができるので、あなたの制限を再定式化することができます.

于 2016-05-25T08:35:04.960 に答える