OR TOOLS GLOP提供了错误的解决方案

问题描述

我提出了一个简单的3d轴向分配问题。 我们有d个司机,v个车辆和j个工作。 我们需要为每个工作分配1个驾驶员和1个车辆,并且每次分配都有成本 我做了一个随机成本矩阵 np.randint(0,100,size =(drivers,vehicles,jobs)) 首先我们定义求解器及其变量

solver = pywraplp.Solver.CreateSolver('assigment_mip','CBC')
x = {}
for i in range(num_drivers):
    for j in range(num_vehicles):
        for k in range(num_jobs):
            x[i,j,k] = solver.BoolVar('')```

then we define the constraints:
for jobs:
``` for k in range(num_jobs):
    t = []
    for i in range(num_drivers):
        for j in range(num_vehicles):
            t.append(x[i,k])
    solver.Add(sum(t) == 1)```

we do the same for drivers and vehicles
then we define the objective terms and let the solver solve:
```objective_terms = []
for i in range(num_drivers):
    for k in range(num_vehicles):
        for j in range(num_jobs):
            objective_terms.append(costs[i][j][k] * x[i,k])

然后我们定义一个目标变量

y = solver.IntVar(0,1000000000000000000000000000,'')
solver.Add(y == sum(objective_terms))
solver.Minimize(y)

如果我们使用CBC,则解决方案的速度非常慢,但正确无误;如果使用GLOP,则解决方案几乎是即时的,但不正确。 GLOP为作业提供了浮动解决方案。 在CBC中,每个变量x为0,1 但是在GLOP中,我得到了浮点数作为解决方案 有没有办法强制GLOP提供二进制解决方案?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...