我正在尝试在prolog中建立一个学校调度计划。我想检查一下老师是否可以在特定的时间教授这门课;检查允许的时间段;等
这是我到目前为止所写的内容:
teacher(ali, bio).
teacher(sara, math).
teacher(john, lit).
teacher(milton, arabic).
% a, b, c, d, e, f, g
timeslot(a).
timeslot(b).
% class has a name and a grade
class(bio, 1).
class(math, 1).
class(lit, 2).
class(arabic, 2).
如何确定某个班级不能有两个时段?
我使用了一些Prolog,但我不知道如何解决这个问题。任何进一步的提示和指示,如纸张或更频繁解决的类似问题,将不胜感激。
答案 0 :(得分:4)
该课题的措辞建议编写一个程序,以制作(或至少检查)拟议的课程表。
该计划的输入似乎是教师(及其科目)的列表,时间列表,以及班级列表(及其科目/成绩)。
据推测,有一些“基数”限制(有时称为“商业规则”),正确的课程安排必须满足。一个班级只能给一次(不是两个时段)是问题的重点,但教师每个时段只能教一个班级等。
如何指出这些限制? Prolog谓词没有这种固有的限制,但它们可以在结构上或逻辑上实现(即在程序的逻辑检查中)。
以结构方式执行操作的示例是向class
谓词添加字段以表示指定的时间段。一些逻辑将涉及如何分配该字段,以确保该值是有效的时隙。
以逻辑方式执行类和时隙之间关系的一个示例是定义一个额外的谓词,该谓词模拟时隙到类的分配(可能类似于将类分配给教师)。例如,谓词class_timeslot(Class,Timeslot)
就可以了。程序规则将强制实现每个Class
实例的这些(动态断言的)事实的一个实例的唯一性,以及Timeslot
值的有效性。
答案 1 :(得分:1)
两年前我写了一个评估中心的调度程序,并使用了clpfd,因为在正常的swi-prolog中它会更加复杂,而且问题是随着复杂性扩大指数,所以如果你有一个真正的学校有很多如果没有约束编程,教师,教师等都不会真正有效。
处的int clp(fd)亲切的问候
solick