单位测试近似算法

我正在使用一些开源的近似算法库,用于使用一些流行的python包作为基础的图形和网络.主要目标是在图形和网络上包含NP-Complete问题的最新近似算法.原因是1)我没有看到一个很好的(现代的)综合包,涵盖了这一点,2)它将是一个很好的教学工具,用于学习关于NP-Hard优化问题的近似算法.

在建立这个图书馆时,我正在使用单位测试来进行理智检查(像任何正确的开发者).我对我的单元测试有些谨慎,因为它们本质上是近似算法可能不会返回正确的解决方案.目前我正在手工解决一些小事件,然后确保返回的结果与之匹配,但这是不可取的,也不是实现意义上的扩展.

单位测试近似算法的最佳方法是什么?生成随机实例并确保返回的结果小于算法保证的边界?这似乎有误报(测试只是幸运的那个时间,不保证所有的实例都在下面).

您需要在这里分开两个问题.您的近似算法的质量和这些算法的实现的正确性.

测试近似算法的质量通常不会适用于软件开发中使用的单元测试方法.例如,您将需要生成代表真实大小问题的随机问题.您可能需要做数学工作来获得一些上限/下限来判断您的算法的质量不可解决的大型实例.或者使用已知或最有效解决方案的问题测试集,并比较您的结果.但在任何情况下,单元测试不会帮助您提高近似算法的质量.这就是您的领域知识在优化和数学中的帮助.

实施的正确性在于单元测试将是非常有用的.您可以在这里使用玩具大小的问题,并与您的代码生成的内容比较已知的结果(手动解决,或通过仔细的逐步调试验证).小问题不仅足够,而且在这里也是可取的,因此测试运行速度快,可以在开发周期中运行多次.这些类型的测试确保整体算法达到正确的结果.由于您将大部分代码测试为黑匣子,所以在单元测试和集成测试之间.但是我发现这些类型的测试在优化域中非常有用.我建议为这种类型的测试做一件事是通过固定的种子去除随机数生成器中的所有随机性.这些测试应该始终以确定性的方式运行,并在100%的时间内给出完全相同的结果.
我还建议您的算法的较低级别的模块进行单元测试.隔离在图上分配权重的方法,并检查是否分配了正确的权重.隔离您的目标函数值计算功能和单元测试.你得到我的观点

削减这两个切片的另一个问题是性能.您不能用小玩具问题可靠地测试性能.同时也意识到一个可以快速降低工作算法性能的变化是非常可取的.一旦运行了您的算法,您就可以创建更大的测试问题,您可以在其中测量性能并将其自动化作为您的性能/集成测试.您可以不频繁运行它们,因为它们将花费更多的时间,但是至少在重构过程中新引入的性能瓶颈或算法的新增功能时,会通知您

翻译自:https://stackoverflow.com/questions/7391287/unit-testing-approximation-algorithms

转载注明原文:单位测试近似算法