Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 游戏算法速度测试_Java_Algorithm_Testing_Artificial Intelligence - Fatal编程技术网

Java 游戏算法速度测试

Java 游戏算法速度测试,java,algorithm,testing,artificial-intelligence,Java,Algorithm,Testing,Artificial Intelligence,我应该如何在速度方面测试我的算法?我做的增强算法和原始算法搜索相同的深度,它们都给出相同的移动,只是速度不同 你知道我该如何测试我的新算法吗?除了减去系统开始时间和系统结束时间之外。我想说的是我需要用一些公式做一些正式的测试。我是否应该模拟所有可能的移动并计算每个算法(增强型和原始型)决定移动所花的时间?我在这里完全不懂。我已经使用了下面的方法好几次,并取得了成功。如果您对多线程基准测试感兴趣,请参阅页面底部的链接 使用CPU、系统和用户时间为单线程任务计时 使用CPU、系统和用户时间为单线程任

我应该如何在速度方面测试我的算法?我做的增强算法和原始算法搜索相同的深度,它们都给出相同的移动,只是速度不同


你知道我该如何测试我的新算法吗?除了减去系统开始时间和系统结束时间之外。我想说的是我需要用一些公式做一些正式的测试。我是否应该模拟所有可能的移动并计算每个算法(增强型和原始型)决定移动所花的时间?我在这里完全不懂。

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

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

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

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

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

呼叫管理工厂 . getThreadMXBean()获取描述当前JVM线程的ThreadMXBean。bean的getCurrentThreadCpuTime()方法返回当前线程的CPU时间。getCurrentThreadUserTime()方法返回线程的用户时间。这两种方法都以纳秒为单位报告时间(但见附录中的时间和(缺乏)纳秒精度)

不过,请确保首先调用isCurrentThreadCputimesSupported()。如果返回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;

摘自,

这是一个捕获计时的示例程序,您可以根据需要更改此程序:

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