Я разрабатываю программу в PROLOG (с ограничениями), которая должна выводить комбинацию из 6 номеров в пределах определенных ограничений.Создание комбинаций чисел в списке пролог
В списке должно быть номера от 1 до 4 и, следовательно, повторить 2 других номера. Это не возможно не иметь число от 1 до 4.
Possible examples: Wrong examples:
1,2,3,4,1,1 1,2,3,2,3,3 //Missing #4
1,3,2,1,4,4 4,3,2,4,2,3 //Missing #1
1,2,3,3,2,4
4,1,3,2,1,4
Для того, чтобы это сделать, я создал некоторые ограничения, такие как следующие:
Numbers = [A1, A2, A3, A4, A5, A6]
nCr(6,4) = 15 restrictions
A1 =\= A2 =\= A3 =\= A4 OR
A1 =\= A2 =\= A3 =\= A5 OR
Etc.
Вот код, который я до сих пор:
make
pred(Numbers) :-
Numbers = [A1, A2, A3, A4, A5, A6],
domain(Numbers, 1, 4),
%restrictions
all_different([A1,A2,A6,A3]) #\/ %A1 =/= A2 =/= A6 =/= A3
all_different([A1,A2,A6,A4]) #\/ %A1 =/= A2 =/= A6 =/= A4
all_different([A1,A2,A6,A5]) #\/ %A1 =/= A2 =/= A6 =/= A5
all_different([A1,A2,A3,A4]) #\/ %A1 =/= A2 =/= A3 =/= A4
all_different([A1,A2,A3,A5]) #\/ %A1 =/= A2 =/= A3 =/= A5
all_different([A1,A2,A4,A5]) #\/ %A1 =/= A2 =/= A4 =/= A5
all_different([A1,A6,A3,A4]) #\/ %A1 =/= A6 =/= A3 =/= A4
all_different([A1,A6,A3,A5]) #\/ %A1 =/= A6 =/= A3 =/= A5
all_different([A1,A6,A4,A5]) #\/ %A1 =/= A6 =/= A4 =/= A5
all_different([A1,A3,A5,A4]) #\/ %A1 =/= A3 =/= A4 =/= A5
all_different([A2,A6,A3,A4]) #\/ %A2 =/= A6 =/= A3 =/= A4
all_different([A2,A6,A3,A5]) #\/ %A2 =/= A6 =/= A3 =/= A5
all_different([A2,A6,A4,A5]) #\/ %A2 =/= A6 =/= A4 =/= A5
all_different([A2,A3,A4,A5]) #\/ %A2 =/= A3 =/= A4 =/= A5
all_different([A6,A3,A4,A5]), %A6 =/= A3 =/= A4 =/= A5
labeling([], Numbers).
Логика кажется прекрасной для меня, но эта реализация не работает так, как она пакетирования. Есть нет решений которые соответствуют введенным ограничениям. Может ли кто-нибудь дать мне руку?
| ?- pred([A1, A2, A3, A4, A5, A6]).
no
Попробуйте выразить ограничения на более высоком уровне. Как вы их написали, это действительно нечитаемо ... – CapelliC
Это подзадача, которую я пытаюсь решить, чтобы разработать большую программу, вот почему код еще не очень хорош. В любом случае, я внес некоторые изменения. – Khabz
@Khabz: Когда вы говорите об «ограничениях», может быть, вы имеете в виду ограничения? По крайней мере, это то, что я считаю истинным, глядя на ваши программы. – false