我正在为比赛编写AI测试框架。参与者提交与给定接口(interface)匹配的Bot类。然后所有机器人都玩回合制游戏。在每个转弯处,我都想执行以下操作:

For every bot B:
    start a thread that runs at most N cycles and does B.getNextMove()
wait for all threads to complete
Make all moves (from each bot).

我的困难在于说“最多N个周期”。我可以按时间限制所有漫游器(例如每转半秒),但这意味着某些漫游器可以获得比其他漫游器更多的处理器周期,并且不允许严格的“您的漫游器应该能够重新做出决定: X次”的要求。

如前所述,这是用Java编写的。有任何想法吗?我一直在研究并发和锁定,但这感觉不正确。另外,有可能不运行Parralel的机器人,然后使用时间进行限制(假设计算机当时没有运行其他任何东西),但这是不可取的,因为这会大大减慢我们的速度。可能会从游戏中获得结果。

最佳答案

我会与机器人建立一个接口(interface),让它们对算法进行1次迭代,然后做一个简单的计数。

如果您需要困难的时间/cpu限制,则没有太多(简单)的方法可以在Java中进行管理。

您无法使用Java测量CPU周期,但可以测量CPU时间-与仅使用挂钟时间相比,这是一个巨大的改进。

获取您要使用的当前线程的cpu时间(来自标准java.lang.management包)

ThreadMXBean tm = ManagementFactory.getThreadMXBean();
long cpuTime = tm.getCurrentThreadCpuTime();

10-06 05:28
查看更多