Unit testing 如何编写数学优化程序的测试?
我正在做一个项目,我需要通过几个变量最小化函数,比如Unit testing 如何编写数学优化程序的测试?,unit-testing,testing,optimization,mathematical-optimization,Unit Testing,Testing,Optimization,Mathematical Optimization,我正在做一个项目,我需要通过几个变量最小化函数,比如func(输入参数,变量参数)->min(变量参数) 我使用来自的优化函数,所以最小化过程是一个灰色的盒子:我可以看到上面的代码并阅读使用的算法,但我想这是可以的,目的是测试我自己的项目。 不过,在这个问题上,特定的库并不重要 目前,我使用了几种方法: 创建简单的示例,手动查找全局/局部极小值,创建执行优化的测试,并将其解决方案与正确的解决方案进行比较 若方法需要梯度,则将分析计算的梯度与其在试验中的数值近似值进行比较 对于基于SciPy提供
func(输入参数,变量参数)->min(变量参数)
我使用来自的优化函数,所以最小化过程是一个灰色的盒子:我可以看到上面的代码并阅读使用的算法,但我想这是可以的,目的是测试我自己的项目。
不过,在这个问题上,特定的库并不重要
目前,我使用了几种方法:
- 创建简单的示例,手动查找全局/局部极小值,创建执行优化的测试,并将其解决方案与正确的解决方案进行比较
- 若方法需要梯度,则将分析计算的梯度与其在试验中的数值近似值进行比较
- 对于基于SciPy提供的迭代算法,请检查函数值序列在测试中是否单调不递增
- 梯度下降法产生一系列非递增目标
- 本地搜索找到了一个没有更好邻居的解决方案
- 启发式保持可行性
有一个有用的PyCon演讲,解释了基于属性的测试的思想。它更多地关注于测试API,而不是算法,但我认为思想会转移。在我编写新算法时,我发现这种方法在发现意外行为方面做得非常好。这是一个非常好的问题。多年来,我一直在努力解决这个问题;你所描述的和我过去所做的差不多,我很想听听其他的建议。