4

我需要使用 CBC 求解器来解决混合整数优化问题,但是在目标环境中我不能使用作为外包软件安装的 CBC 求解器,它必须是 python 库的一部分。为了克服这个问题,我找到了内置 CBC 求解器附带的mip 库https://pypi.org/project/mip/ https://docs.python-mip.com/en/latest/index.html ,它可以仅在导入此库后使用,无需单独安装 CBC 求解器。我的问题是,我已经有大量用 cvxpy 编写的代码(使用这个单独的 CBC 求解器)。现在的问题是,是否有可能使用 mip 库中内置的 CBC,但从常规 cvxpy 接口使用它?无需更改代码,将所有内容重写为 mip sytax 等。

我需要重写为 mip 语法的示例代码:

import numpy as np
import cvxpy as cp
import cvxopt 
import mip

def run_sample_optimization():
    demand = np.array([[100, 500, 30], [20, 200, 50], [150, 15, 35], [10, 5, 25]])
    product_supply = np.array([550, 200, 170, 40])

    allocation = cp.Variable(demand.shape, integer=True)

    objective = cp.Maximize(cp.sum(allocation/demand))


    constraints =[cp.sum(allocation, axis=1) <= product_supply,
                allocation <= demand,
                allocation >= 0]                        


    problem = cp.Problem(objective, constraints)

    optimal_value = problem.solve(solver=cp.GLPK_MI) # <-- it would be perfect to link somehow from this place to CBC implemented in mip library

    print('product supply:', product_supply)
    print('demand:\n', demand)
    print('allocation:\n', allocation.value)
    print('calculated score:', optimal_value)
    return product_supply, demand, allocation.value, optimal_value

提前谢谢了!

4

1 回答 1

0

使用这个包https://pypi.org/project/mip-cvxpy/ 我已经使用它并且它可以工作。

这个包允许您使用 python-mip 包作为后端求解器来解决 CVXPY 问题。它适用于混合整数线性问题。

这允许您从 CVXPY 使用 CBC,而无需手动安装 CBC。默认情况下,CVXOPT 调用 CyLP 来使用 CBC,需要手动安装 CBC。另一方面,python-mip 通过 pypi 捆绑了 CBC。

于 2021-07-09T11:15:16.377 回答