如何从很大的集合中找到最佳的参数组合?

时间:2019-08-20 13:35:26

标签: algorithm

我有一个具有 11个参数的处理逻辑(例如,从参数 A 到参数 K )和这些参数的不同组合会导致不同的结果。

Processing Logic Example:

if x > A:
    x = B
else:
    x = C

y = math.sin(2x*x+1.1416)-D

# other logic involving parameter E,F,G,H,I,J,K

return outcome

以下是一些可能的参数值示例(其他类似,离散):

A ∈ [0.01, 0.02, 0.03, ..., 0.2]
E ∈ [1, 2, 3, 4, ..., 200]

我想找到可以带来最佳结果的这些参数的组合。

但是,我面临的问题是总共有 10 ^ 19种可能的组合,而每个组合每个CPU核心需要700毫秒的处理时间。显然,即使我拥有大型计算集群,处理整个组合的时间也是无法接受的。

任何人都可以就什么是正确的方法来解决此问题提出建议吗?


这是我的一些想法:

步骤1 。最小化每个参数的步长间隔,以将总处理时间减少到可接受的范围,例如:

A ∈ [0.01, 0.05, 0.09, ..., 0.2]
E ∈ [1, 5, 10, 15, ..., 200]

第2步。从步骤 中得出的最佳组合开始,围绕该组合进行更细致的研究,以找到最佳组合

但是,恐怕最佳组合可能隐藏在步骤1 无法感知的地方,因此步骤2 是徒劳的

2 个答案:

答案 0 :(得分:2)

这是一个优化问题。但是,您在摆姿势方面有两个明显的问题:

  • 评估功能没有任何限制或属性;
  • 您只接受10 ^ 19种可能性的最佳解决方案。

优化领域提供了许多可能性,其中大多数是爬山搜索和冲动运动的一种或另一种(以帮助突破不是全局解的局部最大值)。所有这些都取决于评估功能依赖于其输入的某种连续性或可预测性。

没有这种连续性,唯一的最佳解决方案就没有更短的路径。

如果您确实具有一定的可预测性,那么您需要阅读各种解决方案方法。从牛顿-拉夫森(Newton-Raphson)开始,转到Gradient Descent(梯度下降),然后继续讨论其他主题,具体取决于您的函数的结构。

答案 1 :(得分:0)

您是否考虑过纯粹的数学方法,即尝试查找局部/全局极值,还是基于每个操作函数是否单调?

对于微分/积分有相当不错的数值方法,甚至可以相对通用地使用。

因此换句话说,要限制范围,而不是计算每个选项-取决于您要记住的操作的一般特征。