【问题标题】:Using Google OR tools for crew scheduling使用 Google OR 工具进行船员调度
【发布时间】:2019-03-20 14:46:43
【问题描述】:

我正在寻找一种适当的方法来使用 Google OR 工具来解决年度船员调度问题。我尝试按照提供的调度问题示例进行操作,但找不到设置所需 4 维决策变量的方法(D[i,j,k,t]i 用于船长,j 用于工程师,k 用于船舶和 @ 987654325@ 时间段(天或周))。

尽管给出了许多示例(对于 C#),但我面临的主要问题是设置和利用这个主要决策变量的方式,以及如何使用决策生成器,因为在所有示例中,变量都有二维,并且是.flattened 以便进行比较。不幸的是,我还没有找到使用较小 D 变量的方法,因为罚分(最小化罚分问题)是通过可能的船长-工程师、船长-船舶和工程师船的集合来估计的。

【问题讨论】:

    标签: optimization constraint-programming or-tools


    【解决方案1】:

    你为什么不创建你的 4D 数组,然后一个一个地用变量填充它。

    这是矩阵的代码:

    public IntVar[,] MakeIntVarMatrix(int rows, int cols, long min, long max) {
      IntVar[,] array = new IntVar[rows, cols];
      for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
          array[i,j] = MakeIntVar(min, max);
        }
      }
      return array;
    }
    

    话虽如此,请使用 CP-SAT 求解器,因为不推荐使用原始 CP 求解器。

    简介:

    见:

    【讨论】:

    • 谢谢,将尝试像这样对其进行建模,不过还有一个问题,我看到在每个示例中,为了在问题结束时使用决策构建器,我们总是有一个扁平的决策变量,我如何在 3d 或 4d var 上面对它?
    • 您需要将所有变量展平为单个一维数组。我的建议是,每次创建 var 时,都将其附加到 1D 数组中。尽管如此,我还是会放弃 CP-SAT 的 CP 求解器。使用 CP-SAT,不必费心指定搜索。
    • 再次感谢您的帮助,最后有两个问题困扰着我(请记住,我的编程背景不是最好的)。 1)数组上的long min -long max,例如,您是否将它们命名为这样,或者在4d Dvar的声明期间应该这样调用它们。 b)在代码中的哪一点我应该将变量插入一维数组(我的意思是在我调用 CpSolver solver = new CpSolver(); 命令之后? - 我应该用 4x For (int i=0 etc ..) ----- 再次感谢你
    • 这些是您要创建的变量的界限。看看github.com/google/or-tools/blob/master/ortools/sat/doc/…。您首先创建模型,添加变量和约束。然后创建求解器并求解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2020-07-10
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多