首页 > 解决方案 > 如何从非常大的集合中找到最佳的参数组合?

问题描述

我有一个处理逻辑,它有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是徒劳的

标签: algorithm

解决方案


这是一个优化问题。但是,您提出的内容有两个明显的问题:

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

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

没有这种连续性,就没有通往唯一最佳解决方案的捷径。

如果您确实有一些可预测性,那么您需要阅读各种解决方法。从 Newton-Raphson 开始,然后转到梯度下降,然后继续其他主题,具体取决于您的函数结构。


推荐阅读