2015-01-13 6 views
1

여기에 제가 지금까지 브레인 스토밍을 해본 흥미로운 문제가 있습니다.주어진 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 응용 프로그램

의 세제곱에 대한 아이디어 키

  • 사용 가능하다 stom 구현은 다음과 같습니다.

    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 
    } 
    
  • +0

    의 HaskSet를 만들 확장하는 이유는 –

    +0

    Intesting 문제 - Windows Workflow Foundation에는 추론 규칙 엔진 (System.Workflow.Activities.Rules)이 포함되어 있지만 매핑 할 인텔리전스가 없습니다. 행운을 빕니다. –

    +0

    개체가 있으면 해당 개체에 대해 true 인 모든 규칙을 반환합니다. – Zadam

    답변

    1

    은 할 당신은 목록을 원하는 그 객체에 맞는 규칙?또는 몇몇 규칙이 그 규칙을 만족시키는 모든 객체를 얻는다면?
    +0

    내 경로는 성능입니다. 수백 개의 속성과 수천 개의 규칙을 가진 객체가 주어집니다. – Zadam

    +0

    피곤 하신가요? IsProperSubset보다 더 빠른 것은 무엇입니까? – Paparazzi

    +0

    정말 걱정거리입니다. 나는 단지 1,000 개의 물체로 각각 100 개의 속성을 테스트했고, P4의 TOTAL 시간은 각각 4 분으로 10000 개의 속성을 테스트했습니다. 4 초가 성능 문제입니까? 너 뭐 찾고있어? – Paparazzi