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

使用带有 cvxpy 语法的 python-mip 库

如何解决使用带有 cvxpy 语法的 python-mip 库

我需要使用 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,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

非常感谢!

解决方法

使用这个包https://pypi.org/project/mip-cvxpy/ 我用过,效果不错。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。