Причина, по которой ваше ограничение не работает, состоит в том, что вы требуете, чтобы x_i
было как минимум на 1 больше, чем x_j
, для каждых i
и j
.Таким образом, вы требуете x_1 > x_2
и x_2 > x_1
.Вероятно, вы можете решить эту проблему, заменив x_i != x_j
на i > j
или что-то подобное в своем выражении if
.
Но в вашем случае я хотел бы рассмотреть возможность использования двоичных переменных, чтобы указать, какое значение принимает каждый x_i
.Например, пусть y_{i,n} = 1
, если x_i = n
.Тогда у вас есть ограничение, например
sum {i=1,...,N} y_{i,n} <= 1
для всех n = 0,...,N
(т. Е. Каждое значение n
может использоваться не более одного раза) и другое, например
sum {n=0,...,N} y_{i,n} = 1
для всех i = 1,...,N
(каждому i
должно быть присвоено некоторое значение n
).
Затем в вашей формулировке замените все переменные x_i
на sum {n=0,...,N} y_{i,n}
.