我应该如何测试我的算法的速度?我所做的增强算法和原始算法搜索的深度相同,它们都给出相同的移动,它们只在速度方面有所不同。测试游戏算法速度
你知道我该如何测试我制作的新算法吗?除了减去系统时间,它开始到系统时间结束。我想说的是我需要用一点点的公式做一点正式的测试。我是否应该模拟所有可能的动作并计算每个算法(增强和原始)花费时间来确定移动的时间?我在这里很无能。
我应该如何测试我的算法的速度?我所做的增强算法和原始算法搜索的深度相同,它们都给出相同的移动,它们只在速度方面有所不同。测试游戏算法速度
你知道我该如何测试我制作的新算法吗?除了减去系统时间,它开始到系统时间结束。我想说的是我需要用一点点的公式做一点正式的测试。我是否应该模拟所有可能的动作并计算每个算法(增强和原始)花费时间来确定移动的时间?我在这里很无能。
我已经使用了下面的方法几次并取得了成功。如果您对多线程基准测试感兴趣,请参阅页面底部的链接。
使用CPU,系统和用户时间 定时使用CPU,系统和用户时间单线程任务时序单线程任务
“用户时间”是花费的时间运行你的应用程序自己的代码。
“系统时间”是代表您的 应用程序(例如I/O)运行OS代码所用的时间。
Java 1.5引入了java.lang.management包来监视JVM。该包的入口点是ManagementFactory类。它的静态方法返回各种报告JVM信息的不同“MXBean”对象。一个这样的bean可以报告线程CPU和用户时间。
Call ManagementFactory。 getThreadMXBean()获取描述当前JVM线程的ThreadMXBean。该bean的getCurrentThreadCpuTime()方法返回当前线程的CPU时间。 getCurrentThreadUserTime()方法返回线程的用户时间。这两种报告时间均以纳秒为单位(但请参阅附录关于时间和(缺少)纳秒精度)。
尽管如此,一定要先调用isCurrentThreadCpuTimeSupported()。如果返回false(罕见),则JVM实现或OS不支持获取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;
下面是一个示例程序来捕捉时机,您可以更改为适合您的需要:
package com.quicklyjava;
public class Main {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// start time
long time = System.nanoTime();
for (int i = 0; i < 5; i++) {
System.out.println("Sleeping Zzzz... " + i);
Thread.sleep(1000);
}
long difference = System.nanoTime() - time;
System.out.println("It took " + difference + " nano seconds to finish");
}
}
这里是输出:
Sleeping Zzzz... 0
Sleeping Zzzz... 1
Sleeping Zzzz... 2
Sleeping Zzzz... 3
Sleeping Zzzz... 4
It took 5007507169 nano seconds to finish
w ^帽子那种比赛是吗?两个AI可以相互对抗吗? –
基于最小最大值算法的算法是什么?如果是这样 - 比较两次可能不是一个好主意。 – amit
这是一款棋盘游戏,两个AI可以相互对抗,但我不需要它们,因为我只测试它们的速度。我所知道的是,修改后的算法通常更快。我只是不知道如何正式说明比原始算法快多少。例如,我可以说在测试不同类型的场景之后选择移动比原始算法快20%。我实际上在做我的论文。 – blackmambo