임시 연산자를 기반으로 값을 수집/누적하는 규칙을 작성하려고합니다.임시 연산자를 기반으로 누적/수집
rule "Zone6 Overlap"
when
$i1 : Instance ($e1 : event == " Vel : 20.99-23.98 km/h : " && $name1 : name) from entry-point "Stream"
$i2 : Instance ($e2 : event && $name2 : name && $e2 == $e1 && $name2 != $name1
&& this overlaps $i1) from entry-point "Stream"
then
System.out.println("** Overlap Event: Velocity Zone 6 ** \nPlayer1: " + $i1.getName() + "\nPlayer2: "
+ $i2.getName() + "\nEvent: " + $i1.getEvent() + "\n" + "Start Time (P1): "
+ $i1.getStart() + " - End Time: " + $i1.getEnd() + "\nStart Time (P2): "
+ $i2.getStart() + " - End Time: " + $i2.getEnd() + "\n");
end
이것은 두 기간의 중복을 관리하는 원래의 규칙입니다.
내가 만들고자하는 규칙의 아이디어는 축구 경기에서 플레이어의 지속 시간이 겹치는 지 확인하는 것입니다. 필드의 9 명까지의 플레이어가 모두 이벤트 변수의 문자열로 지정된 속도 범위로 이동하고 있는지, 한 번에 모두 겹쳐 지는지 확인하고 싶습니다.
누적 및 수집과 관련된 몇 가지 사항을 시도했지만 이러한 이벤트가 발생했을 때 이러한 이벤트를 수집하여 규칙의 오른쪽으로 돌아가서 표준 출력으로 인쇄 할 수있는 방법에 어려움을 겪었습니다.
도와주세요.
감사합니다.
아하나. 그렇습니다. 기본적으로 시간 연산자 (overlaps)는 틀린 방식으로 라운드되었습니다 (overlappedby 여야합니다). 그리고 수집 기능 대신 누적 기능을 사용해야합니다. Drools 문서 (packt에 의해 쓰여진 책 포함)는 누적 기능을 많이 추진하고있는 것 같습니다. 그래서 왜 내가 그것을 사용할지 여부를 혼란 스러웠습니다. 어쨌든, 도와 줘서 고마워. – Stu
반갑습니다. 괜찮으 시다면 제 대답을 받아 들일 수 있습니까? –
완료. 그냥 나를 위해 빠른 질문에 대답 할 수 있을지 궁금해 : Ive는 목록이며 특정 개체로 채워진 전역 변수를 선언했습니다. 조건이 충족 된 후 RHS에서 전역 배열 내의 해당 객체에 대한 메소드를 호출하는 방법을 알고 있습니까? 감사. – Stu