여기에 제가 지금까지 브레인 스토밍을 해본 흥미로운 문제가 있습니다.주어진 key value 쌍을 만족하고 참을 반환하는 모든 규칙을 찾으십시오.
키/값 쌍과 정의 된 규칙/쿼리가있는 시스템/도구가있는 개체가 있으면 true를 반환하는 모든 규칙을 찾습니다.
{
"FirstName": "John",
"LastName": "Smith",
"Age": 28,
"Gender": "Male",
"Location": "USA"
}
을 그리고 몇 가지 규칙을 제공 :
는 예를 들어 사람을 주어진
Rule 1: Location = USA AND (Gender = Male OR Age < 20)
Rule 2: Location != USA AND (Gender = Female OR Age > 25)
나는 시스템이 객체 주어진 사실이 될 것입니다 모든 규칙을 반환하는 기대. 그런 다음 사실 인 규칙에 따라 특정 조치를 취하십시오.
간단한 예입니다. 재미 비트 : 전달 된 객체가 서로 다른 키 \ 값 쌍의 수에는 제한이 없습니다
- 의 조합을 포함 할 수 있습니다
- 규칙을 실행해야하는 다른 규칙의 수백 또는 수천이있을 수 있습니다 키 값 쌍
- 성능 및 유용성은 .NET 응용 프로그램
의 세제곱에 대한 아이디어 키
do map reduce는 객체에서 키를 포함하는 규칙 만 반환합니다. 이렇게하면 실행해야하는 규칙 수가 줄어들지 만 여전히 수백 가지 규칙이 될 수 있습니다.
각 규칙을 가져 와서 주어진 값으로 실행하여 참을 반환하는지 확인하십시오.
더 좋은 방법이 있나요? 이미이 작업을 수행 할 수있는 도구 (잘만되면 오픈 소스)가 있습니까?
검색 결과가 그리 많이 돌아 오지 않았기 때문에 적절한 검색을 수행 할 수 없다고 생각합니다.
편집
일부는 더 많은 온라인 검색, 알고 보니 한 후이 Rete Algorithm와 닷넷과 자바 세계에서 수많은 구현을 사용하여 풀 수있다.
현재이 길로 향하고 있습니다. 누구든지 더 좋은 제안이 있으면 그들을 제공하십시오. 별도의 단계가
그냥 테스트 최대한 빨리
private bool? ruleMe (person p, rule r)
{
foreach (string rKey in r.ExtractKeys())
if(!p.ContainsKey(rKey)) return (bool?)null;
// process r
}
을 중지지도 또는 두 가지 모두 객체 지정된 키
public class person
{
private HashSet<String> hSkey;
public HashSet<String> HSkey
{
if (hSkey == null)
{
hSkey = new HashSet<String>();
// populate hSkey
}
return hSkey;
}
}
private bool? ruleMe (person p, rule r)
{
if(!r.HSkey.IsProperSubset(p.HSkey)) // O(n of r.HSKey)
return (bool?)null;
// process r
}
의 HaskSet를 만들 확장하는 이유는 –
Intesting 문제 - Windows Workflow Foundation에는 추론 규칙 엔진 (System.Workflow.Activities.Rules)이 포함되어 있지만 매핑 할 인텔리전스가 없습니다. 행운을 빕니다. –
개체가 있으면 해당 개체에 대해 true 인 모든 규칙을 반환합니다. – Zadam