(1) Убедитесь, что смысл цели правильный. То, как я читаю вашу проблему, вы должны максимизировать.
(2) Правильная линеаризация
y(i,j,k) = x(i,k)*x(j,k)
равна
y(i,j,k) <= x(i,k)
y(i,j,k) <= x(j,k)
y(i,j,k) >= x(i,k)+x(j,k)-1
Иногда мы можем отбросить некоторые из этих ограничения из-за того, как цель работает. Убедитесь, что вы подтвердили, что вы действительно можете сбросить y(i,j,k) <= x(i,k)
и y(i,j,k) <= x(j,k)
.
(3) Это (почти) тот же вопрос, что и Алгоритмы для оптимального размещения студентов .
(4) Я хочу минимизировать цель в этом случае, если кто-то оценит кого-то как свой первый выбор, ему, по сути, будет дан 1 балл, 2 балла за секунду, 3 балла за третий и т.д. c. Вы не можете иметь 0=no points 1=best 2=second best,...
в своей формулировке. Предлагаю перекодировать ваши очки: 0=no points, 1=ok, 2=better, 3=best
. (Просто предварительная обработка данных). Тогда максимизируйте вместо того, чтобы минимизировать. Вы можете добавить -1,-2,...
за неприязнь, если хотите.