optimization - 使用 CVXOPT 的最小交易规模 - 摆脱可忽略不计的权重
问题描述
我已经使用 CVXOPT 来运行优化问题。虽然我喜欢结果,但我试图从最佳解决方案中去除可忽略的权重,但我也希望 w=1 的总和。
如何限制优化器允许的最小交易规模?其中对于最小尺寸不打算使用最小重量,即如果 x <> 0 且 x < y 则 x = 0 否则 x = x
或者,如果 w < x 有没有一种方法可以得到一个不考虑(并迭代优化)的输出?
解决方案
小分配有两个不同的原因。
(1) 每个求解器都使用公差。这甚至可以允许微小的负权重。内点求解器通常会提供分配不是 0 而是非常小的数量的解决方案。那是因为算法的性质(他们希望留在可行区域的内部)。通常,主动集算法比内点或一阶算法提供“更好”的解决方案(带有实零)。一般来说,公差很小,可以在求解后通过四舍五入来修复。一些高级求解器可能会在最后进行交叉以清理解决方案(技术术语:找到基本解决方案而不是内部解决方案)。这是小事,可能不是您要抱怨的。
(2) QP 解决方案经常使用很多仪器,带有很多小权重。我们可以在建模级别通过说:工具 i 可以是 0 或大于下限(比如 5%)来防止这种情况。这可以用所谓的半连续变量(或二元变量)建模。该模型变成了MIQP模型(我认为 CVXOPT 没有 MIQP 求解器,但 Cplex 和 Gurobi 等求解器包含 MIQP 功能)。另一种方法是明确建模交易成本,这也将禁止非常小的分配。此外,LAD(最小绝对偏差)模型往往比二次模型产生更少的小分配。
注意:此处显示了缺少 MIQP 功能时的启发式方法。
推荐阅读
- python - 是否有直接在python中获取剩余负数的命令?
- javascript - 具有多种语言条目的 javascript 对象的本地化
- google-app-engine - 如何使用 Google App Engine 上传 multipart/form 文件?
- java - 'getPath()方法'是否替换了java中的'Input/OutputStream?
- node.js - CastError:转换为 ObjectId 失败
- import - 使用 PyPi 创建了第一个包。下载成功但无法导入
- javascript - 在 NodeJS 中从 Uint8Array 转换为 fs.CreateReadStream
- python - 用其他列表替换一个列表中的值
- react-native - React 原生切割 egde
- ffmpeg - 无法为“输出”找到合适的输出格式