Unit testing 如何编写数学优化程序的测试?

Unit testing 如何编写数学优化程序的测试?,unit-testing,testing,optimization,mathematical-optimization,Unit Testing,Testing,Optimization,Mathematical Optimization,我正在做一个项目,我需要通过几个变量最小化函数,比如func(输入参数,变量参数)->min(变量参数) 我使用来自的优化函数,所以最小化过程是一个灰色的盒子:我可以看到上面的代码并阅读使用的算法,但我想这是可以的,目的是测试我自己的项目。 不过,在这个问题上,特定的库并不重要 目前,我使用了几种方法: 创建简单的示例,手动查找全局/局部极小值,创建执行优化的测试,并将其解决方案与正确的解决方案进行比较 若方法需要梯度,则将分析计算的梯度与其在试验中的数值近似值进行比较 对于基于SciPy提供

我正在做一个项目,我需要通过几个变量最小化函数,比如
func(输入参数,变量参数)->min(变量参数)

我使用来自的优化函数,所以最小化过程是一个灰色的盒子:我可以看到上面的代码并阅读使用的算法,但我想这是可以的,目的是测试我自己的项目。 不过,在这个问题上,特定的库并不重要

目前,我使用了几种方法:

  • 创建简单的示例,手动查找全局/局部极小值,创建执行优化的测试,并将其解决方案与正确的解决方案进行比较
  • 若方法需要梯度,则将分析计算的梯度与其在试验中的数值近似值进行比较
  • 对于基于SciPy提供的迭代算法,请检查函数值序列在测试中是否单调不递增
有关于数学优化程序测试的书或文章吗

另外,我不是在说,我是在问用于测试优化过程以更快地发现bug的方法。

我发现该库对于测试开发中的优化算法非常有用

您可以将其设置为根据某些规范生成随机测试用例(函数、线性程序等)。这样做的目的是将它们传递给算法并测试已知的不变量。例如,您可以让它在您的算法中抛出随机问题或子问题,并检查(例如):

  • 梯度下降法产生一系列非递增目标
  • 本地搜索找到了一个没有更好邻居的解决方案
  • 启发式保持可行性

有一个有用的PyCon演讲,解释了基于属性的测试的思想。它更多地关注于测试API,而不是算法,但我认为思想会转移。在我编写新算法时,我发现这种方法在发现意外行为方面做得非常好。

这是一个非常好的问题。多年来,我一直在努力解决这个问题;你所描述的和我过去所做的差不多,我很想听听其他的建议。