【发布时间】:2011-12-13 11:13:49
【问题描述】:
我有以下问题,不知道如何在 R 中编码:
具有两列的数据框df:第一列是一组有序的数字df$ind,第二列是一组高度随机的数字df$ret。
我想在df$ret 中找到两个不重叠的范围,并优化第一个范围内的数字之和必须为正数且第二个范围内的数字之和为负数的条件。之后,我想拥有各自范围的 2x2 df$ind-values。
我想到了两种可能性(我不知道如何在 R 中对其中任何一种进行编程):
- Monte Carlo 选择 2x2 位置,计算总和并与迄今为止的最佳解决方案进行比较。
- 尝试所有可能的范围并采取最佳解决方案(考虑到值的数量,这似乎在计算上是可行的)。
您能否给我一些提示,如何在 R 中实现这一点,或者是否有用于此类优化的包(R 中似乎有一个包用于所有内容;-)
更新:
您将有 4 个值:i、k、m、n:df$ret[i:k] 和 df$ret[m:n] 与 i k m n。
优化是(伪代码):
最大:abs(sum(范围(i:k)))+abs(sum(范围(m:n)))
条件:
sum(range(i:k)) > 0 和 sum(range(m:n))
【问题讨论】:
-
优化是您可以比较数字并选择最高或最低的。假设我们找到两个解决方案,即两个范围对,满足您的条件。不清楚你更喜欢哪一个。
-
vonjd,好的,现在很清楚了。如果您更新问题会很棒,我认为这将有助于获得答案。
-
观察到你可能假设 m=k+1 是一个很好的简化。如果不是,考虑元素 k+1 到 m-1 的总和:如果总和为正,则将这些元素包括在第一个范围内;如果是否定的,则将它们包含在第二个中;如果为零,则将它们包含在其中之一中。目标永远不会减少,QED。话虽如此,我投票结束这个问题,因为虽然它很有趣,但它在 CV 上是题外话。
-
@whuber:好主意!我想知道为什么在我的测试中这两个范围总是紧挨着的......很好地提醒我在编码之前总是三思而后行。
-
@Aaron 当您根据数据的累积总和重新提出问题时,像我所做的那样的观察变得显而易见。 (你试图找到一个上升然后下降,并且你正在优化总上升加上总下降。)这(我希望)清楚地说明了如何加速算法。
标签: r optimization