关于函数最小化这一常见的应用数学问题,有大量的信息。。软件包、数百本书、研究等。但对于要采样的函数非常昂贵的情况,我仍然没有找到一个好的参考。
我的具体问题是计算机科学的一个应用问题,我有一个模拟程序,其中的数据库有十几个参数,这些参数会影响体素大小、缓存分布、树分支等。这些数字参数不影响算法的正确性,只影响运行时。我想最小化运行时。
因此,我可以将这个问题视为黑盒最小化。我的成本函数是运行时,我想将其最小化。我没有导数,我可以把它当作一个黑匣子。我有一个不错的起点,甚至每个参数的粗略尺度。在时间测量中,参数和甚至噪声之间可能存在相互作用和相关性(幸运的是很小)
那么,为什么不使用任何软件包,将其放入标准的最小二乘最小化工具中呢?因为我的计时样本每次运行需要8小时。。所以每个数据点都很宝贵,我发现的算法往往忽略了这一成本。经典的Levenberg-Marquand程序免费“花费”样本,甚至不记得每个样本的完整历史(而是更新一些平均统计数据)。
所以我的问题是寻找一个指向迭代函数最小化方法的指针,这些方法使用函数的最小样本数。理想情况下,我可以传入一组已采样的位置和每个位置的值,算法将输出一个新位置以获取下一个样本(如果算法认为值得测试,则可能是探索性样本,而不是对最佳最小位置的猜测)
我可能需要数百个样本,但只有数百个,大多数多维最小化方法预计需要数百万个样本。
目前,我每天都在使用自己的特别发明手动进行最小化。我已经对我的15参数模型进行了40个现有的定时采样。我将所有现有样本拟合为一个独立的二次函数之和(假设每个参数都是独立的),然后查看完整二次矩阵的N*(N-1)/2=100个可能的相关系数。我发现当允许从0.0、,对我的数据进行最佳二次拟合,并允许这几个条目进行最佳最小二乘拟合。我还为具有较小(更快)值的位置赋予了更高的拟合权重(有点特别,但有助于排除远离最小值的行为)。一旦我有了这个矩阵,我会手动查看每个主要特征值方向的图形和眼球位置,这些位置似乎需要更好的采样。我将所有这些猜测重新组合到一个新的样本位置。每天,我都会生成4个新的点,设置一次跑步来在第二天测试它们,并在计算完成后再次重复整个过程。周末分批得分10分!
谢谢你的建议!这个问题可能没有一个完美的“最佳”答案,但我坚持认为,在评估成本如此巨大的情况下,什么策略最有效。