我正在做一个项目,我需要通过几个变量来最小化函数,比如 func(input_parameters, variable_parameters) -> min(variable_parameters)
。
我使用来自 SciPy 的优化函数, 所以最小化过程是一个灰色框:我可以在 GitHub 上看到代码并阅读有关使用的算法的信息,但我认为这没关系,并且旨在测试我自己的项目。 不过,特定的图书馆在这个问题上应该无关紧要。
目前我使用的方法很少:
- 创建简单示例并手动查找全局/局部最小值,创建执行优化并将其解决方案与正确解决方案进行比较的测试
- 如果方法需要梯度,将分析计算的梯度与其在测试中的数值近似值进行比较
- 对于基于
SciPy
提供的算法构建的迭代算法,检查函数值序列在测试中是否单调非递增
有没有关于数学优化程序测试的书或文章?
P. S. 我不是在谈论 Test functions for optimization ,我问的是用于测试优化过程以更快找到错误的方法。
最佳答案
我找到了 hypothesis库对于在开发中测试优化算法非常有用。
您可以将其设置为根据某些规范生成随机测试用例(函数、线性程序等)。这个想法是您将这些传递给您的算法并测试已知的不变量。例如,您可以让它在您的算法中抛出随机问题或子问题并检查(例如):
- 梯度下降法产生一系列非递增目标
- 本地搜索找到没有更好邻居的解决方案
- 启发式方法保持可行性
有一个有用的 PyCon 演讲 here解释基于属性的测试的想法。它更侧重于测试 API 而不是算法,但我认为想法会转移。我发现这种方法在我编写新算法时可以很好地发现意外行为的情况。
关于unit-testing - 如何为数学优化程序编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47420792/