Python的scipy库中提供了解简单线性或⾮线性规划问题,但是不能求解如背包问题的0-1规划问题,或整数规划问题,混合整数规划问题,CVXPY库可以求解以上类型的问题。本⽂将使⽤cvxpy库求解整数规划问题。如果你需要使⽤cvxpy求解背包 问题或混合整数规划问题可以直接在cvxpy的官⽅⽂档上查询相关的例⼦。本⽂求解的整数规划问题如下:Objective: Constrains: python代码如下:
min: Z =x ∑i =05
i 0≤x ≤2510≤x ≤1220≤x ≤12.530≤x ≤240≤x ≤05x ≤101x ≤402x ≤903x ≤804x ≤05−1∗x ≤401−0.9∗x −x ≤2
12−0.8x −(5/6)∗x −x ≤−30
123−0.3x −(5/8)∗x −0.8∗x −x ≤38
1234
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⾃带求解器对该问题进⾏求解。