使用 CVXOPT 的最小交易规模 - 摆脱可忽略的权重
Min trade size using CVXOPT - get rid of negligible weights
我已经使用 CVXOPT 运行 优化问题。
虽然我喜欢结果,但我试图从最佳解决方案中摆脱可忽略不计的权重,但我也希望得到 w=1.
的总和
我如何限制允许的最小交易规模的优化器?最小尺寸不打算最小重量的地方
即如果 x <> 0 且 x < y 则 x = 0 否则 x = x
或者如果 w < x ,是否有一种输出不会考虑(并迭代优化)的方法?
小分配有两个不同的原因。
(1) 每个求解器都使用公差。这甚至可以允许微小的负权重。内点求解器通常提供分配不是 0 而是非常小的数字的解决方案。那是因为算法的性质(他们想留在可行区域的内部)。通常,活动集算法比内点或一阶算法给出 "nicer" 解(具有实零)。一般来说,公差很小,可以在求解后通过四舍五入来修复。一些高级求解器可能会在最后进行交叉以清理解决方案(技术术语:找到 基本解决方案 而不是内部解决方案)。这是小事,可能不是您要抱怨的。
(2) QP 解决方案通常使用很多仪器,有很多小权重。我们可以在建模级别通过以下语句来防止这种情况:工具 i 可以为 0 或大于下限(比如 5%)。这可以用所谓的 半连续变量 (或二元变量)建模。该模型变成了 MIQP 模型(我认为 CVXOPT 没有 MIQP 求解器,但像 Cplex 和 Gurobi 这样的求解器包含 MIQP 功能)。另一种方法是显式建模 交易成本 ,这也将禁止非常小的分配。此外,LAD(最小绝对偏差)模型倾向于生成比二次模型更少的小分配。
注意:显示了缺少 MIQP 功能时的启发式方法 here。
我已经使用 CVXOPT 运行 优化问题。 虽然我喜欢结果,但我试图从最佳解决方案中摆脱可忽略不计的权重,但我也希望得到 w=1.
的总和我如何限制允许的最小交易规模的优化器?最小尺寸不打算最小重量的地方 即如果 x <> 0 且 x < y 则 x = 0 否则 x = x
或者如果 w < x ,是否有一种输出不会考虑(并迭代优化)的方法?
小分配有两个不同的原因。
(1) 每个求解器都使用公差。这甚至可以允许微小的负权重。内点求解器通常提供分配不是 0 而是非常小的数字的解决方案。那是因为算法的性质(他们想留在可行区域的内部)。通常,活动集算法比内点或一阶算法给出 "nicer" 解(具有实零)。一般来说,公差很小,可以在求解后通过四舍五入来修复。一些高级求解器可能会在最后进行交叉以清理解决方案(技术术语:找到 基本解决方案 而不是内部解决方案)。这是小事,可能不是您要抱怨的。
(2) QP 解决方案通常使用很多仪器,有很多小权重。我们可以在建模级别通过以下语句来防止这种情况:工具 i 可以为 0 或大于下限(比如 5%)。这可以用所谓的 半连续变量 (或二元变量)建模。该模型变成了 MIQP 模型(我认为 CVXOPT 没有 MIQP 求解器,但像 Cplex 和 Gurobi 这样的求解器包含 MIQP 功能)。另一种方法是显式建模 交易成本 ,这也将禁止非常小的分配。此外,LAD(最小绝对偏差)模型倾向于生成比二次模型更少的小分配。
注意:显示了缺少 MIQP 功能时的启发式方法 here。