Java 游戏算法速度测试
我应该如何在速度方面测试我的算法?我做的增强算法和原始算法搜索相同的深度,它们都给出相同的移动,只是速度不同Java 游戏算法速度测试,java,algorithm,testing,artificial-intelligence,Java,Algorithm,Testing,Artificial Intelligence,我应该如何在速度方面测试我的算法?我做的增强算法和原始算法搜索相同的深度,它们都给出相同的移动,只是速度不同 你知道我该如何测试我的新算法吗?除了减去系统开始时间和系统结束时间之外。我想说的是我需要用一些公式做一些正式的测试。我是否应该模拟所有可能的移动并计算每个算法(增强型和原始型)决定移动所花的时间?我在这里完全不懂。我已经使用了下面的方法好几次,并取得了成功。如果您对多线程基准测试感兴趣,请参阅页面底部的链接 使用CPU、系统和用户时间为单线程任务计时 使用CPU、系统和用户时间为单线程任
你知道我该如何测试我的新算法吗?除了减去系统开始时间和系统结束时间之外。我想说的是我需要用一些公式做一些正式的测试。我是否应该模拟所有可能的移动并计算每个算法(增强型和原始型)决定移动所花的时间?我在这里完全不懂。我已经使用了下面的方法好几次,并取得了成功。如果您对多线程基准测试感兴趣,请参阅页面底部的链接 使用CPU、系统和用户时间为单线程任务计时 使用CPU、系统和用户时间为单线程任务计时
- “用户时间”是运行应用程序自己的代码所花费的时间
- “系统时间”是代表用户运行操作系统代码所花费的时间 应用程序(如I/O)
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");
}
}
这是什么游戏?两个AI可以互相对抗吗?算法是基于最小-最大算法的吗?如果是这样的话-比较时间可能不是比较两者的好主意。这是一个棋盘游戏,两个AI可以相互对抗,但我不需要它们,因为我只是测试它们的速度。我所知道的是,修改后的算法通常更快。我只是不知道如何正式说明它比原始算法快多少。例如,我可以说,在测试不同类型的场景后,在选择移动时,它比原始算法快20%。我正在写论文。
Sleeping Zzzz... 0
Sleeping Zzzz... 1
Sleeping Zzzz... 2
Sleeping Zzzz... 3
Sleeping Zzzz... 4
It took 5007507169 nano seconds to finish