Мне задают вопрос, где я должен создать набор команд, с простым ограничением, когда есть два массива наборов, в которых два участника должны быть вместе, а какие - нет. Команды тоже должны быть размера 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);