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是徒劳的
解决方案
这是一个优化问题。但是,您提出的内容有两个明显的问题:
- 评估函数没有限制或属性;
- 您只接受 10^19 种可能性的最佳解决方案。
优化领域提供了许多可能性,其中大多数是爬山搜索和突然运动的一种或另一种变化(以帮助突破不是全局解决方案的局部最大值)。所有这些都取决于评估函数对其输入的依赖性的某种连续性或可预测性。
没有这种连续性,就没有通往唯一最佳解决方案的捷径。
如果您确实有一些可预测性,那么您需要阅读各种解决方法。从 Newton-Raphson 开始,然后转到梯度下降,然后继续其他主题,具体取决于您的函数结构。
推荐阅读
- c# - 如何使用 WPF 检测图像中的人脸?
- python - 在 Visual Studio Code Remote 中显示重定向 - WSL2 上的容器?
- r - 在R中字符串的每个第k个位置插入字符
- java - 更好的方式来表达“if false return false”构造
- flutter - 将 Portrait 更改为 Landsacpe 时丢失 FloatingActionButton 状态
- python - Tensorflow的对象检测api不起作用
- php - Netbeans 中是否有创建方法的快捷方式?
- c# - 是否可以遍历 WPF 中的控制器名称?
- go - 打印/访问超出范围的切片索引时不要惊慌
- php - 如何使用array_map()仅获取某个键=>值对