我面临一个Minizinc代码的问题,该代码必须在可用的房间和时段安排一些考试。我跳过了整个问题和代码,因为我在这个软约束的定义中只是一个问题:
某些考试的目标是排他性还是非排他性,这意味着他们需要一个自己的空间,这是一个软性的限制,所以我需要尽量减少违规次数。事实上,在同一个房间和考试期间安排的每个考试需要一个专用的房间作为一次违规。
对此约束有用的数据和变量是:
例如,如果四个考试共享房间,其中两个需要专用房间,则违规总数为六。这两个中的每一个都在同一个房间里进行了三次其他考试。
我已经考虑过对每个考试进行两个周期的控制,以便首先找到一个独家考试,然后检查它是否与其他考试共享其空间和时间。这个问题可能出在 sum(e2 in 1..Exams,e1!= e2)中,因为我已经写过它而不知道Minzinc语法是否正确 E1!= E2
constraint
forall(e1 in 1..Exams)
(roomexclusivity[e1]=sum(e2 in 1..Exams, e1!=e2)(bool2int(room_exclusive[e1]=true /\ room_assignment[e1]=room_assignment[e2] /\ period_assignment[e1]=period_assignment[e2])));
constraint
roomexclusivity_violation=sum(e in 1..Exams)(bool2int(roomexclusivity[e]>0));
我得到的错误是(roomexclusivity [e1] .. 行:
syntax error at `('; expected `)' after body expression in generator call