如何在要最小化的 Numpy 产品中使用 CVX 变量?

How can I use a CVX variable in a Numpy product that is to be Minimized?

我正在尝试优化配置 X(布尔值),以使配置的总价:base_price + 折扣最小化,但问题公式给出了 Matmul 错误,因为 x 是cvxpy 变量,因此不符合 Numpy 形状,即使它被定义为正确的长度。

n = len(Configuration)
x = cp.Variable(n, boolean=True)
problem = cp.Problem(cp.Minimize(base_price + price@(price_rules_A@x <= price_rules_B)), [
        config_rules_A@x <= config_rules_B, 
        config_rules_2A@x == config_rules_2B
    ])
# where price@(price_rules_A@x <= price_rules_B) is the total discount 
# and price, price_rules_A and price_rules_B are numpy arrays 

我得到的错误是

ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

我希望它能找到 x (0010110...) 的最佳配置,从而使折扣最小化,但事实并非如此。知道是什么原因造成的吗?

假设 objective 函数中不等式的求值假设作为 price 的索引,您可以将函数重写为

cp.Minimize(base_price + price@(1-(price_rules_B - price_rules_A@x))

然后将价格中不等式为真的元素相加。