我试图在google-ortools中添加一个可选的车辆会议状态。
我正在努力确保车辆1只有在车辆2也访问会议节点时才能到达会议节点。
下面的代码可以编译,但是它不阻止第一个车辆访问first_vehicle_meet,而second_vehicle_meet被vehicle -1访问
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))
有没有人知道适当的代码/语法来添加或操作符到我的约束之一?
在路由库中,如果您想添加(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。