Как мне закончить рекурсию после определенного количества времени в Java? - PullRequest
1 голос
/ 22 марта 2012

Я выполняю поиск по дереву игр с альфа-бета-отсечкой в ​​игре, похожей на шашки, но у меня есть строгое ограничение в 5 секунд на определение моего лучшего хода.Я хотел бы, чтобы моя рекурсия вошла в базовый вариант как раз перед тем, как отведенное время истекло.

Как я могу проверить, сколько времени у меня осталось, или, возможно, изменить логическое значение, когда мое время почти закончено?

Ответы [ 3 ]

0 голосов
/ 22 марта 2012

Вы можете создать новый поток, который будет рассчитывать и через 5 секунд изменить логическое значение, которое можно проверить из другого местаМожет быть, что-то подобное?

Executors.newCachedThreadPool().execute(new Runnable() {
                    public void run() {
                          Thread.sleep(5000);
                          timeout = true;
}});
0 голосов
/ 22 марта 2012

Есть несколько способов сделать это.Как и предлагалось в других публикациях, вы можете использовать System.currentTimeMillis() и сравнить его с переменной long startTime, которую вы передаете через рекурсивный вызов, или каким-либо другим образом доступен для рекурсивной функции во время ее выполнения. или Вы можете использовать Runnable или Callable, чтобы перевернуть флаг или запустить обратный вызов после 5000 мс sleep(), но я думаю, что это может быть излишним.

В последний раз I сделал нечто подобное, я использовал класс Guava с именем StopWatch, который предоставляет хороший метод с именем elapsedMillis(), который дает вам количество прошедших миллисекунд с момента запуска StopWatch.Этот подход больше всего похож на System.currentTimeMillis(), но требует чуть меньше котельной плиты.Если введение Guava в качестве зависимости не является вариантом, тогда вы всегда можете реализовать подобный класс самостоятельно, который в любом случае просто использовал бы System.currentTimeMillis().

0 голосов
/ 22 марта 2012

на каждом шаге, используйте System.currentTimeMillis(), чтобы получить текущее время и сравнить его со временем, которое вы сохранили до начала рекурсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...