El proyecto ya no está bajo mantenimiento. Visite Linq a A* para la última versión.
Heuristic Suite es una implementación experimental de una serie de algoritmos heurísticos en la programación genérica. El proyecto tiene como objetivo proporcionar una infraestructura que pueda aplicarse a cualquier rompecabezas, siempre que el rompecabezas se pueda resolver con el algoritmo.
Algoritmos implementados:
La implementación está totalmente orientada a objetos y toma ventajas del mecanismo de comparación de marco de .NET incorporado como ICOMParer (T) e iEqualityComparer (T) para crear una gran compatibilidad con el ecosistema .NET estándar y completo .NET. El código fuente se puede llevar fácilmente a otras plataformas como Unity y Xamarin.
Para aplicar el algoritmo al rompecabezas, se necesitan las siguientes implementaciones:
Definición de paso El tipo que define el paso del rompecabezas se requerirá para implementar la interfaz ISTEP (TKEY). La propiedad Key tiene dos propósitos:
Los pasos de comparación de pasos se comparan entre sí en función de la propiedad Key para determinar cuál tiene una mejor puntuación. La comparación se puede hacer de una manera siguiente:
Key . Los pasos disponibles del paso actual, la información del siguiente paso se puede proporcionar implementando la interfaz INextStepFactory(TKey, TStep) o proporcionando NextStepFactory Delegate.
Después de lo cual, el algoritmo se puede ejecutar invocando el método FindSolution con los pasos from y goal como parámetros. Si la solución existe, cada uno de los pasos se puede obtener llamando al método Enumerate . Los pasos se pueden Reverse d antes de que comience la enumeración.
El proyecto proporciona HeuristicComparer y DiscreteHeuristicComparer para diferentes escenarios de comparación de pasos.
Key se puede comparar directamente entre sí sin la función H (N) explícita, de forma predeterminada, DiscreteHeuristicComparer se utilizará para una comparación de pasos más rápida.HeuristicComparer se utilizará para realizar la estimación tradicional F (N) = G (N) + H (N) . La enumeración HeuristicFunctionPreference permite a los usuarios cambiar el equilibrio de la estimación F (n) = g (n) + h (n) . Cuando se evalúan dos pasos la misma puntuación, la enumeración decide qué funcione, G (N) o H (N) , se considerará primero. El equilibrio cambiado puede afectar el comportamiento del algoritmo heurístico.
Hallazgo de ruta (algorithmforce.example.pathfinding)
El ejemplo demuestra el rompecabezas más común y tradicional que usan algoritmos heurísticos para resolver.
8-Puzzle (algorithmforce.example.EightPuzzle)
El ejemplo demuestra cómo resolver el 8-Puzzle con algoritmo heurístico. Los pasos iniciales y objetivo del rompecabezas se muestran a continuación:
Monedas voltear rompecabezas (algorithmforce.example.coinsflipping)
Este ejemplo demuestra cómo el juego AI resuelve el rompecabezas de las monedas. En el rompecabezas, solo se deja voltear un par de monedas adyacentes al mismo tiempo. Las diez monedas que son la cabeza es el objetivo. El rompecabezas está inspirado en Brilliant.org.
Se agregarán más ejemplos en el futuro.
El proyecto actualmente se dirige a .NET Core y .NET Framework 4.5 o superior.