擅长:python、mysql、java
<p>从完整日志中,我可以从建模助手中看到许多此类警告(read.datacheck=2)</p>
<pre><code>CPLEX Warning 1008: Detected righthand side <= CPX_MINBOUND at constraint 'c9198'.
</code></pre>
<p>这意味着约束的右侧太小。CPLEX以浮点数形式进行计算,本质上是不精确的;因此,所有计算均受公差限制。
约束满足度公差为1e-6,在其他术语中为约束,例如</p>
<p>X+2 Y>;=三,</p>
<p>可通过公差范围为1e-6的CPLEX解决方案满足要求</p>
<p>简而言之:不要使用1e-6以下的系数或常数(绝对值)。
使用如此微小的数值只能在无用的数值问题上干扰cplex。
使用纯0或删除约束。
例如,一个约束,如:</p>
<pre><code> X + 2 Y <= 1e-12
</code></pre>
<p>应该写</p>
<pre><code> X + 2 Y <= 0
</code></pre>
<p>系数的相同规则:避免系数低于1e-7。如果您的数据包含它们,请过滤它们或缩放数据。
建议在整个模型中,系数的数量级范围不应超过1e+6,换句话说,最大值与最小值的比率应保持在1e+7以下;否则,数字上的麻烦是意料之中的</p>
<p>至于参数,我看到您正在使用强分支。只有当它真的有帮助的时候才使用它,因为它的CPU非常昂贵。
我还注意到您将线程限制为2,为什么不让cplex使用尽可能多的线程</p>
<p>总之,首先修复这些微小的系数,然后在没有强分支和完整线程的情况下尝试</p>