擅长:python、mysql、java
<p>您的约束不起作用的原因是您要求<code>x_i</code>至少比<code>x_j</code>大1,对于每个<code>i</code>和{<cd4>}。所以您需要<code>x_1 > x_2</code>和{<cd6>}。您可以通过在<code>if</code>语句中将<code>x_i != x_j</code>替换为<code>i > j</code>或类似的东西来解决这个问题。在</p>
<p>但在您的例子中,我会考虑使用二进制变量来指示每个<code>x_i</code>取哪个值。例如,让<code>y_{i,n} = 1</code>如果<code>x_i = n</code>。那么你就有一个约束</p>
<p><code>sum {i=1,...,N} y_{i,n} <= 1</code>全部<code>n = 0,...,N</code></p>
<p>(即<code>n</code>的每个值最多只能使用一次)和其他类似的</p>
<p><code>sum {n=0,...,N} y_{i,n} = 1</code>全部<code>i = 1,...,N</code></p>
<p>(必须为每个<code>i</code>分配一些值<code>n</code>)。在</p>
<p>然后,在公式中,将所有<code>x_i</code>变量替换为<code>sum {n=0,...,N} y_{i,n}</code>。在</p>