我正在使用答案集编程(Clingo)模拟大学课程时间表。要求是每节课必须分配到特定的星期、日期和开始/结束时间,直到达到总时间。
一天最多8小时,每节课最少2小时。预定的课程也将持续到第 10 周。
week(1..10). time(9,11;11,13;14,16;16,18).
所以首先我生成了每个分配的课槽
TotalHours { assigned(Week,Day,Start,End,Course,Teacher) : day(Day), time(Start,End), week(Week) } TotalHours :-
lesson(Course,Teacher,TotalHours).
之后,对于其他要求和规则,我需要找到时间表中分配的最后一门课程。我不知道这是否是一个好方法,但我能够找到解决方案
MaxWeek = #max {Week : assigned(Week,_,_,_,Course,_)},
MaxDay = #max {Day : assigned(MaxWeek,Day,_,_,Course,_)},
MaxStart= #max {Start : assigned(MaxWeek,MaxDay,Start,_,Course,_)},
assigned(_,_,_,_,Course,_).
我是 ASP 的新手,到目前为止,我找不到一个好方法来找到其他时间表要求所需的时间表(周、日、开始、结束)中分配的课程的倒数第二课。
所以举个例子
assigned(1,Monday,9,11,History,John) , assigned(1,Tuesday,11,13,Math,Smith), assigned(4,Tuesday,16,18,History,John),assigned(5,Monday,11,13,History,John)
我想找到历史的倒数第二课,即
分配(4,星期二,16,18)
非常感谢任何提示或解决方案