我遇到了几个优化问题,涉及识别向量中的一个或多个索引以最大化或最小化成本。有没有办法在线性规划中识别这些索引?我对 、 、 或任何其他 API 中的解决方案持mathprog
开放CVXR
态度CVXPY
。
例如,对于变化点问题(找到函数发生变化的索引)需要确定一个索引,对旅行商问题(在累积距离 Y 之前访问城市 X)施加距离约束。
举个简单的例子,假设我们想要识别向量中任一侧的和最相等(它们的差最小)的位置。在此示例中,解决方案是索引 5:
x = c(1, 3, 6, 4, 7, 9, 6, 2, 3)
尝试 1
使用CVXR
,我尝试声明split_index
并将其用作索引(例如,x[1:split]
):
library(CVXR)
split_index = Variable(1, integer = TRUE)
objective = Minimize(abs(sum(x[1:split_index]) - sum(x[(split_index+1):length(x)])))
result = solve(objective)
它1:split_index
与NA/NaN argument
.
尝试 2
声明一个显式索引向量 ( indices
) 并进行元素逻辑测试是否split_index <= indices
. 然后将该二进制向量逐元素乘以x
选择分割的一侧或另一侧:
indices = seq_along(x)
split_index = Variable(1, integer = TRUE)
is_first = split_index <= indices
objective = Minimize(abs(sum(x * is_first) - sum(x * !is_first)))
result = solve(objective)
它x * is_first
与non-numeric argument to binary operator
. 我怀疑这个错误的出现是因为is_first
现在是一个IneqConstraint
对象。