Немного необычная проблема решения ограничений, которую я пытаюсь реализовать в MiniZinc: у меня есть CSP, который имеет некоторые жесткие ограничения и мягкое ограничение, согласно которому отношения в решении должны иметь статистически подобный профиль для примера решения. То есть, если на входе есть 5 «красных» и 12 «зеленых», найденное решение не обязательно должно иметь ровно 5 и 12, но должно иметь статистическую вероятность того, что оно будет иметь аналогичное распределение ... но также разрешать редкие решения, которые , например, не имеют красного.
Хотя у меня может быть жесткое ограничение на то, что дистрибутив должен точно соответствовать распределению, или получить все возможные решения и пример из этого, я бы предпочел стратегию поиска, которая может получить одно решение, которое Статистически вероятно, чтобы иметь аналогичное распределение (но может варьироваться). Или способ сделать это эквивалентным производительности.
Использование indomain random
для assignmentannotation
может показаться работоспособным, но, насколько я понимаю, единственный способ использовать взвешивание с ним - это заполнить домены несколькими значениями, чтобы выделить домен с правильным взвешиванием.
Я мог бы, альтернативно, сформулировать это как задачу оптимизации и найти решение, которое максимизирует сходство с желаемым распределением, но я бы предпочел что-то, что соответствует жестким ограничениям и делает взвешенную выборку из всего возможного пространства решений для мягких ограничений.