【发布时间】:2011-11-15 12:26:12
【问题描述】:
我正在使用一些流行的 python 包作为基础,为图形和网络开发一个开源近似算法库。主要目标是包含针对图和网络上的 NP 完全问题的最新近似算法。这样做的原因是 1)我还没有看到一个很好的(现代)整合包来涵盖这一点,并且 2)这将是一个很好的教学工具,用于学习 NP-Hard 优化问题的近似算法。
在构建这个库时,我使用单元测试来进行完整性检查(就像任何合适的开发人员一样)。我对我的单元测试有些谨慎,因为就其本质而言,近似算法可能不会返回正确的解决方案。目前我正在手动解决一些小实例,然后确保返回的结果与之匹配,但这是不可取的,在实现意义上也不可扩展。
对近似算法进行单元测试的最佳方法是什么?生成随机实例并确保返回的结果小于算法保证的界限?这似乎有误报(那个时候测试很幸运,不能保证所有实例都低于界限)。
【问题讨论】:
-
如果您为 NP 完全问题生成“随机实例”,如何知道真正的答案以测试边界?恕我直言,您仍然需要仔细选择测试用例。选择您可以作为人类发现真正答案的案例,但对于近似算法而言,这可能会或可能不会被证明是棘手的,或者至少可以练习。这样的案例仍然可以通过编程方式生成,以便足够大以成为现实。它们不应该是随机的。
-
扩展@Ray Toal 的评论,如果您生成了问题,则有一些很容易解决的难题;例如,分解 pq 很难,除非你已经知道 p 和 q 因为你生成了它们。可以将类似的原则应用于您的图/网络问题吗?
-
+1 Tom 这正是我所说的以编程方式生成已知案例的意思。我现在有点犹豫要不要添加答案,因为我不是这方面的权威;也许有人可以来这里有经验。我只是想在“随机”这个词周围竖起一面红旗。
标签: algorithm unit-testing graph-theory approximation np