微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。