optimization - 如何在要最小化的 Numpy 产品中使用 CVX 变量?
问题描述
我正在尝试优化配置 X(布尔值),以使配置上的总价格:base_price + discount 最小化,但问题公式给出了 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...) 找到最佳配置,从而使折扣最小化,但事实并非如此。知道可能是什么原因造成的吗?
解决方案
假设目标函数中不等式的评估被假设为 的索引price
,您可以将函数重写为
cp.Minimize(base_price + price@(1-(price_rules_B - price_rules_A@x))
然后将不等式成立的价格元素相加。
推荐阅读
- ionic-framework - 如何将我的语音识别文本传递给我的
在离子 - azure - Azure 日志查询显示 Null 值
- python - Python & Tkinter:从 tkinter scrolledtext 解析文本并获取按钮以运行开始解析过程的定义
- python - 我如何在 python kivy 中创建一个表
- android - 如何在 viewModel 中永久删除 liveData
- php - 通过 htaccess 重写漂亮或 SEO 友好的 URL
- android - 使用 viewPager 滚动时隐藏工具栏并保持 tapLaout
- windows - 如何在本地 Apache 上运行 Scala 项目 - Windows
- javascript - NotifyJS 在成功时返回代码而不是警报
- deep-learning - 来自 SSD 的预测图像 ID 和框