zoukankan      html  css  js  c++  java
  • WF Rules的执行过程

    不同于BizTalk中的基于Rete算法的引擎实现,WF仅仅利用基于优先级的演绎过程来分析结果。而且是基于对象实例而非类型。

    1) 首先把RuleSet中Rule按照优先级进行排序,若优先级相同,则按照Rule的名称Name来进行排序。并且所有的Pending标记均设置为True(其含义是当前的Rule的Action是否执行过,可否作为重新执行的候选)。
    2) 依次计算Rule的condition,每当Rule.Condition = true,执行Then Action ,若为false ,执行Else Action(若存在的话),若执行过Action(不论是ThenAction还是Else Action)则把Pending标记设置为false。
    3) 评估执行Action的结论,是否影响到了优先级比自己高的某些Rule的condition,若存在,并且此Rule不满足Reevaluation==Nevel && pending==false的条件(也就是说满足待选的条件),则执行之(当然此Rule也可能对其他Rule的条件产生影响,递归之)。
    4)当所有受其影响的Rule执行完毕,重新想下执行下一个Rule。
    5)直到最后一个Rule(及其Affacted Rules)执行完毕。
  • 相关阅读:
    [BZOJ4034][HAOI2015]树上操作
    [BZOJ1030][JSOI2007]文本生成器
    [BZOJ2763][JLOI2011]飞行路线
    [POJ3667]Hotel
    [codevs1566]染色
    [codevs2460]树的统计
    [BZOJ2667][cqoi2012][kcoj]模拟工厂
    [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
    [POJ1087]A Plug for UNIX
    Educational Round 66 题解
  • 原文地址:https://www.cnblogs.com/headchen/p/824118.html
Copyright © 2011-2022 走看看