首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在应答集编程中找到第二个最后值(ASP Clingo)

如何在应答集编程中找到第二个最后值(ASP Clingo)
EN

Stack Overflow用户
提问于 2021-04-19 07:37:11
回答 1查看 151关注 0票数 0

我正在用答案集编程(Clingo)来模拟大学课程时间表。要求每堂课必须分配到特定的一周、一天和开始的/end小时,直到达到总时数。

一天最多有8小时,每节课最少2小时。此外,排定的课程将持续到第10周。

代码语言:javascript
复制
week(1..10). time(9,11;11,13;14,16;16,18).  

因此,首先,我生成了每个分配的课时

代码语言:javascript
复制
TotalHours { assigned(Week,Day,Start,End,Course,Teacher) : day(Day), time(Start,End), week(Week) } TotalHours :-
lesson(Course,Teacher,TotalHours).

在此之后,对于其他要求和规则,我需要找到时间表中最后一个课程。我不知道这是不是个好办法,但我找到了解决办法

代码语言:javascript
复制
MaxWeek =  #max {Week : assigned(Week,_,_,_,Course,_)},
MaxDay = #max {Day : assigned(MaxWeek,Day,_,_,Course,_)},
MaxStart= #max {Start : assigned(MaxWeek,MaxDay,Start,_,Course,_)},
assigned(_,_,_,_,Course,_).

我是ASP的新手,到目前为止,我还没有找到一个很好的方法来找到时间表(周、日、开始、结束)中分配给其他时间表要求的课程的第二节课。

所以举个例子

代码语言:javascript
复制
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)

任何建议或解决方案都非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 11:58:51

考虑使用第二个赋值谓词(具有不同的属性)为更绝对的谓词,例如:

代码语言:javascript
复制
assigned((Week-1)*7*24+Day+Start,End,Course,Teacher) :- assigned(Week,Day,Start,End,Course,Teacher).

现在,您只有一个字段是完全有序的所有作业,这是从今年开始的总小时。

要查找最后一个课程,最后一个聚合执行得非常糟糕,可以使用链接约束进行优化:

代码语言:javascript
复制
auxLastCourse(C,T) :- assigned(T,_,C,_).
auxLastCourse(C,T-1) :- auxLastCourse(C,T), T > 0.
lastCourse(C,T) :- auxLastCourse(C,T), not auxLastCourse(C,T+1).

还请注意,在您的示例中,夜间没有任何课程,因此可以进一步优化这一过程,方法是不进行如此细粒度的操作,并显式地表示每小时一次,但可能只有在可能的时间安排中实际发生的小时数。THis意味着在数周、几天、几小时内用一个明确的下一个关系替换辅助代码中的T1。目前,我只是懒得添加这样的东西。

在最后一个课程中,你可以做同样的事情:

代码语言:javascript
复制
auxSecondLastCourse(C,T) :- assigned(T,_,C,_), not lastCourse(C,T).
auxSecondLastCourse(C,T-1) :- auxSecondLastCourse(C,T), T > 0.
secondLastCourse(C,T) :- auxSecondLastCourse(C,T), not auxSecondLastCourse(C,T+1).

PS:请注意,我假设您的时间是以数字0..6表示的,而不是像在您的示例中那样作为单词,我相信您将知道如何使用另一个谓词来翻译它们。

PPS:我还没有测试代码,因为你没有提供MWE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67157783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档