2012-04-17 4 views
3

Я хочу использовать Python для оценки различных подходов к динамическому программированию для настольных игр с двумя игроками без неопределенности (например, в шахматы и т. Д.). Меня интересуют как точные, так и эвристические решения. Моя «оценка» состоит в попытке каждого подхода и наблюдения за тем, насколько хорошо он работает в тестовых случаях, которые я генерирую.Библиотека для быстрой разработки динамических программных решений для настольных игр

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

Меня интересуют только асимптотические характеристики (например, O(n log n) против O(n^2) и т. Д.). Поэтому мне нужны эффективные структуры данных, но я не возражаю против производительности с постоянным коэффициентом.

Я не против, если для изучения библиотеки требуется некоторое время.

Мне не нужен внешний интерфейс; Я использую только интерфейс командной строки.

Мне также не нужна поддержка параллельного/распределенного программирования (хотя я бы не отказался, если он доступен).

Мне нужна библиотека для поддержки Python 3 либо сейчас, либо очень скоро.

Существуют ли библиотеки, предоставляющие такую ​​поддержку?

+1

«Любые рекомендации» довольно открытые, и заставляет меня чесаться, чтобы выбрать «Неконструктивную» причину, потому что она запрашивает опрос/мнение. Вы также растягиваете его, чтобы потребовать Python 3. – agf

+0

Есть ли способ изменить его, чтобы сделать его конструктивным, не теряя сути моего вопроса? Я пробовал слабую попытку (см. Обновленный конец вопроса). – max

+0

Я так не думаю. Это просто не вопрос переполнения стека. Вы задаете много хороших вопросов, поэтому я хотел дать вам шанс придумать то, о чем я не думал. Но так как вопрос, кажется, просто прямой запрос на рекомендации, я собираюсь голосовать за закрытие. – agf

ответ

2

Я не знаю ни одной библиотеки, специфичной для динамического программирования. Тем не менее, динамическое программирование в основном использует memoization для ускорения вычислительных функций, а также имеется гладкий декоратор memoization функции, доступный с Python 3.2, называемый lru_cache().

Это functools, которое вы обязательно должны изучить, потому что оно полна отличных вещей.

http://docs.python.org/dev/library/functools.html

@functools.lru_cache(maxsize=100, typed=False)

Если вам это нужно в какой-то более ранней версии Python, существует различные рецепты запоминания доступны в Интернете.

+0

Спасибо! И я использую Python 3.3, так что это прекрасно! К сожалению, мне нужно гораздо больше, чем это :(Мне также нужна поддержка для определения и прохождения различными способами неявных графиков, которые представляют пространство состояний, для генерации и использования различных функций подсчета для управления обходами и т. Д. Но я постараюсь наименее использовать '@ lru_cache'. – max

Смежные вопросы