Вопрос

Я создаю программу C, чтобы играть Гомоку. Отказ Оно использует MiniMax. Поиск, чтобы решить лучшее движение. Однако он может искать только лучшее движение на 10 секунд. Как я определить, когда моя функция поиска потратила 10 секунд поиска. Если вы могли бы предоставить мне пример или ссылку на документацию, которая будет очень ценится.

Это было полезно?

Решение

#include <time.h>
time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < 10) {
  //search
}

То есть то, что приходит на мой разум. Это не тестировано, хотя.

Другие советы

Я думаю, что ваша проблема не в том времени. Вы упомянули алгоритм Minmax, который является рекурсивным. Критерием остановки алгоритма Minmax является заданным глубиной поиска. Если вам нравится иметь критерий остановки на основе времени, вы должны расширить свой алгоритм с помощью Итеративное углубление Framework и пусть рекурсивный Minmax функция возвращает Sentinel Value., если время закончено.

Постоянная проверка времени не сделает работу! MiniMax - это рекурсивный алгоритм поиска по глубине глубины, который может потратить, например, 30 секунд, изучая очень неправильные движения, когда есть некоторые, очевидно, намного лучше движется, и только за последние 1 секунда, чтобы найти хороший ход!

Вы должны использовать какой-то алгоритм, который находит довольно хороший ход за короткое время, а затем, с более и более и более доступным, он улучшает решение! Вы должны изменить алгоритм MiniMax (или ALPA-BETA) для Ширина первого поиска Стратегия. Тогда вы можете разрезать его в любое время, имея довольно хорошие ходы.

Вы могли бы использовать alarm сигнал. Просто попросите обработчик сигнала установил глобальный флаг под названием okWereDoneNow И начните свой поиск, проверьте и сбросьте его.

Преимущество этого в рамках функций таймера заключается в том, что он требует только одного сравнения на итерацию поиска. Сигнальная работа дорогая, но бегать только один раз. В интенсивной, предположительно-связанной с CPU повторная операция, это может быть значительным преимуществом. Но не берите мое слово для этого - тестируйте!

Вы можете использовать функцию времени () во времени. Как правило, возвращенное значение в секундах. Даже если это не так, вы можете просто использовать Difffime () из одного и того же заголовка.

Этот это хороший ресурс по необходимым функциям.

Приведенная выше ссылка находится на эталонном сайте C ++, но этот заголовок и примеры являются всеми C-код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top