Minizinc软约束问题

时间:2015-03-11 16:27:23

标签: constraints constraint-programming check-constraints minizinc

我面临一个Minizinc代码的问题,该代码必须在可用的房间和时段安排一些考试。我跳过了整个问题和代码,因为我在这个软约束的定义中只是一个问题:

某些考试的目标是排他性还是非排他性,这意味着他们需要一个自己的空间,这是一个软性的限制,所以我需要尽量减少违规次数。事实上,在同一个房间和考试期间安排的每个考试需要一个专用的房间作为一次违规。

对此约束有用的数据和变量是:

  • 考试(要安排的考试数量)
  • room_exclusive (一个布尔值向量,代表每个考试所需的排他性)
  • room_assignment (每个考试分配的房间的变量向量)
  • period_assignment (分配给考试的期间的变量向量)
  • roomexclusivity (一个计算每项考试的排他性违规的int向量)
  • roomexclusivity_violations (违规总数)。

例如,如果四个考试共享房间,其中两个需要专用房间,则违规总数为六。这两个中的每一个都在同一个房间里进行了三次其他考试。

我已经考虑过对每个考试进行两个周期的控制,以便首先找到一个独家考试,然后检查它是否与其他考试共享其空间和时间。这个问题可能出在 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

0 个答案:

没有答案