擅长:python、mysql、java
<p>根据具体情况,有几种方法可以做到这一点。在</p>
<p>您似乎有<code>n</code>变量<code>x[i]</code>。它们可以假定值<code>{0,...,n}</code>,并且必须全部不同。在</p>
<p>顺便说一句:你的符号<code>x[1] ≠ x[2] ≠ x[3]..</code>并不完全正确。E、 g.<code>x[1]=1, x[2]=2, x[3]=1</code>将满足<code>x[1] ≠ x[2] ≠ x[3]</code>。在</p>
<p>所有不同的约束可以成对地写成<code>x[i] ≠ x[j]</code>for all <code>i < j</code>(我们不想检查<code>i</code>和{<cd10>}两次)。这个不等式可以重述为:<code>x[i] ≤ x[j]-1 OR x[i] ≥ x[j]+1</code>。OR条件可以在MIP模型中实现为:</p>
<pre><code> x[i] ≤ x[j]-1 + M δ[i,j] ∀ i < j
x[i] ≥ x[j]+1 - M (1-δ[i,j]) ∀ i < j
δ[i,j] ∈ {0,1}
</code></pre>
<p>其中<code>M=n+1</code>。我们添加了额外的二进制变量<code>δ[i,j]</code>。在</p>
<p>这是“不平等”结构最直接的表述。它也有相对较少的二进制变量:大约n^2/2。其他配方也可以。有关详细信息,请参见<a href="http://yetanothermathprogrammingconsultant.blogspot.com/2016/05/all-different-and-mixed-integer.html" rel="nofollow noreferrer">link</a>。在</p>
<p>请注意,约束编程求解器通常具有针对所有不同约束的内置工具,因此使用CP解算器可能更容易(对于具有所有不同约束的模型,它们也可能更高效)。在</p>