프로젝트는 더 이상 유지 보수 중이 아닙니다. 최신 버전은 LINQ를 방문하십시오.
휴리스틱 스위트는 일반 프로그래밍에서 일련의 휴리스틱 알고리즘을 실험적으로 구현 한 것입니다. 이 프로젝트는 퍼즐을 알고리즘으로 해결할 수있는 한 모든 퍼즐에 적용 할 수있는 인프라를 제공하는 것을 목표로합니다.
구현 된 알고리즘 :
구현은 완전히 객체 지향적이며 ICOMPARER (T) 및 IEMPRIALITY COMPARER (T)와 같은 내장 .NET 프레임 워크 비교 메커니즘의 장점을 가져와 .NET 표준 및 전체 .NET Ecosystem과 큰 호환성을 만듭니다. 소스 코드는 Unity 및 Xamarin과 같은 다른 플랫폼으로 쉽게 가져올 수 있습니다.
알고리즘을 퍼즐에 적용하려면 다음과 같은 구현이 필요합니다.
단계 정의 퍼즐의 단계를 정의하는 유형은 ISTEP (TKE) 인터페이스를 구현해야합니다. Key 속성은 두 가지 목적을 제공합니다.
단계 비교 단계는 Key 속성을 기반으로 서로 비교하여 점수가 더 좋은지 결정합니다. 비교는 다음과 같은 방법 중 하나로 수행 할 수 있습니다.
Key 인 경우 명시 적으로 주어진 h (n) 함수. 현재 단계의 다음 단계에서 사용 가능한 단계는 INextStepFactory(TKey, TStep) 인터페이스를 구현하거나 NextStepFactory 대표를 제공하여 제공 할 수 있습니다.
그 후, FindSolution 메소드를 호출하여 from 및 goal 단계를 매개 변수로 호출하여 알고리즘을 실행할 수 있습니다. 솔루션이 존재하는 경우, Enumerate 방법을 호출하여 각 단계를 얻을 수 있습니다. 열거가 시작되기 전에 단계를 Reverse 할 수 있습니다.
이 프로젝트는 다양한 단계 비교 시나리오에 대해 HeuristicComparer 및 DiscreteHeuristicComparer 제공합니다.
Key 속성을 서로 직접 비교할 수있는 경우, 기본적으로, DiscreteHeuristicComparer 더 빠른 단계 비교를 위해 사용됩니다.HeuristicComparer 전통적인 추정 F (n) = g (n) + h (n)을 수행하는 데 사용됩니다. HeuristicFunctionPreference 열거를 통해 사용자는 추정 균형을 변경할 수 있습니다. f (n) = g (n) + h (n) . 두 단계가 동일한 점수를 평가하면 열거는 어떤 함수 g (n) 또는 h (n)을 먼저 고려할 것입니다. 변경된 균형은 휴리스틱 알고리즘의 동작에 영향을 줄 수 있습니다.
경로 찾기 (algorithmforce.example.pathfinding)
이 예제는 휴리스틱 알고리즘을 사용하여 해결하는 가장 일반적이고 전통적인 퍼즐을 보여줍니다.
8-puzzle (algorithmforce.example.eightpuzzle)
이 예제는 휴리스틱 알고리즘으로 8puzzle을 해결하는 방법을 보여줍니다. 퍼즐의 초기 및 목표 단계는 다음과 같습니다.
코인 플리핑 퍼즐 (algorithmforce.example.coinsflipping)
이 예제는 게임 AI가 코인 플리핑 퍼즐을 해결하는 방법을 보여줍니다. 퍼즐에서는 한 쌍의 인접한 동전 만 동시에 뒤집을 수 있습니다. 머리 인 10 개의 동전이 목표입니다. 퍼즐은 Brilliant.org에서 영감을 얻었습니다.
앞으로 더 많은 예가 추가 될 것입니다.
이 프로젝트는 현재 .NET Core 및 .NET Framework 4.5 이상을 목표로합니다.