我有一个处理逻辑,它有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 步产生的最佳组合开始,围绕该组合进行更细致的研究以找到最佳组合
但我担心最好的组合可能隐藏在step 1无法感知的地方,所以step 2是徒劳的
最佳答案
这是一个优化问题。但是,您提出的问题有两个明显的问题:
- 评估函数没有任何限制或属性;
- 您只接受 10^19 种可能性中的最佳解决方案。
优化领域提供了许多可能性,其中大部分是爬山搜索和侵入式移动的一种或另一种变体(以帮助突破不是全局解决方案的局部最大值)。所有这些都取决于评估函数对其输入的依赖性中的某种连续性或可预测性。
没有这种连续性,就没有通往唯一最优解的捷径。
如果您确实具有一定的可预测性,那么您可以阅读各种解决方法。从 Newton-Raphson 开始,转到梯度下降,然后继续其他主题,具体取决于您的函数结构。
关于algorithm - 如何从非常大的集合中找到最佳参数组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57574951/