写了个图形化显示知识库的功能,不常用,怕忘了,要点记录一下
1.推理机使用jsr94,实现用jess
2.图形显示用graphiz,java显示部分用idot,好多bug,幸好源代码很少,复制进来直接修改,里面用到prefuse.jar也有bug,绕过去吧,graphiz自己在网上下,idot带的有的时候生成不出图形来
3.jsr94尽量采用无状态的session
StatelessRuleSession statelessRuleSession = (StatelessRuleSession) ruleRuntime .createRuleSession(uri, new HashMap(), RuleRuntime.STATELESS_SESSION_TYPE);
这样可以模拟用户的回答预先得到下级节点,如果用StatefulRuleSession就没办法做到了
缺点是workmemory(workmemory对应的概念是状态空间)自己维护,比较占内存
List<Object> workmemory = new ArrayList<Object>(); //workmemory.add(...); //workmemory.add(...); workmemory = session.executeRules(workmemory);
4.知识库中最好不要修改传入的参数
尽量采用 request,response的方式,回复都放在response中,request不变化,否则会影响到外部变量
5.搜索方式采用广度有限搜索,符合图形显示的要求,可以一级一级展开
6.这种方式完全可以用于数据状态的图形化显示,只要去掉推理机
状态经过事件出发转换为新的状态,只要根据状态能得到允许的所有事件,例如一个单据处于制单状态,允许的所有事件是固定的(审核,修改,作废)