如何在要最小化的 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))
然后将价格中不等式为真的元素相加。
我正在尝试优化配置 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))
然后将价格中不等式为真的元素相加。