如何在 Java 中使用 OR-Tools 从多个 IntExpr 创建 IntExpr,与 Python 中相同
Posted
技术标签:
【中文标题】如何在 Java 中使用 OR-Tools 从多个 IntExpr 创建 IntExpr,与 Python 中相同【英文标题】:How to create IntExpr from multiple IntExpr in Java, using OR-Tools, same as in Python 【发布时间】:2020-06-22 12:31:19 【问题描述】:在 Github 上的这个问题中,设置约束的解决方案需要用户从两个表达式创建一个新表达式 https://github.com/google/or-tools/issues/685
喜欢这个
dur_expr = time_dimension.CumulVar(delivery_index) - time_dimension.CumulVar(index)
solver.Add(dur_expr <= max_dur)
但是尝试在 Java 中做类似的事情会出现以下错误
The operator - is undefined for the argument type(s)com.google.ortools.constraintsolver.IntVar, com.google.ortools.constraintsolver.IntVar
知道如何在 Java 中做到这一点吗?
我设法在IntExpr
上找到了文档,但找不到关于如何组合表达式的任何内容
http://google.github.io/or-tools/java/classcom_1_1google_1_1ortools_1_1constraintsolver_1_1IntExpr.html
我想要实现的是确保总持续时间(即司机的值班时间)不超过时间限制......因为在第一个站点节点可能会有很长的等待时间,由于对于时间窗口,我不能简单地将时间维度限制为允许的值班时间,因为松弛将超过允许的总时间。
这就是为什么我想添加以下条件
for (int i = 0; i < data.vehicleNumber; ++i)
solver.addConstraint(solver.makeLessOrEqual(timeDimension.cumulVar(routing.end(i))-timeDimension.cumulVar(routing.start(i)), onDutyTimeLimit));
【问题讨论】:
【参考方案1】:Java 不支持重载运算符。您需要使用 Solver 类的工厂方法。
在你的情况下:
http://google.github.io/or-tools/java/classcom_1_1google_1_1ortools_1_1constraintsolver_1_1Solver.html#a420d96c79d5d8c45667706d19d1942d9
【讨论】:
以上是关于如何在 Java 中使用 OR-Tools 从多个 IntExpr 创建 IntExpr,与 Python 中相同的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 or-tools 在 bool 数组中制作 K 个不同的元素?