java - 测试游戏算法速度

标签 java algorithm testing artificial-intelligence

我应该如何测试我的算法的速度?我做的增强算法和原来的算法搜索深度相同,走法相同,只是速度不同而已。

你知道我应该如何测试我制作的新算法吗?除了减去它开始的系统时间到它结束的系统时间之外。我想说的是我需要用一点公式做一些正式的测试。我应该模拟所有可能的 Action 并计算每个算法(增强的和原始的)花费时间来决定 Action 的时间吗?我在这里很无能。

最佳答案

下面的方法我用过几次,都成功了。如果您对多线程基准测试感兴趣,请参阅页面底部的链接。

使用 CPU、系统和用户时间为单线程任务计时 使用 CPU、系统和用户时间对单线程任务进行计时

  • “用户时间”是指运行您的应用程序自己的代码所花费的时间。

  • “系统时间”是代表您运行操作系统代码所花费的时间 应用程序(例如 I/O)。

Java 1.5 引入了 java.lang.management 包来监控 JVM。包的入口点是 ManagementFactory 类。它的静态方法返返回告 JVM 信息的各种不同的“MXBean”对象。一个这样的 bean 可以报告线程 CPU 和用户时间。

调用 ManagementFactory 。 getThreadMXBean() 获取描述当前 JVM 线程的 ThreadMXBean。 bean 的 getCurrentThreadCpuTime() 方法返回当前线程的 CPU 时间。 getCurrentThreadUserTime() 方法返回线程的用户时间。这两个报告时间都以纳秒为单位(但请参阅关于时间和(缺乏)纳秒精度的附录)。

但请务必先调用 isCurrentThreadCpuTimeSupported()。如果它返回 false(罕见),则 JVM 实现或操作系统不支持获取 CPU 或用户时间。在这种情况下,您将回到使用挂钟时间。

import java.lang.management.*;

/** Get CPU time in nanoseconds. */
public long getCpuTime( ) {
    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
    return bean.isCurrentThreadCpuTimeSupported( ) ?
        bean.getCurrentThreadCpuTime( ) : 0L;
}

/** Get user time in nanoseconds. */
public long getUserTime( ) {
    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
    return bean.isCurrentThreadCpuTimeSupported( ) ?
        bean.getCurrentThreadUserTime( ) : 0L;
}

/** Get system time in nanoseconds. */
public long getSystemTime( ) {
    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
    return bean.isCurrentThreadCpuTimeSupported( ) ?
        (bean.getCurrentCpuTime( ) - bean.getCurrentThreadUserTime( )) : 0L;
}

这些方法返回自线程启动以来的 CPU、用户和系统时间。要在线程启动后对任务计时,请在任务前后调用其中一个或多个并取差:

long startSystemTimeNano = getSystemTime( );
long startUserTimeNano   = getUserTime( );
... do task ...
long taskUserTimeNano    = getUserTime( ) - startUserTimeNano;
long taskSystemTimeNano  = getSystemTime( ) - startSystemTimeNano;

取自,http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#TimingasinglethreadedtaskusingCPUsystemandusertime

关于java - 测试游戏算法速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540064/

相关文章:

java - 如何从php读取字符串到android studio(java)

algorithm - 在 O(n) 时间内排序?

iphone - 文本消失在 iphone 上改变方向

testing - 用于 Web 应用程序的零配置、自动化、随机测试工具?

java - 如何使Java对象同步?哪种方法更好,为什么?

java - 集成测试在 gradle 测试中失败,但在 IDE 中通过

java - 奇怪的线程 block 创建原始数组

c - 在这种情况下,如何在 c 中打印距离原点最近的 2D 点?

java - 有关如何改进当前模糊搜索实现的建议

api - 黑莓 API 兼容性测试