首页 > 解决方案 > 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])

MIQP 写为: 在此处输入图像描述

我试图用 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())

标签: pythonoptimization

解决方案


cvxpy中,参数是您可以为其设置的值。X1在您的问题中,除了to之外的所有符号基本上X4都是variablescp.Parameter因此,对to进行全局替换cp.Variable将起作用。

然后,我发现结果是

$ python3 cvxtest.py
69.99998471073722

推荐阅读