From: <jbo...@li...> - 2006-05-31 07:15:03
|
Author: mar...@jb... Date: 2006-05-31 03:14:53 -0400 (Wed, 31 May 2006) New Revision: 4509 Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.png labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.svg labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Chaining.vsd labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.png labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.svg Modified: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-What_is_a_Rule_Engine.xml Log: -Added diagrams for forward and backward chaining Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.png =================================================================== (Binary files differ) Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.svg =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.svg 2006-05-31 06:46:54 UTC (rev 4508) +++ labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Backward_Chaining.svg 2006-05-31 07:14:53 UTC (rev 4509) @@ -0,0 +1,458 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 Backward_Chaining.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="6.11267in" + height="7.69667in" viewBox="0 0 440.112 554.16" xml:space="preserve" color-interpolation-filters="sRGB" class="st9"> + <v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false"/> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#e8eef7;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {font-size:1em} + .st4 {marker-end:url(#mrkr4-65);stroke:#4677bf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st5 {fill:#4677bf;fill-opacity:1;stroke:#4677bf;stroke-opacity:1;stroke-width:0.08695652173913} + .st6 {marker-end:url(#mrkr4-65);stroke:#4677bf;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st7 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2} + .st8 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st9 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend4"> + <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/> + </g> + <marker id="mrkr4-65" class="st5" v:arrowType="4" v:arrowSize="2" v:setback="23" refX="-23" orient="auto" + markerUnits="strokeWidth"> + <use xlink:href="#lend4" transform="scale(-11.5,-11.5) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Flowchart" v:index="0"/> + <v:layer v:name="Connector" v:index="1"/> + <g id="shape8-1" v:mID="8" v:groupContext="shape" v:layerMember="0" transform="translate(213.763,-464.697)"> + <title>Process.8</title> + <desc>Examine working memory and goals to see if goals are “known” ...</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="50.315" cy="523.971" width="100.63" height="60.378"/> + <rect x="0" y="493.782" width="100.63" height="60.378" rx="8.50394" ry="8.50394" class="st1"/> + <text x="4.31" y="511.97" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Examine working memory <tspan + x="7.18" dy="1.2em" class="st3">and goals to see if goals </tspan><tspan x="16.98" dy="1.2em" class="st3">are “known” true in </tspan><tspan + x="21.41" dy="1.2em" class="st3">knowledge base</tspan></text> </g> + <g id="shape9-7" v:mID="9" v:groupContext="shape" v:layerMember="0" transform="translate(360.302,-472.701)"> + <title>Process (circle).9</title> + <desc>Working Memory</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="22.1842" cy="531.976" width="44.37" height="44.3684"/> + <path d="M0 531.98 A22.1842 22.1842 0 0 1 44.37 531.98 A22.1842 22.1842 0 1 1 0 531.98 Z" class="st1"/> + <text x="7.51" y="529.58" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Working<v:newlineChar/><tspan + x="7.73" dy="1.2em" class="st3">Memory</tspan></text> </g> + <g id="shape10-11" v:mID="10" v:groupContext="shape" v:layerMember="0" transform="translate(20.5755,-509.552)"> + <title>Process (circle).10</title> + <desc>Rule Base</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="22.1842" cy="531.976" width="44.37" height="44.3684"/> + <path d="M0 531.98 A22.1842 22.1842 0 0 1 44.37 531.98 A22.1842 22.1842 0 1 1 0 531.98 Z" class="st1"/> + <text x="13.95" y="529.58" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Rule<v:newlineChar/><tspan + x="13.06" dy="1.2em" class="st3">Base</tspan></text> </g> + <g id="shape11-15" v:mID="11" v:groupContext="shape" v:layerMember="0" transform="translate(20.5755,-437.768)"> + <title>Process (circle).11</title> + <desc>Goal</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="22.1842" cy="531.976" width="44.37" height="44.3684"/> + <path d="M0 531.98 A22.1842 22.1842 0 0 1 44.37 531.98 A22.1842 22.1842 0 1 1 0 531.98 Z" class="st1"/> + <text x="13.73" y="534.38" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Goal</text> </g> + <g id="shape12-18" v:mID="12" v:groupContext="shape" v:layerMember="0" transform="translate(228.645,-370.618)"> + <title>Decision.12</title> + <desc>Do goals match?</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="532.9" width="59.06" height="31.8898"/> + <path d="M0 532.9 L35.43 511.64 L70.87 532.9 L35.43 554.16 L0 532.9 Z" class="st1"/> + <text x="19.64" y="530.5" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Do goals <tspan + x="22.31" dy="1.2em" class="st3">match</tspan>?</text> </g> + <g id="shape13-22" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(115.043,-379.122)"> + <title>Process.13</title> + <desc>Return True</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="541.404" width="42.52" height="25.5118"/> + <rect x="0" y="528.648" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="9.24" y="539" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Return <tspan x="13.03" + dy="1.2em" class="st3">True</tspan></text> </g> + <g id="shape14-26" v:mID="14" v:groupContext="shape" v:layerMember="0" transform="translate(157.563,-310.634)"> + <title>Process.14</title> + <desc>Return False</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="541.404" width="42.52" height="25.5118"/> + <rect x="0" y="528.648" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="9.24" y="539" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Return <tspan x="11.47" + dy="1.2em" class="st3">False</tspan></text> </g> + <g id="shape15-30" v:mID="15" v:groupContext="shape" v:layerMember="0" transform="translate(213.547,-237.925)"> + <title>Process.15</title> + <desc>Determine next possible rules to fire by checking conclusions...</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="50.315" cy="523.971" width="100.63" height="60.378"/> + <rect x="0" y="493.782" width="100.63" height="60.378" rx="8.50394" ry="8.50394" class="st1"/> + <text x="7.41" y="516.77" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Determine next possible <tspan + x="8.31" dy="1.2em" class="st3">rules to fire by checking </tspan><tspan x="10.97" dy="1.2em" class="st3">conclusions and goals</tspan></text> </g> + <g id="shape16-35" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(228.429,-169.185)"> + <title>Decision.16</title> + <desc>Select Rule to Fire</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="532.9" width="59.06" height="31.8898"/> + <path d="M0 532.9 L35.43 511.64 L70.87 532.9 L35.43 554.16 L0 532.9 Z" class="st1"/> + <text x="10.53" y="530.5" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Select Rule to <tspan + x="28.54" dy="1.2em" class="st3">Fire</tspan></text> </g> + <g id="shape17-39" v:mID="17" v:groupContext="shape" v:layerMember="0" transform="translate(347.484,-162.098)"> + <title>Process (circle).17</title> + <desc>Conflict Resolution Strategy</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="525.814" width="56.7" height="56.6929"/> + <path d="M0 525.81 A28.3465 28.3465 0 1 1 56.69 525.81 A28.3465 28.3465 0 1 1 0 525.81 Z" class="st1"/> + <text x="15.01" y="518.61" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Conflict<v:newlineChar/><tspan + x="9.45" dy="1.2em" class="st3">Resolution<v:newlineChar/></tspan><tspan x="13.45" dy="1.2em" class="st3">Strategy</tspan></text> </g> + <g id="shape18-44" v:mID="18" v:groupContext="shape" v:layerMember="0" transform="translate(123.547,-177.689)"> + <title>Process.18</title> + <desc>Fire Rule</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="541.404" width="42.52" height="25.5118"/> + <rect x="0" y="528.648" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="5.02" y="543.8" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Fire Rule</text> </g> + <g id="shape19-47" v:mID="19" v:groupContext="shape" v:layerMember="0" transform="translate(0.24,-228.996)"> + <title>Process.19</title> + <desc>For each rule condition, recursively backchain with condition...</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="42.5197" cy="527.515" width="85.04" height="53.2913"/> + <rect x="0" y="500.869" width="85.0394" height="53.2913" rx="8.50394" ry="8.50394" class="st1"/> + <text x="18.96" y="515.51" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>For each rule <tspan + x="5.18" dy="1.2em" class="st3">condition</tspan>, recursively <tspan x="16.29" dy="1.2em" class="st3">backchain with </tspan><tspan + x="11.39" dy="1.2em" class="st3">condition as goal</tspan>.</text> </g> + <g id="shape20-53" v:mID="20" v:groupContext="shape" v:layerMember="0" transform="translate(7.32661,-42.7597)"> + <title>Decision.20</title> + <desc>All recursion returns true?</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="526.522" width="59.06" height="41.4567"/> + <path d="M0 526.52 L35.43 498.88 L70.87 526.52 L35.43 554.16 L0 526.52 Z" class="st1"/> + <text x="13.42" y="524.12" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>All recursion <tspan + x="12.75" dy="1.2em" class="st3">returns true</tspan>?</text> </g> + <g id="shape21-57" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(341.815,-0.24)"> + <title>Process.21</title> + <desc>true</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="541.404" width="42.52" height="25.5118"/> + <rect x="0" y="528.648" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="14.36" y="543.8" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>true</text> </g> + <g id="shape31-60" v:mID="31" v:groupContext="shape" v:layerMember="1" transform="translate(64.9439,-531.736)"> + <title>Dynamic connector.31</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L10.63 554.16 A10.6299 10.6299 0 0 1 21.26 564.79 L21.26 564.79 A26.2205 26.2205 -180 0 0 47.48 591.01 + L143.3 591.01" class="st4"/> + </g> + <g id="shape32-66" v:mID="32" v:groupContext="shape" v:layerMember="1" transform="translate(64.9439,-459.952)"> + <title>Dynamic connector.32</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L10.63 554.16 A10.6299 10.6299 -180 0 0 21.26 543.53 L21.26 543.53 A24.304 24.304 0 0 1 45.56 519.23 + L143.3 519.23" class="st4"/> + </g> + <g id="shape33-71" v:mID="33" v:groupContext="shape" v:layerMember="1" transform="translate(35.6731,-282.287)"> + <title>Dynamic connector.33</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M7.09 554.16 L7.09 404.2" class="st4"/> + </g> + <g id="shape34-76" v:mID="34" v:groupContext="shape" v:layerMember="1" transform="translate(136.303,-379.122)"> + <title>Dynamic connector.34</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L0 649.36 L-0 677.64 L-45.5 677.64" class="st6"/> + </g> + <g id="shape35-81" v:mID="35" v:groupContext="shape" v:layerMember="1" transform="translate(157.563,-323.39)"> + <title>Dynamic connector.35</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L-21.26 554.16 L-21.26 621.91 L-66.76 621.91" class="st6"/> + </g> + <g id="shape36-86" v:mID="36" v:groupContext="shape" v:layerMember="1" transform="translate(228.645,-384.791)"> + <title>Dynamic connector.36</title> + <desc>yes</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="-35.5409" cy="547.074" width="40" height="17.6036"/> + <path d="M0 547.07 L-65.56 547.07" class="st4"/> + <rect v:rectContext="textBkgnd" x="-42.1406" y="542.274" width="12.4494" height="9.59985" class="st7"/> + <text x="-41.77" y="549.47" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>yes</text> </g> + <g id="shape37-93" v:mID="37" v:groupContext="shape" v:layerMember="1" transform="translate(264.078,-370.618)"> + <title>Dynamic connector.37</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L0 601.39 L-58.48 601.39" class="st6"/> + </g> + <g id="shape38-98" v:mID="38" v:groupContext="shape" v:layerMember="1" transform="translate(271.057,-370.618)"> + <title>Dynamic connector.38</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M-6.98 554.16 L-6.98 575.42 L-7.19 575.42 L-7.19 620.96" class="st4"/> + </g> + <g id="shape39-103" v:mID="39" v:groupContext="shape" v:layerMember="1" transform="translate(270.949,-237.925)"> + <title>Dynamic connector.39</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M-7.09 554.16 L-7.09 574.86" class="st4"/> + </g> + <g id="shape40-108" v:mID="40" v:groupContext="shape" v:layerMember="1" transform="translate(270.949,-169.185)"> + <title>Dynamic connector.40</title> + <desc>No Rule Found</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="-7.08661" cy="581.94" width="42.11" height="27.2035"/> + <path d="M-7.09 554.16 L-7.09 604.2" class="st4"/> + <rect v:rectContext="textBkgnd" x="-21.913" y="572.34" width="28.9023" height="19.1997" class="st7"/> + <text x="-21.54" y="579.54" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>No Rule <v:newlineChar/><tspan + x="-18.43" dy="1.2em" class="st3">Found</tspan></text> </g> + <g id="shape41-116" v:mID="41" v:groupContext="shape" v:layerMember="0" transform="translate(242.602,-88.114)"> + <title>Process.41</title> + <desc>Exist</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="541.404" width="42.52" height="25.5118"/> + <rect x="0" y="528.648" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="12.58" y="543.8" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Exist</text> </g> + <g id="shape42-119" v:mID="42" v:groupContext="shape" v:layerMember="1" transform="translate(42.7597,-42.7597)"> + <title>Dynamic connector.42</title> + <desc>Goals found to be true, exist, returning true</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="2"/> + <v:textRect cx="134.646" cy="583.924" width="163.07" height="17.6036"/> + <path d="M0 554.16 L0 583.92 L293.54 583.92" class="st4"/> + <rect v:rectContext="textBkgnd" x="58.2236" y="579.126" width="152.084" height="9.59985" class="st7"/> + <text x="58.6" y="586.33" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Goals found to be true, exist, returning true</text> </g> + <g id="shape43-126" v:mID="43" v:groupContext="shape" v:layerMember="1" transform="translate(35.6731,-228.996)"> + <title>Dynamic connector.43</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M7.09 554.16 L7.09 679.6" class="st4"/> + </g> + <g id="shape44-131" v:mID="44" v:groupContext="shape" v:layerMember="1" transform="translate(228.429,-183.358)"> + <title>Dynamic connector.44</title> + <desc>Rule Found</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="-31.1811" cy="547.074" width="40" height="27.2035"/> + <path d="M0 547.07 L-56.84 547.07" class="st4"/> + <rect v:rectContext="textBkgnd" x="-42.8977" y="537.474" width="22.6835" height="19.1997" class="st7"/> + <text x="-39.41" y="544.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Rule <v:newlineChar/><tspan + x="-42.52" dy="1.2em" class="st3">Found</tspan></text> </g> + <g id="shape45-139" v:mID="45" v:groupContext="shape" v:layerMember="1" transform="translate(123.547,-190.445)"> + <title>Dynamic connector.45</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L-21.26 554.16 L-21.26 488.96 L-32.75 488.96" class="st4"/> + </g> + <g id="shape46-144" v:mID="46" v:groupContext="shape" v:layerMember="1" transform="translate(347.484,-183.358)"> + <title>Dynamic connector.46</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 547.07 L-42.67 547.07" class="st4"/> + </g> + <g id="shape47-149" v:mID="47" v:groupContext="shape" v:layerMember="1" transform="translate(360.302,-487.799)"> + <title>Dynamic connector.47</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 547.07 L-40.39 547.07" class="st4"/> + </g> + <g id="shape48-154" v:mID="48" v:groupContext="shape" v:layerMember="1" transform="translate(78.1928,-70.3975)"> + <title>Dynamic connector.48</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 554.16 L355.75 554.16 L355.75 356.44 L241.5 356.44" class="st4"/> + </g> + <g id="shape49-159" v:mID="49" v:groupContext="shape" transform="translate(596.92,504.755) rotate(90)"> + <title>Sheet.49</title> + <desc>Yes</desc> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="19.622" cy="548.16" width="39.25" height="12"/> + <rect x="0" y="542.16" width="39.2441" height="12" class="st8"/> + <text x="12.73" y="550.56" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Yes</text> </g> + <g id="shape51-162" v:mID="51" v:groupContext="shape" transform="translate(136.303,-58.3975)"> + <title>Sheet.51</title> + <desc>One or more goals failed, Check next matching rule</desc> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="100.472" cy="548.16" width="200.95" height="12"/> + <rect x="0" y="542.16" width="200.945" height="12" class="st8"/> + <text x="9.32" y="550.56" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>One or more goals failed, Check next matching rule</text> </g> + <g id="shape52-165" v:mID="52" v:groupContext="shape" transform="translate(-511.401,236.834) rotate(-90)"> + <title>Sheet.52</title> + <desc>Recursively back-chain</desc> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="50" cy="548.16" width="100.01" height="12"/> + <rect x="0" y="542.16" width="100" height="12" class="st8"/> + <text x="8.87" y="550.56" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Recursively back-chain</text> </g> + <g id="shape53-168" v:mID="53" v:groupContext="shape" transform="translate(-497.983,266.597) rotate(-90)"> + <title>Sheet.53</title> + <desc>Each condition of fired rule is a goal</desc> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="71.2598" cy="548.16" width="142.52" height="12"/> + <rect x="0" y="542.16" width="142.52" height="12" class="st8"/> + <text x="7.88" y="550.56" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Each condition of fired rule is a goal</text> </g> + <g id="shape54-171" v:mID="54" v:groupContext="shape" transform="translate(269.531,-311.39)"> + <title>Sheet.54</title> + <desc>No (return false to recursive procedure)</desc> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="68.0315" cy="548.16" width="136.07" height="12"/> + <rect x="0" y="542.16" width="136.063" height="12" class="st8"/> + <text x="62.91" y="545.76" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>No <v:newlineChar/><tspan + x="4.44" dy="1.2em" class="st3">(</tspan>return false to recursive procedure)</text> </g> + <g id="shape56-175" v:mID="56" v:groupContext="shape" v:layerMember="1" transform="translate(256.991,-464.697)"> + <title>Dynamic connector.56</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M7.09 554.16 L7.09 600.2" class="st4"/> + </g> + </g> +</svg> Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Chaining.vsd =================================================================== (Binary files differ) Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Chaining.vsd ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.png =================================================================== (Binary files differ) Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.svg =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.svg 2006-05-31 06:46:54 UTC (rev 4508) +++ labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Forward_Chaining.svg 2006-05-31 07:14:53 UTC (rev 4509) @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 Forward_Chaining.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.61981in" + height="3.28722in" viewBox="0 0 332.627 236.68" xml:space="preserve" color-interpolation-filters="sRGB" class="st7"> + <v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false"/> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#e8eef7;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {font-size:1em} + .st4 {marker-end:url(#mrkr4-34);stroke:#4677bf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st5 {fill:#4677bf;fill-opacity:1;stroke:#4677bf;stroke-opacity:1;stroke-width:0.08695652173913} + .st6 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2} + .st7 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend4"> + <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/> + </g> + <marker id="mrkr4-34" class="st5" v:arrowType="4" v:arrowSize="2" v:setback="23" refX="-23" orient="auto" + markerUnits="strokeWidth"> + <use xlink:href="#lend4" transform="scale(-11.5,-11.5) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Flowchart" v:index="0"/> + <v:layer v:name="Connector" v:index="1"/> + <g id="shape1-1" v:mID="1" v:groupContext="shape" v:layerMember="0" transform="translate(176.481,-71.1061)"> + <title>Decision</title> + <desc>Select Rule to Fire</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="215.42" width="59.06" height="31.8898"/> + <path d="M0 215.42 L35.43 194.16 L70.87 215.42 L35.43 236.68 L0 215.42 Z" class="st1"/> + <text x="24.31" y="213.02" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Select <v:newlineChar/><tspan + x="14.76" dy="1.2em" class="st3">Rule to Fire</tspan></text> </g> + <g id="shape2-5" v:mID="2" v:groupContext="shape" v:layerMember="0" transform="translate(176.481,-162.523)"> + <title>Process</title> + <desc>Determine possible rules to fire</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="215.42" width="70.87" height="42.5197"/> + <rect x="0" y="194.16" width="70.8661" height="42.5197" rx="8.50394" ry="8.50394" class="st1"/> + <text x="16.97" y="208.22" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Determine <tspan + x="6.52" dy="1.2em" class="st3">possible rules to </tspan><tspan x="29.87" dy="1.2em" class="st3">fire</tspan></text> </g> + <g id="shape3-10" v:mID="3" v:groupContext="shape" v:layerMember="0" transform="translate(190.654,-0.24)"> + <title>Process.3</title> + <desc>exit</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="223.924" width="42.52" height="25.5118"/> + <rect x="0" y="211.168" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="15.03" y="226.32" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>exit</text> </g> + <g id="shape4-13" v:mID="4" v:groupContext="shape" v:layerMember="0" transform="translate(0.24,-79.6101)"> + <title>Process.4</title> + <desc>Fire Rule</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="223.924" width="42.52" height="25.5118"/> + <rect x="0" y="211.168" width="42.5197" height="25.5118" rx="8.50394" ry="8.50394" class="st1"/> + <text x="5.02" y="226.32" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Fire Rule</text> </g> + <g id="shape5-16" v:mID="5" v:groupContext="shape" v:layerMember="0" transform="translate(47.0733,-192.072)"> + <title>Process (circle)</title> + <desc>Rule Base</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="22.1842" cy="214.496" width="44.37" height="44.3684"/> + <path d="M0 214.5 A22.1842 22.1842 0 0 1 44.37 214.5 A22.1842 22.1842 0 1 1 0 214.5 Z" class="st1"/> + <text x="13.95" y="212.1" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Rule<v:newlineChar/><tspan + x="13.06" dy="1.2em" class="st3">Base</tspan></text> </g> + <g id="shape6-20" v:mID="6" v:groupContext="shape" v:layerMember="0" transform="translate(47.0733,-131.127)"> + <title>Process (circle).6</title> + <desc>Working Memory</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="22.1842" cy="214.496" width="44.37" height="44.3684"/> + <path d="M0 214.5 A22.1842 22.1842 0 0 1 44.37 214.5 A22.1842 22.1842 0 1 1 0 214.5 Z" class="st1"/> + <text x="7.51" y="212.1" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Working<v:newlineChar/><tspan + x="7.73" dy="1.2em" class="st3">Memory</tspan></text> </g> + <g id="shape7-24" v:mID="7" v:groupContext="shape" v:layerMember="0" transform="translate(275.694,-64.0195)"> + <title>Process (circle).7</title> + <desc>Conflict Resolution Strategy</desc> + <v:custProps> + <v:cp v:nameU="Cost" v:lbl="Cost" v:type="7" v:format="@" v:langID="1033"/> + <v:cp v:nameU="Duration" v:lbl="Duration" v:type="2" v:langID="1033"/> + <v:cp v:nameU="Resources" v:lbl="Resources" v:langID="1033"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="208.333" width="56.7" height="56.6929"/> + <path d="M0 208.33 A28.3465 28.3465 0 1 1 56.69 208.33 A28.3465 28.3465 0 1 1 0 208.33 Z" class="st1"/> + <text x="15.01" y="201.13" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Conflict<v:newlineChar/><tspan + x="9.45" dy="1.2em" class="st3">Resolution<v:newlineChar/></tspan><tspan x="13.45" dy="1.2em" class="st3">Strategy</tspan></text> </g> + <g id="shape22-29" v:mID="22" v:groupContext="shape" v:layerMember="1" transform="translate(176.481,-85.2794)"> + <title>Dynamic connector</title> + <desc>Rule Found</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="-66.8607" cy="229.593" width="40" height="27.2035"/> + <path d="M0 229.59 L-128.2 229.59" class="st4"/> + <rect v:rectContext="textBkgnd" x="-78.5772" y="219.994" width="22.6835" height="19.1997" class="st6"/> + <text x="-75.09" y="227.19" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Rule<v:newlineChar/><tspan + x="-78.2" dy="1.2em" class="st3">Found</tspan></text> </g> + <g id="shape23-38" v:mID="23" v:groupContext="shape" v:layerMember="1" transform="translate(21.4998,-105.122)"> + <title>Dynamic connector.23</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 236.68 L0 188.49 L20.05 188.49" class="st4"/> + </g> + <g id="shape24-43" v:mID="24" v:groupContext="shape" v:layerMember="1" transform="translate(21.4998,-105.122)"> + <title>Dynamic connector.24</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 236.68 L0 127.55 L20.05 127.55" class="st4"/> + </g> + <g id="shape25-48" v:mID="25" v:groupContext="shape" v:layerMember="1" transform="translate(91.4416,-214.256)"> + <title>Dynamic connector.25</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 236.68 L10.63 236.68 A10.6299 10.6299 0 0 1 21.26 247.31 L21.26 247.31 A19.8425 19.8425 -180 0 0 41.1 267.15 + L79.52 267.15" class="st4"/> + </g> + <g id="shape26-53" v:mID="26" v:groupContext="shape" v:layerMember="1" transform="translate(91.4416,-153.311)"> + <title>Dynamic connector.26</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 236.68 L10.63 236.68 A10.6299 10.6299 -180 0 0 21.26 226.05 L21.26 226.05 A19.8425 19.8425 0 0 1 41.1 206.21 + L79.52 206.21" class="st4"/> + </g> + <g id="shape27-58" v:mID="27" v:groupContext="shape" v:layerMember="1" transform="translate(204.827,-162.523)"> + <title>Dynamic connector.27</title> + <desc>Conflict Set</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="7.08661" cy="261.129" width="51.89" height="17.6036"/> + <path d="M7.09 236.68 L7.09 280.06" class="st4"/> + <rect v:rectContext="textBkgnd" x="-13.7318" y="256.329" width="40.9057" height="9.59985" class="st6"/> + <text x="-13.36" y="263.53" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Conflict Set</text> </g> + <g id="shape28-65" v:mID="28" v:groupContext="shape" v:layerMember="1" transform="translate(204.827,-71.1061)"> + <title>Dynamic connector.28</title> + <desc>No Rule Found</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="7.08661" cy="259.357" width="40" height="27.2035"/> + <path d="M7.09 236.68 L7.09 276.51" class="st4"/> + <rect v:rectContext="textBkgnd" x="-7.73937" y="249.757" width="28.9023" height="19.1997" class="st6"/> + <text x="-7.36" y="256.96" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>No Rule<v:newlineChar/><tspan + x="-4.26" dy="1.2em" class="st3">Found</tspan></text> </g> + <g id="shape29-73" v:mID="29" v:groupContext="shape" v:layerMember="1" transform="translate(21.4998,-79.6101)"> + <title>Dynamic connector.29</title> + <desc>Exit If specified by rule</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="51.2701" cy="303.294" width="91.02" height="17.6036"/> + <path d="M0 236.68 L0 303.29 L163.63 303.29" class="st4"/> + <rect v:rectContext="textBkgnd" x="10.8731" y="298.494" width="80.0343" height="9.59985" class="st6"/> + <text x="11.25" y="305.69" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Exit If specified by rule</text> </g> + <g id="shape30-80" v:mID="30" v:groupContext="shape" v:layerMember="1" transform="translate(275.694,-85.2794)"> + <title>Dynamic connector.30</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(11):26"/> + </v:userDefs> + <path d="M0 229.59 L-22.83 229.59" class="st4"/> + </g> + </g> +</svg> Modified: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-What_is_a_Rule_Engine.xml =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-What_is_a_Rule_Engine.xml 2006-05-31 06:46:54 UTC (rev 4508) +++ labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-What_is_a_Rule_Engine.xml 2006-05-31 07:14:53 UTC (rev 4509) @@ -21,8 +21,15 @@ their logic hard coded "shells" separated the logic from the system, providing an easy to use environment for user input. Drools is a Rule Engine that uses the Rule Based approached to implement an Expert System - and is more correctly classified as a Production Rules System.</para> + and is more correctly classified as a Production Rule System.</para> + <para>The term "Production Rule" originates from formal grammer - where it + is described as "an abstract structure that describes a formal language + precisely, i.e., a set of rules that mathematically delineates a (usually + infinite) set of finite-length strings over a (usually finite) alphabet" + (<ulink + url="http://en.wikipedia.org/wiki/Formal_grammar">wikipedia</ulink>).</para> + <para>Business Rule Management Systems build value on top of an Rule Engine providing systems for rule management, deployment, collaboration, analysis and end user tools for business users. Further to this the @@ -31,23 +38,29 @@ <para>The term Rule Engine is quite ambiguous in that it can be any system that uses rules, in any form, that can be applied to data to produce - outcomes; which includes simple systems like form validation: "How to - Build a Business Rules Engine (2004)" by Malcolm Chisholm exemplifies this - ambiguity. The book is actually about how to build and alter a database - schema to hold validation rules which it then shows how to generate VB - code from those validation rules to validate data entry - while a very - valid and usefil topic for some, it caused quite a suprise to this author, - unaware at the time in the subtleties of Rules Engines differences, who - was hoping to find some hidden secrets to help improve the Drools engine. - While a Production Rule System is a kind of Rule Engine and also Expert - System, the validation Rule Engine mention previously obviously isn't an - Expert System.</para> + outcomes; which includes simple systems like form validation and dynamic + expression engines: "How to Build a Business Rules Engine (2004)" by + Malcolm Chisholm exemplifies this ambiguity. The book is actually about + how to build and alter a database schema to hold validation rules which it + then shows how to generate VB code from those validation rules to validate + data entry - while a very valid and useful topic for some, it caused quite + a suprise to this author, unaware at the time in the subtleties of Rules + Engines differences, who was hoping to find some hidden secrets to help + improve the Drools engine. jBPM uses expressions and delegates in its + Decision nodes; which controls the transitions in a Workflow. At each node + it evaluates a rule that dicates the transition to undertake - this is + also a Rule Engine. While a Production Rule System is a kind of Rule + Engine and also Expert System, the validation and expression evaluation + Rule Engines mention previously are not Expert Systems.</para> - <para>The brain of a Production Rule System is an Inference Engine which - matches facts, the data, against Production Rules, also called - Productions, to infer conclusions which result in actions. A Production - Rule is a two-part structure using First Order Logic for knowledge - representation.</para> + <para>A Production Rule System is turing complete with a focus on + knowledge representation to expression propositional and first order logic + in a concise, non ambigious and declarative manner. The brain of a + Production Rules System is an Inference Engine that is able to scale to a + large number of rules and facts. The Inference Engine matches facts, the + data, against Production Rules, also called Productions or just Rules, to + infer conclusions which result in actions. A Production Rule is a two-part + structure using First Order Logic for knowledge representation.</para> <programlisting>when <conditions> @@ -84,7 +97,7 @@ <primary>Rete</primary> </indexterm>Rete and <indexterm> <primary>Leaps</primary> - </indexterm>Leaps; Leaps is considered provisional, as it is quite new. + </indexterm>Leaps; Leaps is considered experimental, as it is quite new. The Drools <indexterm> <primary>Rete</primary> </indexterm>Rete implementation is called ReteOO signifying that Drools @@ -94,9 +107,11 @@ III. It is important to understand that names like Rete III are purely marketing where, unlike the original published Rete Algorithm, no details of implementation are published; thus asking a question like "Does Drools - implement Rete III?" is nonsensical.</para> + implement Rete III?" is nonsensical. The most common enhancements are + covered in "Production Matching for Large Learning Systems (Rete/UL)" + (1995) by Robert B. Doorenbos.</para> - <para>The Production Rules are referred to as the <indexterm> + <para>The Rules are stored in the the <indexterm> <primary>Production Memory</primary> </indexterm>Production Memory and the facts that the Inference Engine matches against the <indexterm> @@ -146,15 +161,55 @@ print "Democracy is Doomed" </programlisting> - <para>There are two general approaches to Rule Engines implementation - - forward chaing and backward chaining. Forward chaing is 'data-driven' and - thus reactionary - facts are asserted into the working memory which - results in rules firing - we start with a fact, it propagates and we end - in a conclusion. Drools is a forward chaining engine. Backward chaining is - 'goal-driven', we start with a conclusion which the engine tries to - satisfy. If it can't it searches for conclusions, 'sub goals', that help - satisfy an unknown part fo the current goal - it continues this process - untill either the initial conclusion is proven or there are no more sub - goals.</para> + <para>There are two methods of execution for a Production Rule Systems - + Forward Chaining and Backward Chaining; systems that implement both are + called Hybrid Production Rule Systems. Understanding these two modes of + operation are key to understanding why a Production Rule System is + different and how to get the best from them. Forward chaing is + 'data-driven' and thus reactionary - facts are asserted into the working + memory which results in one or more rules being concurrently true and + scheduled for execution by t he Agenda - we start with a fact, it + propagates and we end in a conclusion. Drools is a forward chaining + engine.</para> + + <figure> + <title>Forward Chaining</title> + + <mediaobject> + <imageobject> + <imagedata align="center" fileref="Forward_Chaining.svg" + format="SVG" /> + </imageobject> + + <imageobject> + <imagedata align="center" fileref="Forward_Chaining.png" + format="PNG" /> + </imageobject> + </mediaobject> + </figure> + + <para>Backward chaining is 'goal-driven', we start with a conclusion which + the engine tries to satisfy. If it can't it searches for conclusions, 'sub + goals', that help satisfy an unknown part fo the current goal - it + continues this process untill either the initial conclusion is proven or + there are no more sub goals. Prolog is an example of a Backward Chaining + engine; Drools will adding support for Backward Chaining in its next major + release.</para> + + <figure> + <title>Backward Chaining</title> + + <mediaobject> + <imageobject> + <imagedata align="center" fileref="Backward_Chaining.svg" + format="SVG" /> + </imageobject> + + <imageobject> + <imagedata align="center" fileref="Backward_Chaining.png" + format="PNG" /> + </imageobject> + </mediaobject> + </figure> </section> </section> \ No newline at end of file |