我有一个具有 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 是徒劳的
答案 0 :(得分:2)
这是一个优化问题。但是,您在摆姿势方面有两个明显的问题:
优化领域提供了许多可能性,其中大多数是爬山搜索和冲动运动的一种或另一种(以帮助突破不是全局解的局部最大值)。所有这些都取决于评估功能依赖于其输入的某种连续性或可预测性。
没有这种连续性,唯一的最佳解决方案就没有更短的路径。
如果您确实具有一定的可预测性,那么您需要阅读各种解决方案方法。从牛顿-拉夫森(Newton-Raphson)开始,转到Gradient Descent(梯度下降),然后继续讨论其他主题,具体取决于您的函数的结构。
答案 1 :(得分:0)
您是否考虑过纯粹的数学方法,即尝试查找局部/全局极值,还是基于每个操作函数是否单调?
对于微分/积分有相当不错的数值方法,甚至可以相对通用地使用。
因此换句话说,要限制范围,而不是计算每个选项-取决于您要记住的操作的一般特征。