Библиотека для поиска дерева для проблем с комбинаторной оптимизацией
-
14-11-2019 - |
Вопрос
Я замечаю, что Некоторые из " Hard "комбинаторных проблем. Как Alpha-Beta Creuning, или поиск луча, или аналогичный алгоритм. Тем не менее, программирование их кажется повторяющимся кодированием одних и тех же вещей, и это также довольно легко сделать ошибки. Кажется, что должна быть библиотека, которая реализует эти алгоритмы, И все, что мне следует попросить написать, это
- кодирование для решения, то есть, как получить более конкретное решение из неполного решения. Это даст структуру дерева / графа.
- Учитывая частичное решение, как получить максимальную / минимальную стоимость, и, возможно, оценить стоимость.
- начальное решение / частичное решение.
- может быть какой-то решение для проверки.
Извините, я не дал какой-либо конкретный код, но я думаю, что я объяснил проблему. Если я могу написать код для функций, описанных выше, не сможете легко запустить несколько алгоритмов поиска деревьев / графиков? Есть ли любая удобная библиотека / рамка, которая поддерживает это легко? Я хотел бы быть в Python или C / C ++, но было бы интересно услышать любые предложения.
Редактировать: быть более точным, я говорю об информированных алгоритмах поиска деревьев.
Решение
FUEGO - это поиск дерева Monte-Carlo Source Source (в отличие от Alpha-Beta Seal Search) платформы, которые могут поставить на 2 игровых полноразрядных играх (первоначально созданные для цели GO).Это может даже быть более общем, чем это.
Редактировать: Я только что узнал, что он также имеет альфа-бета-поиск.Вот недавняя статья: http://webdocs.c.cs.ualberta.CA / ~ Mmueller / PS / FUEGO-TCIIG.PDF
Другие советы
Выражение проблемы без указания конкретных шагов - это своего рода Декларативное программирование .
Вы говорите о «частичных решениях». Значит ли это, что такие проблемы, которые вы рассматриваете, обладают переплетами? Если это так, то звучит так, будто вы просите способ сделать генерал Динамическое программирование . Все, что действительно означает, что строит функцию через последовательные шаги, решение более простых версий проблемы, а затем итерации. В этом есть несколько хороших примеров в этой Статья журнала Mathematica .
Вы думали Prolog ? Это не каркас, а алгоритм поиска, если вам нравится, встроен на язык. Можно написать очень General Программирование ограничения Решения с использованием чего-то вроде пролога в качестве основы. В Python есть Библиотека Python-Connaint , которая довольно приятно - я использовал его в прошлом ,
Для всех желающих пойти .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 для Информированный и неинформированный поиск онлайнОтказОн имеет поддержку поиска звезды и может использоваться для программирования для общих проблем из того, что я вижу.Интересно, достаточно ли достаточно быстро или может быть расширен до поиска луча, ветви и связанный и т. Д.