Библиотека для поиска дерева для проблем с комбинаторной оптимизацией

StackOverflow https://stackoverflow.com/questions/5478683

Вопрос

Я замечаю, что Некоторые из " Hard "комбинаторных проблем. Как Alpha-Beta Creuning, или поиск луча, или аналогичный алгоритм. Тем не менее, программирование их кажется повторяющимся кодированием одних и тех же вещей, и это также довольно легко сделать ошибки. Кажется, что должна быть библиотека, которая реализует эти алгоритмы, И все, что мне следует попросить написать, это

  1. кодирование для решения, то есть, как получить более конкретное решение из неполного решения. Это даст структуру дерева / графа.
  2. Учитывая частичное решение, как получить максимальную / минимальную стоимость, и, возможно, оценить стоимость.
  3. начальное решение / частичное решение.
  4. может быть какой-то решение для проверки.

    Извините, я не дал какой-либо конкретный код, но я думаю, что я объяснил проблему. Если я могу написать код для функций, описанных выше, не сможете легко запустить несколько алгоритмов поиска деревьев / графиков? Есть ли любая удобная библиотека / рамка, которая поддерживает это легко? Я хотел бы быть в Python или C / C ++, но было бы интересно услышать любые предложения.

    Редактировать: быть более точным, я говорю об информированных алгоритмах поиска деревьев.

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

Решение

FUEGO - это поиск дерева Monte-Carlo Source Source (в отличие от Alpha-Beta Seal Search) платформы, которые могут поставить на 2 игровых полноразрядных играх (первоначально созданные для цели GO).Это может даже быть более общем, чем это.

http://fuego.sourceforge.net/

Редактировать: Я только что узнал, что он также имеет альфа-бета-поиск.Вот недавняя статья: http://webdocs.c.cs.ualberta.CA / ~ Mmueller / PS / FUEGO-TCIIG.PDF

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

Выражение проблемы без указания конкретных шагов - это своего рода Декларативное программирование .

Вы говорите о «частичных решениях». Значит ли это, что такие проблемы, которые вы рассматриваете, обладают переплетами? Если это так, то звучит так, будто вы просите способ сделать генерал Динамическое программирование . Все, что действительно означает, что строит функцию через последовательные шаги, решение более простых версий проблемы, а затем итерации. В этом есть несколько хороших примеров в этой Статья журнала Mathematica .

Вы думали Prolog ? Это не каркас, а алгоритм поиска, если вам нравится, встроен на язык. Можно написать очень General Программирование ограничения Решения с использованием чего-то вроде пролога в качестве основы. В Python есть Библиотека Python-Connaint , которая довольно приятно - я использовал его в прошлом ,

Quickgraph

Для всех желающих пойти .NET, посмотрите на Библиотека QuickGraph с открытым исходным кодом для всех ваших графиков / Дерево обработка. Он аккуратно разделяет все концепции, связанные с графом-представлением, -альгоритмами, -мутациями и презентацией. У него много удлинительных точек, поэтому он должен иметь возможность поддерживать большинство проблем с графиком.

[править] Набор алгоритмов, поставляемых с помощью QuickGraph, не включает поиск альфа-бета-вернувшего или пучка в этот момент, хотя его раздел алгоритма поиска включает в себя 11 других методов, которые обеспечивают достаточно рекомендации для реализации вашего любимого алгоритма обхода и Со временем я бы представлял, что он будет поддерживать альфа-бета и луч.

ad. 1 Он удовлетворяет вашему первому критерию, хотя, в том, что можно вставить функцию делегирования, которая возвращает несколько более конкретных решений (I.E. Соседние узлы) на основе неполного решения (I.e. Текущий узел). Это обрабатывается от DelegateImplicitGraph (и вариации) и должен быть память Эффективное, потому что это предотвращает сразу общее пространство поиска в памяти одновременно. <Сильное> объявление. 2 Кроме того, алгоритмы могут принимать нестандартные делегаты, такие как максимальные / мин / ожидаемые затраты, эмерикалистики (см. AStarShortestPathAlgorithm ). Это удовлетворяет вашему второму критерию.

Таким образом, QuickGraph поможет вам структурировать вашу проблему, предоставляет алгоритмы выпадения различных типов проблем, и позволяет улучшать его, поставляя новые алгоритмы.

BOOST имеет M Усиливание графика (BGL) .Руководство пользователя BOOST GRAP GRAP GRAPH имеет AN rel="nofollow"> в проблеме тура Рыцаря, используя неявные графики.

Я нашел Peter Norvig's Code Python для Информированный и неинформированный поиск онлайнОтказОн имеет поддержку поиска звезды и может использоваться для программирования для общих проблем из того, что я вижу.Интересно, достаточно ли достаточно быстро или может быть расширен до поиска луча, ветви и связанный и т. Д.

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