2

在我的程序中,我有一个循环,它计算整数值并将其一个接一个地放入一个数组列表中。计算的整数值越高越好。现在我想继续计算,直到似乎不会有更好的整数值。也就是说,当计算的整数在一个范围内减小时,或者它不再改变。我正在考虑,将当前计算值与最后一个 x 进行比较(我需要关注多少值?)如果它总是小于或等于我停止计算的最后一个 x 元素中的任何一个。但是使用这种策略,我不能保证这是全局最大值,而只是局部的....

这样做的好策略是什么?

编辑: 我知道不能保证找到全局最大值。但我对函数的行为了解一点:我已经计算的值越多,出现全局最大值的可能性就越小。

4

2 回答 2

1

好吧,您似乎需要假设一些启发式方法来评估何时停止。由于您不能说“我现在停止,因为我找到了我的最大值”,您可以按照以下方式之一继续:

  • 保持当前最大值并将下一个值与当前值进行比较,如果较小,则增加计数器。如果计数器达到 X (您的参数),您将停止
  • 使用概率分布函数,在 0 处概率为 1,在 +inf 处概率为 0。这可以根据您的喜好定制。然后,您只需增加所见值的数量或较小值的计数器,并使用该计数器估计使用该函数的概率。如果 prob < X (你的参数再次)你停止。

希望这能给你一些想法

于 2013-01-24T12:38:56.987 回答
1

水库取样。将值存储在一个较小的数组A中,该数组表示来自计算的整数值的随机 x 个样本。现在对于一系列计算值,您可以将每个值与数组A中的值进行比较,如果发现下降趋势,您可以停止。这将保证您处理的是全局最大值而不是本地最大值。

于 2013-01-24T15:56:21.260 回答