지금 작업하고있는 응용 프로그램에서 일종의 서비스에 대한 수만 가지 개체의 적합성을 주기적으로 확인해야합니다. 의사 결정 다이어그램 그 자체는 다음과 같은 형태로되어 있습니다. 의사 결정 트리 및 규칙 엔진 (Drools)
각 끝 노드 (원)에서 동작 (개체 필드, 로그 정보 등 변경)을 실행해야합니다. Drool Expert 프레임 워크를 사용해 보았습니다. 그러나이 경우 다이어그램의 모든 경로에 대해 긴 노드를 작성해야합니다. Drools Flow는 이러한 유스 케이스를 위해 구축 된 것 같지 않습니다 - 객체를 가져온 다음 결정 과정에 따라 최종 노드 중 하나에서 끝납니다. 다른 객체에 대해 다시 아니면 그렇지? 그러한 솔루션에 대한 몇 가지 예/링크를 제공해 주시겠습니까?
UPDATE :
Drools가 흐름은 다음과 같을 수 호출 : 나는 그것을 위해 새로운 프로세스를 응용 프로그램 개체을 시작했으면, 프로세스가 완료되는 때이다
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();
for(int i = 0; i < 10000; i++) {
Application app = somehowGetAppById(i);
// insert app into working memory
FactHandle appHandle = ksession.insert(app);
// app variable for action nodes
params.put("app", app);
// start a new process instance
ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
while(true) {
if(instance.getState() == instance.STATE_COMPLETED) {
break;
}
}
// remove object from working memory
ksession.retract(appHandle);
}
(최종, 작업 노드가 어떻게 든 응용 프로그램을 수정할 것입니다) 작업 메모리에서 객체를 제거하고 새 App 객체에 대한 프로세스를 반복합니다. 이 솔루션에 대해 어떻게 생각하십니까?
해결 방법 :
나는 Drools가 흐름을 사용하여 종료했는데 꽤 잘 작동되었습니다. 내 결정 과정은 Drools Expert가 묻는 것처럼 간단하지 않으며 의사 결정 트리에서 데이터베이스의 개체 목록을로드하고 변환하며 결정을 내리고 모든 것을 기록해야합니다. 프로세스 개체를 사용합니다. 이것은 매개 변수로 프로세스에 전달되고 내 전역 변수 (프로세스 용)와 트리의 다른 지점에서 반복되는 일부 편리한 메소드를 저장합니다. Script Task
노드의 Java 코드 작성은 그다지 편리하지 않습니다. 또한 결정을 내리기 위해 Java를 사용하는 것으로 끝났습니다 (mvel
또는 규칙이 아님) - 더 빠르고 더 쉽게 제어 할 수 있습니다. 내가 작업하는 모든 객체는 매개 변수로 전달되고 코드에서 일반적인 Java 변수로 사용됩니다.
또한 의사 결정 트리가 커짐에 따라 일부 종말점이 행동을 공유한다는 것을 알 수 있습니다 (예 : 퇴직자가 성별과 상관없이 연금을받을 필요가 있음). 종말마다 해당 행동을 다시 선언하는 것은 비효율적입니다. –
Drools Flow는 어떻게됩니까? 나는 그것을 사용하여 의사 결정 트리를 모델링 할 수 있습니다. 그리고 나서 하나의 객체를 작업 메모리에 넣고, 프로세스를 시작하고, 어떤 노드를 가지고 갈지 결정한 다음, 객체를 꺼내고, 다른 객체를 넣고, 다시 시작하는 등의 작업을 할 수 있습니다. ? 그게 더 명확한 해결책이 아닌가? –
Drools Flow가 의미가 없습니다. 그것이 작동하지 않는다고 말하는 것은 아니지만 결정을 내려야하기 때문에 규칙 엔진으로 구현 된 결정 테이블은 훨씬 더 논리적/자연적으로 느껴집니다. 워크 플로우에 맞추려고 노력합니다. 워크 플로우가 오래 지속되며, 각 노드는 상태입니다. –