dev*_*ium 6 language-agnostic math optimization numerical-methods
我有一个功能,
P(x0,x1,...,xn)
它将100个整数作为输入,并将整数作为输出.P是一个很慢的评估函数(它的范围可以从30秒到几分钟).
我需要知道哪些点的值将最大化来自P的屈服值.
我可以用什么技术来实现这个目标?我知道人们通常会使用遗传算法,但我担心用它们计算它会花费很长时间,因为即使人口很少而且几代人(比如人口= 50,世代= 50),P就是这样计算它需要40多个小时.
有没有更便宜的方法呢?也许是一个迭代过程?我不需要它是真正的最佳,但我没有任何关于它如何表现的想法(我已经尝试过线性/二次/指数但它似乎没有产生任何好的值.我知道P可以返回价值至少比我得到的好5到10倍.
它应该是更容易实现的东西(即,我必须自己实现它).
谢谢
编辑:P是一个随机过程.
作为此类问题的一线算法,我建议使用模拟退火。SA 是一个很好的首选,因为您可以清楚地控制起点和运行时间。
如果您了解 100 维空间的结构,则可以使用 SA 选择一个好的起点,这会对结果的质量产生重大影响。此外,通过 SA,您可以控制“冷却速率”,这会影响运行时间和结果质量 - 自然是相反的方向。我通常首先以相对较快的冷却速率运行,以寻找良好的起始向量,然后在后续运行中减慢冷却速率以改善结果。一种可以自动化的元 SA 技术。
我已经成功地使用 SA 来最大化过去用于建模中子质子相互作用的非常高维函数。
另外,如果可能的话,我会寻求降维 P() 。对于您的特定问题,是否需要全部 100 个变量?如果您可以修复其中的 1/2,您将加快任何优化器的速度并最终获得更好的结果。
(而且 SA 很容易实现。)