我试图在google-ortools中添加一个可选的车辆会议状态。
我正在尝试确保如果车辆2也访问会议节点,则车辆1只能去往会议节点。
以下代码进行了编译,但它不会阻止第一个vehicle one访问first_vehicle_meet,而vehicle -1正在访问second_vehicle_meet
routing.AddDisjunction([first_vehicle_meet], 0)
routing.AddDisjunction([second_vehicle_meet], 0)
routing.solver().Add(((routing.VehicleVar(first_vehicle_meet) == -1) and (routing.VehicleVar(first_vehicle_meet) == -1))
or ((routing.VehicleVar(first_vehicle_meet) != -1) and (routing.VehicleVar(first_vehicle_meet) != -1)))我也尝试过这段代码,但它给出了一个错误
routing.AddDisjunction([first_vehicle_meet], 0)
routing.AddDisjunction([second_vehicle_meet], 0)
routing.solver().Add(((routing.VehicleVar(first_vehicle_meet) == -1) & (routing.VehicleVar(first_vehicle_meet) == -1))
| ((routing.VehicleVar(first_vehicle_meet) != -1) & (routing.VehicleVar(first_vehicle_meet) != -1)))如下所示。
routing.AddDisjunction([second_vehicle_meet], 0)
routing.solver().Add((routing.VehicleVar(first_vehicle_meet) == -1)\
.OnlyEnforceIf(routing.VehicleVar(second_vehicle_meet) == -1))
routing.solver().Add((routing.VehicleVar(second_vehicle_meet) == -1)\
.OnlyEnforceIf(routing.VehicleVar(first_vehicle_meet) == -1))有没有人知道适当的代码/语法来将or操作符添加到我的约束中?
发布于 2021-10-13 07:49:43
在布线库中,添加(x == 2) || (y == 3)
首先查询求解器
solver = routing.solver()然后为每个等式创建一个布尔变量
x2 = solver.IsEqualCstVar(x, 2) # You can use x2 == (x == 2).Var()
y3 = solver.IsEqualCstVar(y, 3)然后添加析取
solver.Add(x2 + y3 >= 1)关键是对布尔变量使用线性公式来编码OR/AND。
https://stackoverflow.com/questions/69532812
复制相似问题