2012-09-22 5 views
0

Как я должен проверить свой алгоритм с точки зрения скорости? Усовершенствованный алгоритм, который я сделал, и исходный алгоритм ищут ту же самую глубину, и оба они дают одинаковый ход, они отличаются только скоростью.тестирование игрового алгоритма скорость

Знаете ли вы, как я должен проверить свой новый алгоритм, который я создал? Помимо просто вычитания системного времени, оно начиналось до истечения его системного времени. Я пытаюсь сказать, что мне нужно сделать небольшие формальные тесты с небольшим количеством формул. Должен ли я имитировать все возможные ходы и подсчитывать время, когда каждый алгоритм (расширенный и оригинальный) занимал время, чтобы принять решение о ходу? Я совершенно не знаю.

+0

W шляпа вид игры? Могут ли два ИИ играть друг против друга? –

+0

Является ли алгоритм основанный на алгоритме min-max? Если это так - сравнение времени может быть не такой хорошей идеей для сравнения двух. – amit

+0

это настольная игра, оба ИИ могут играть друг против друга, но мне они не понадобятся, так как я только проверяю их скорость.Я знаю, что модифицированный алгоритм, как правило, быстрее. Я просто не знаю, как официально заявить, насколько быстрее это, чем исходный алгоритм. Например, я могу сказать, что он на 20% быстрее, чем исходный алгоритм при выборе перемещения после тестирования различных типов сценариев. Я действительно делаю свою диссертацию. – blackmambo

ответ

2

Я использовал метод ниже несколько раз и имел успех. Если вас интересует многопоточный бенчмаркинг, обратитесь к ссылке внизу страницы.

Timing однопоточной задачи с помощью процессора, систем, и время пользователя Timing однопоточной задачи с помощью процессора, систем, и время пользователя

  • «Время пользователя» этого время, потраченного запуская собственный код приложения.

  • «Системное время» - это время, затраченное на выполнение кода операционной системы от имени вашего приложения (например, для ввода-вывода).

Java 1.5 представил пакет java.lang.management для мониторинга JVM. Точкой входа для пакета является класс ManagementFactory. Это статические методы, возвращающие множество различных объектов «MXBean», которые сообщают информацию JVM. Один из таких компонентов может сообщать о потоке CPU и пользовательском времени.

Call ManagementFactory. getThreadMXBean(), чтобы получить ThreadMXBean, который описывает текущие потоки JVM. Метод getCurrentThreadCpuTime() bean-компонента возвращает время процессора для текущего потока. Метод getCurrentThreadUserTime() возвращает время пользователя потока. Оба этих отчета раз в наносекундах (но см. Приложение о временах и (отсутствие) точности наносекунды).

Обязательно сначала вызовите isCurrentThreadCpuTimeSupported(). Если он возвращает false (редко), реализация JVM или ОС не поддерживает получение времени процессора или пользователя. В этом случае вы вернетесь к использованию часов настенных часов.

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; 
} 

Эти методы возвращают процессор, пользователь и системное время с момента запуска потока. Ко времени задача после того, как поток начал, вызвать один или несколько из них до и после выполнения задачи и взять разницу:

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

0

Вот пример программы для захвата тайминги, вы можете изменить это в соответствии с вашими потребностями:

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 
Смежные вопросы