我應該如何測試我的算法的速度?我所做的增強算法和原始算法搜索的深度相同,它們都給出相同的移動,它們只在速度方面有所不同。測試遊戲算法速度
你知道我該如何測試我製作的新算法嗎?除了減去系統時間,它開始到系統時間結束。我想說的是我需要用一點點的公式做一點正式的測試。我是否應該模擬所有可能的動作並計算每個算法(增強和原始)花費時間來確定移動的時間?我在這裏很無能。
我應該如何測試我的算法的速度?我所做的增強算法和原始算法搜索的深度相同,它們都給出相同的移動,它們只在速度方面有所不同。測試遊戲算法速度
你知道我該如何測試我製作的新算法嗎?除了減去系統時間,它開始到系統時間結束。我想說的是我需要用一點點的公式做一點正式的測試。我是否應該模擬所有可能的動作並計算每個算法(增強和原始)花費時間來確定移動的時間?我在這裏很無能。
我已經使用了下面的方法幾次並取得了成功。如果您對多線程基準測試感興趣,請參閱頁面底部的鏈接。
使用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