使用Python中的cvxpy库解整数规划问题

Python的scipy库中提供了解简单线性或非线性规划问题,但是不能求解如背包问题的0-1规划问题,或整数规划问题,混合整数规划问题,CVXPY库可以求解以上类型的问题。本文将使用cvxpy库求解整数规划问题。如果你需要使用cvxpy求解背包 问题或混合整数规划问题可以直接在cvxpy的官方文档上查询相关的例子。

Cvxpy库官方提供算例

本文求解的整数规划问题如下:
Objective: min: Z=i=05xi

Constrains:

0x1250x2120x312.50x420x50x110x240x390x480x501x1400.9x1x220.8x1(5/6)x2x3300.3x1(5/8)x20.8x3x438

import cvxpy as cp
import numpy as np
# Create two scalar optimization variables.
n = 5
x = cp.Variable(n, integer=True)#cvxpy使用cp.Variable(n,intger = True) 中的intger参数来规定x变量为整数
# # Create two constraints.
A1 = np.ones((5,5))
for i in range(A1.shape[0]):
    for j in range(A1.shape[1]):
        if i == j:
            pass
        else:
            A1[i,j] = A1[i,j]*0
A2 = A1 * (-1)
A3 = np.array([[-1,0,0,0,0],[-0.9,-1,0,0,0],[-0.8,-(40/48),-1,0,0],[-0.3,-(5/8),-0.8,-1,0]])
B = np.array([0,0,0,0,0,25,12,12.5,2,0,10,40,90,80,0,40,2,-30,32])
A = np.vstack((A2,A1,A1,A3))
constraints = [A @ x <= B]
objects = cp.Minimize(cp.sum(x))
# Define and solve the CVXPY problem.
prob = cp.Problem(objects,constraints)
prob.solve(solver=cp.CPLEX)#此处使用IBM商业求解器CPLEX作为求解器,对于没有安装CPLEX的同学可以通过pip install cplex安装该求解器,亦可将此处更改为solver = cp.ECOS_BB使用convexpy自带求解器对该问题进行求解
# Print result.
print("\nThe optimal value is", prob.value)
print("A solution x is")
print(x.value)
# print(help(prob))
# print (cp.installed_solvers())
'''结果如下:
The optimal value is 34.00000013019109
A solution x is
[ 1.00000000e+01  1.20000000e+01  1.20000000e+01  1.11983366e-07
 -6.64682255e-09]
'''

有同学反映在prob.solve(solver=cp.CPLEX)一行报错,此处我的代码使用IBM商业求解器CPLEX作为求解器,对于没有安装CPLEX的同学可以通过pip install cplex安装该求解器,亦可将此处更改为solver = cp.ECOS_BB使用convexpy自带求解器对该问题进行求解。

posted @   The_thermal  阅读(1513)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
主题色彩