python - Python 中的混合整数二次规划
问题描述
我想在 Python 中解决以下 Python 中的混合整数二次规划。不过,我对 Python 的优化工具箱并不熟悉。
有人可以提供一个带有向量 X1、X2、X3、X4 的代码示例,如下所示?
X1 = np.array([3,10,20,10])
X2 = np.array([5,1,3,4])
X3 = np.array([2,3,1,4])
X4 = np.array([10,0,1,2])
我试图用 CVXPY 解决它,但我遇到了布尔变量的问题x = cp.Variable(1, boolean=True)
:
import numpy
import numpy as np
import cvxpy as cp
X1 = np.array([3,10,20,10])
X2 = np.array([5,1,3,4])
X3 = np.array([2,3,1,4])
X4 = np.array([10,0,1,2])
M = 100
x = cp.Variable(1, boolean=True)
Y1 = cp.Parameter(4)
Y2 = cp.Parameter(4)
a = cp.Parameter(1)
b = cp.Parameter(1)
c = cp.Parameter(1)
d = cp.Parameter(1)
delta = cp.Variable(1)
constraints = [Y1 <= X1 - a,
Y1 <= X2 - b,
Y1 >= X1 - a - M*delta,
Y1 >= X2 - b - M*(1-delta),
Y2 <= X3 - c,
Y2 <= X4 - d,
Y2 >= X3 - c - M*delta,
Y2 >= X4 - d - M*(1-delta),
0 <= a, a <= 10,
0 <= b, b <= 5,
0 <= c, c <= 5,
0 <= d, d <= 10,
delta == x]
obj = cp.Minimize(cp.sum_squares(Y1-Y2))
prob = cp.Problem(obj, constraints)
print(prob.solve())
解决方案
在cvxpy
中,参数是您可以为其设置的值。X1
在您的问题中,除了to之外的所有符号基本上X4
都是variables。cp.Parameter
因此,对to进行全局替换cp.Variable
将起作用。
然后,我发现结果是
$ python3 cvxtest.py
69.99998471073722
推荐阅读
- javascript - Chrome 应用和扩展程序交互:Chrome 应用中没有加载 JavaScript 文件
- reactjs - 使用 React 钩子处理输入
- python - 如何将这些调用组合到 print()?
- google-apps-script - oauth2.0 中授予 Web 应用程序访问用户的谷歌电子表格所需的最小范围是多少?
- css - Sass 列表分隔符和编写干净的 @mixin
- javascript - 从代码后面提交 Google 表单响应(问题:日期)
- jquery - 我对 timepicker 的关注有疑问
- c# - 在数组 C# 中添加数组
- python - 从列嵌套列表创建虚拟对象
- r - grep 文本并放入数据框中