저는 추론 엔진을 개발하고 있습니다. 이것은 기본적으로 특정 순간에 기본적으로 세계를 대표하는 "사실"을 가지고 있음을 의미합니다. 사실 (보통 2 개, 시작 상태와 목표 상태)과 함께 나는 많은 규칙 (특정 문제에 대해 말 그대로 수백 개가 될 수 있음)이 있습니다. 추론 엔진의 목적은 시작 상태와 일련의 규칙을 고려하여 허용 가능한 목표 상태 중 하나에 대한 최단 경로를 찾는 것입니다. 이것은 DFS, BFS 또는 A *와 같은 여러 알고리즘을 사용하여 수행 할 수 있습니다. 프로그램의 기본 구조이다 : ((가)> 부분 전에) "값"같다 사실 factname
에서 모든 속성과 일치패턴 일치에서 변수 대체?
fact factname attribute1 = "value"; attribute2 = [ 1, 2, 3]; attribute3 = 4; attribute4 = 7; ... endFact rule ruleOne equalsto(attribute, "value") or greaterthan(attribute, 5) > remove(attribute); endRule rule ruleTwo isprimeinteger(attribute) > add(attribute, 1) endRule
의 LHS. 이 경우에는 하나 뿐이지 만 많은 경우가있을 수 있습니다. 이것은 변수를 분석해야한다는 것을 의미하며 (종종 동일한 사실에 대해 여러 번) 규칙의 LHS에 여러 조건을 넣거나 올바른 우선 순위 구문 분석을 할 수 있습니다.
문제는 다음과 같습니다.이 종류의 변수를 해결할 수있는 방법이 있습니까 ? 제가 지금하고있는 일은 사실에있는 모든 속성을 반복하는 것입니다. 기본적으로 저는 불균형 한 꽤 큰 n-ary tree를 생성하고 있습니다. 이것은 특히 위의 조건에서 보면 매우 느립니다.
나는 간단한 해시 테이블 O 될 경우, 당신은 O (N) 알고리즘을 사용하고
문제를 좀 더 정확하게 설명 할 수 있습니까? 나는 그것을 이해하기가 힘듭니다. 주어진 주에서 어떻게 도달 할 수있는 주를 얻습니까? 변수를 사용하면 무엇을 의미합니까? (매우 특별한 변수 인 것처럼 보이는 '속성'만 볼 수 있습니다. 다른 태그가 있습니까?) 패턴 일치 (또는 통합)를 감지 할 수 없으며 태그의 전문가 시스템의 관련성을 보지 못합니다. '및'C++ '. 마지막으로 DFS는 최단 경로를 원한다면 큰 선택이 아닌 것 같습니다. – mweerden