0

我遇到了 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
4

0 回答 0