Настройка нарушения симметрии - PullRequest
0 голосов
/ 04 мая 2020

Мне задают вопрос, где я должен создать набор команд, с простым ограничением, когда есть два массива наборов, в которых два участника должны быть вместе, а какие - нет. Команды тоже должны быть размера n. Я также подсчитываю общую конкуренцию за турнир, в котором один игрок объединяется с другим, которые очень хорошо дополняют друг друга. Итак, мы имеем эффективностьGroup = {[4,5], [6]}. Конкуренция рассчитывается по количеству людей в группе эффективности. Таким образом, если игрок 1 (строка i соответствует игроку i) объединяется с 4 и 5, тогда счет равен 2. Поэтому необходимо удовлетворять ограничениям и максимизировать цель эффективности.

Например: GroupsThatMustBePaired = [{1 , 3}, {4,5}] GroupsThatShouldNot = [{2,3}]

Вывод = [{1,3}, {4,5}, {2,6} .. и т. Д.]

Я понял, что созданная мною программа борется с большим количеством участников. Например, 20 человек и меньше команд, которые должны быть в паре. Я понимаю, что это проблема нарушения симметрии, но я запутался, как go об этом. Любые идеи? Я использовал установленные ограничения для удовлетворения начальных требований, вот как я максимизирую эффективность:


solve maximize sum(i in 1..nPlayers,j in Teams)(if i in j then card(effectivenessGroup[i] intersect j) else 0.0 endif);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...