我正在尝试使用 CVXPY 解决整数线性规划问题,但我在一些语法上苦苦挣扎,并且无法找出一种方法来强制执行我有兴趣解决的约束取值为 0 或1. 我认为将它设置为布尔值是 Variable 对象中的解决方案,但由于某种原因我没有得到我想要的
我安装了 cvxpy 库并尝试使用一个小示例运行它来解决它。我的问题的输入是一个大小为 (I, J) 的二进制矩阵 M,它的值只有 (0 或 1),而且我想求解的变量是一个布尔值(或再次二进制向量)向量 P尺寸 J,
目标函数是最小化我的大小为 J 的变量向量的值的总和(即最小化该向量内 1 的数量)
使得我的矩阵的每一行的总和 M 乘以我的变量向量 P 大于或等于 1。即,对于所有 i,Mij*Pj >= 1 的总和(超过 j)。
以最小化向量 P 的总和为目标。
我编写了以下代码来做到这一点,但是我正在努力寻找我做错了什么。
import numpy as np
import cvxpy as cp
M = np.array([[1,0,0,0], [1,0,0,0], [0,1,1,0], [1,0,0,0], [0,0,1,1], [0,0,1,0]])
variable= cp.Variable(M.shape[1], value = 1, boolean=True)
one_vec = np.ones(M.shape[1])
obj = cp.Minimize(sum(np.dot(variable, one_vec)))
constraints = []
for i in range(len(M)):
constraints.append(np.sum(np.dot(M[i], variable)) >= 1) …Run Code Online (Sandbox Code Playgroud)