Algorithm 如何从一个非常大的集合中找到参数的最佳组合?

Algorithm 如何从一个非常大的集合中找到参数的最佳组合?,algorithm,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 以下是一些可能的参数值示例(其他类似,离散): 我想找到这些参数的组合,以获得最佳

我有一个处理逻辑,它有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
以下是一些可能的参数值示例(其他类似,离散):

我想找到这些参数的组合,以获得最佳结果

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

有人能就处理这个问题的正确方法提供一些建议吗


以下是我的一些想法:

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

A ∈ [0.01, 0.05, 0.09, ..., 0.2]
E ∈ [1, 5, 10, 15, ..., 200]
步骤2。从步骤1得出的最佳组合开始,围绕该组合进行更细致的研究,以找到最佳组合


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

您是否考虑过纯粹的数学方法,即尝试寻找局部/全局极值,或者基于函数是否每次操作都是单调的

导数/积分有相当不错的数值方法,甚至可以以相对通用的方式使用

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

这是一个优化问题。然而,在你提出的问题中有两个截然不同的问题:

  • 评估函数没有任何限制或属性
  • 您只接受10^19种可能性中的最佳解决方案
优化领域提供了许多可能性,其中大多数是爬山搜索和侵入运动的一种或另一种变体(以帮助突破不是全局解的局部最大值)。所有这些都取决于评价函数对其输入依赖的某种连续性或可预测性

没有这种连续性,就不会有通向唯一最优解的更短路径


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

是否使用Python?编译语言可能要快得多。恕我直言@MarkSetchell,我部分同意不依赖缓慢解释的实现语言的相对优势(Oto本身既没有明确提到,也没有在相当抽象的问题中暗示),使用任何类型的编译语言都无法避免解决表述不当的问题(本身不完整或定义了某些缺失的初始/边界/行为属性)或确定性问题的任何尝试。希望您不介意提及无偏见外部观察者的这些观察结果。请充分尊重您的见解,你忘了提到第三个假设:这样一个11维系统具有非进化性质(即时间上的静态空间)。按照我的理解,任何这样的进化都将是问题中的一个额外变量,超出OP提出的范围。嗯,不完全是@Prune。一个扩展维度(添加时间)不解决任何“隐藏”维度(较少的系统)的问题,这些维度主要是确定性的。如果系统地(按照OP的明确要求)准确,O/P在上面概述的分步方法不会说任何可能导致您声称无需“超出OP提出的范围”的辩护的话。希望我们都能同意,真正的数学是证明事实的美丽领域,而不是发表意见的空间。你的建议有一些工程技巧,但它却制造了一种完全解决方案的假象
A ∈ [0.01, 0.05, 0.09, ..., 0.2]
E ∈ [1, 5, 10, 15, ..., 200]