如何实现在线评测机器人?(如TopCoder、Uva、ACM-ICPC)

2 投票
2 回答
938 浏览
提问于 2025-04-17 09:43

有很多在线评测网站可以通过将你的程序输出与正确答案进行比较来验证你的程序。更重要的是,它们还会检查程序的运行时间和内存使用情况,以确保你的程序没有超过最大限制。

所以我想问,既然一些在线评测网站可以同时运行多个测试程序,它们是如何做到性能隔离的?而且它们是如何确保同一个程序在不同时间运行时的时间是一样的呢?

我觉得可能有一些隔离环境的进程,比如“VMware”或“Sandbox”,它们总是能返回相同的结果。这说法对吗?有没有什么想法可以实现这些东西呢?

当前解决方案

我正在使用docker来创建沙箱环境。这是一个非常简单且安全的方法。

2 个回答

0

这可能有点简单,具体还要看你其他的需求,这里没提到。

如果你的算法主要是受CPU性能限制,那么最简单的方法就是在一个独立的虚拟机(或者FreeBSD的监狱环境,等等)里运行它,然后使用操作系统自带的工具来监控。

这可能就像在Unix系统里用'time'命令来测量时间,同时用"limit"来设置内存限制一样简单。

1

很遗憾,即使在专用机器上,也很难保证运行时间的一致性,尤其是和虚拟机(VM)相比。如果你想实现类似的功能,建议使用虚拟机,这样可以把所有运行的代码放在一个安全的环境中。通常来说,每个核心处理的请求不宜超过几个,所以对于那些对内存和CPU要求高的算法,我建议每个物理核心最多使用2个虚拟机。

虽然我只能猜测,但你可以尝试不同数量的虚拟机来看看效果如何。目标是让服务水平目标(SLO)的达成率达到90%或更高(如果真的需要的话,可以追求98-99%),这样就差不多了。再次强调,具体该怎么做很难给出明确的答案,因为很多事情都需要通过测试来观察效果。

撰写回答