在您指定的标准中,我认为我所知道的最接近的项目是佛罗里达大学稀疏矩阵集合。人们经常使用这个数据集来比较稀疏线性代数求解器,您可以通过非常好的 Web 界面、MATLAB 界面或 Java GUI 按应用程序、非零数、矩阵维数等进行过滤。我已经看到论文中列出了这些问题的表格,以及求解器运行时间与 4 到 8 个线性代数求解器的比较。
我同意编译这样的数据库会很有用,此外,我认为用于编译数据的 UF 稀疏矩阵收集方法是一个很好的方法,对于任何想要实现这个想法的人来说都是一个很好的开始。在实践中,运行所有的问题似乎不是什么大困难,只要你能接触到所有的求解器;如果您可以访问求解器,以及安装了所有必要软件的可靠标准参考机,那么应该是运行脚本和收集数据的问题。在我看来,困难在于让人们给你他们的软件,如果它不是开源的。如果它是商业的,你可以购买它,甚至可能让人们捐赠软件,硬币或项目。但如果研究软件既不是商业也不是开源的,那么你需要说服人们购买这项工作,他们可能不相信第三方会公平地评估他们的软件。
我还知道,在优化方面,有可下载的问题数据库(我想到了CUTEr
)和用于优化的测试问题书籍。我见过人们(例如,我特别想到了 Ruth Misener 在 AIChE 2011 上的演讲)在演示文稿中比较他们的优化求解器与其他求解器的问题数据库;我不确定什么会公开发布。我知道大规模比较的优化有一个传统(许多求解器,许多问题);我只是不认为有可用的在线数据库。
我认为重要的另一件事是我们在这里区分方法和软件实现. 在科学计算中,我们都根据计算复杂度指标或我们对各种问题的经验来讨论哪些方法更快或更慢。然而,在定量测量计算时间时,除非计算特定算法中的 FLOP 数,否则必须在软件中实现该算法,然后以某种方式测量性能(内存使用情况、挂钟执行时间等) .)。在查看计算复杂度或 FLOP 计数时评估方法的性能是有意义的,因为我们不需要实现来衡量这些事情,但是当我们对实际挂钟运行时间感兴趣时,谈论方法是仅用作抽象的口语设备。(例如,
我提出方法和软件之间的这种区别是因为在这样的数据库中,我还可以看到随着时间的推移跟踪软件改进的可能性。因此,例如,对于诸如 PETSc 或 PyCLAW 之类的东西,或者任何正在测试的软件,看看软件升级会对哪些问题产生积极(或消极!)影响会很有趣。这对于试图决定是否值得任何潜在的金钱和人力成本来升级他们的代码的研究人员可能很有用。这种区别很重要的另一个原因是,一个好的方法可能执行得不好。我认为这种可能性导致人们有时在分享他们的研究代码时保持沉默。
我认为无论这个想法是什么(我希望它有什么结果,并且愿意在我获得博士学位后做出贡献),强调软件和方法之间的区别很重要,因为如果我们正在运行测试问题,我们就是将发布软件的结果。