Простое планирование в прологе - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь построить действительно простую программу планирования в Прологе.Основная цель - назначить человека на каждую смену в соответствии с его ограничениями. Редактировать: у меня есть более 10 уникальных смен для расчета и более 20 человек Итак, учитывая эти факты:

% shifts
shift(s1).
shift(s2).
shift(s3).
% ...

% person and shift preferences
m(linda, s1).
m(bruce, s1).
m(bruce, s2).
m(bruce, s3).
m(ariel, s2).
m(ariel, s3).

possible(L):-shift(S), m(M,S), L = [S,M].

allpossibleshifts(L):-findall(A,possible(A),DL), sort(DL, L).

Вывод:

L = [[s1, bruce], [s1, linda], [s2, ariel], [s2, bruce], [s3, ariel], [s3, bruce]]

Как вывидно, это возвращает все совместимые назначения.Мне нужно получить полное решение, с одним заданием в смену, с учетом предпочтений.Эти два, например, являются хорошими примерами желаемого результата:

L = [[t1, linda], [t2, bruce], [t3, ariel]]
L = [[t1, linda], [t2, ariel], [t3, bruce]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...