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

使⽤Python 中的cvxpy 库解整数规划问题
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⾃带求解器对该问题进⾏求解。

本文发布于:2024-09-22 12:25:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/536896.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:问题   求解   整数   规划   混合   食品   相关
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议