mirror of
https://github.com/NotXia/unibo-ai-notes.git
synced 2025-12-15 02:52:22 +01:00
Add FAIKR1 STRIPS
This commit is contained in:
BIN
src/fundamentals-of-ai-and-kr/module1/img/_strips_example.pdf
Normal file
BIN
src/fundamentals-of-ai-and-kr/module1/img/_strips_example.pdf
Normal file
Binary file not shown.
506
src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio
Normal file
506
src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio
Normal file
@ -0,0 +1,506 @@
|
||||
<mxfile host="app.diagrams.net" modified="2023-11-08T19:35:32.492Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="Arkzoypenm2zX9L1K_tJ" version="22.0.8" type="device">
|
||||
<diagram name="Pagina-1" id="heIegY8rYzWn5zT_ywOG">
|
||||
<mxGraphModel dx="3187" dy="1611" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-1" value="A" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="275.32" y="200" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-2" value="C" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="275.32" y="170" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-3" value="B" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="200" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-4" value="A" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="530" y="139.04000000000002" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-5" value="C" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="530" y="169.36" width="30.32" height="30.32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-6" value="B" style="whiteSpace=wrap;html=1;aspect=fixed;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="530" y="199.68" width="30.32" height="30.32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-7" value="Initial state" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="260.32" y="109.03999999999999" width="120" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-8" value="Goal" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="515.16" y="109.03999999999999" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-10" value="Current state" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="414" y="250" width="406" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-12" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.16" y="290" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-13" value="<div style="font-size: 20px;"><font style="font-size: 20px;">ontable(a)<span style="white-space: pre;">	</span><font style="font-size: 20px;"><span style="white-space: pre;"></span>ontable(b)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">clear(b)<font style="font-size: 20px;"><span style="white-space: pre;">	</span>clear(c)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">on(c, a) <span style="white-space: pre;">	</span>handempty<font style="font-size: 20px;"><br></font></font></div>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="503.5" y="290" width="227" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-14" value="Goal stack" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="8" y="250" width="406" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-15" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-12">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370" y="310" as="sourcePoint" />
|
||||
<mxPoint x="311" y="360" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-16" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-12">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321" y="300" as="sourcePoint" />
|
||||
<mxPoint x="111" y="360" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-18" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="400" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-19" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-18">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.32000000000005" y="420" as="sourcePoint" />
|
||||
<mxPoint x="311.16" y="540" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-20" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-18">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.32000000000005" y="410" as="sourcePoint" />
|
||||
<mxPoint x="111.16" y="540" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-21" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.92" y="460" as="sourcePoint" />
|
||||
<mxPoint x="211.16" y="440" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-22" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.86" y="360" as="sourcePoint" />
|
||||
<mxPoint x="210.83" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-23" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="470" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-24" value="<font style="font-size: 20px;">on(c, b)</font>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="500" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-25" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><b><font style="font-size: 16px;" face="Times New Roman">Disjunction of goals<br></font></b></font></div><div style="font-size: 16px;" align="left"><font style="font-size: 16px;" face="Times New Roman">Push in arbitrarily decided order</font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="395" width="238.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-32" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="590" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-33" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-32">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.32000000000005" y="610" as="sourcePoint" />
|
||||
<mxPoint x="311" y="790" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-34" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-32">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.32000000000005" y="600" as="sourcePoint" />
|
||||
<mxPoint x="111" y="790" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-35" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.76" y="710" as="sourcePoint" />
|
||||
<mxPoint x="211" y="690" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-36" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.86" y="550" as="sourcePoint" />
|
||||
<mxPoint x="210.83" y="580" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-37" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="620" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-38" value="<font style="font-size: 20px;">on(c, b)</font>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="650" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-40" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><b><font style="font-size: 16px;" face="Times New Roman">Single goal (not ⊆ of current state)<br></font></b></font></div><div style="font-size: 16px;" align="left"><font style="font-size: 16px;" face="Times New Roman">Pop and push suitable action<br></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.32" y="645" width="258.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-43" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.16" y="665" as="sourcePoint" />
|
||||
<mxPoint x="80" y="670" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.16" y="664" />
|
||||
<mxPoint x="90" y="660" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-45" value="STACK(c, b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111" y="720" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-46" value="holding(c)&nbsp;∧ clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111" y="750" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-47" value="<font style="font-size: 16px;" face="Times New Roman">Preconditions of STACK</font>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.32" y="750" width="238.68" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-61" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="840" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-62" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-61">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.32000000000005" y="860" as="sourcePoint" />
|
||||
<mxPoint x="311" y="1080" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-63" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-61">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.32000000000005" y="850" as="sourcePoint" />
|
||||
<mxPoint x="111" y="1080" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-64" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.8" y="990" as="sourcePoint" />
|
||||
<mxPoint x="211.04000000000002" y="970" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-65" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.86" y="800" as="sourcePoint" />
|
||||
<mxPoint x="210.83" y="830" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-66" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="870" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-70" value="STACK(c, b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="900" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-71" value="holding(c)&nbsp;∧ clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="930" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-73" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><b><font style="font-size: 16px;" face="Times New Roman">Disjunction of goals<br></font></b></font></div><div style="font-size: 16px;" align="left"><font style="font-size: 16px;" face="Times New Roman">Push in arbitrarily decided order</font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.32" y="925" width="238.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-74" value="holding(c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="1000" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-75" value="clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.32" y="1030" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-76" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1120" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-77" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-76">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.64000000000004" y="1140" as="sourcePoint" />
|
||||
<mxPoint x="312" y="1440" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-78" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-76">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.64000000000004" y="1130" as="sourcePoint" />
|
||||
<mxPoint x="111" y="1440" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-80" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="211.18" y="1080" as="sourcePoint" />
|
||||
<mxPoint x="211.15" y="1110" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-81" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1150" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-82" value="STACK(c, b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1180" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-83" value="holding(c)&nbsp;∧ clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1210" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-85" value="holding(c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1240" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-86" value="clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1270" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-88" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="211.39999999999998" y="1330" as="sourcePoint" />
|
||||
<mxPoint x="211.64" y="1310" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-89" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.8" y="1285" as="sourcePoint" />
|
||||
<mxPoint x="80.64" y="1290" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.8" y="1284" />
|
||||
<mxPoint x="90.64" y="1280" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-90" value="UNSTACK(c, X)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.64" y="1340" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-91" value="handempty ∧ clear(c) ∧ on(c, X)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.64" y="1370" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-92" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><b><font style="font-size: 16px;" face="Times New Roman">Single goal (not ⊆ of current state)<br></font></b></font></div><div style="font-size: 16px;" align="left"><font style="font-size: 16px;" face="Times New Roman">Pop and push suitable action<br></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1265" width="258.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-93" value="<font style="font-size: 16px;" face="Times New Roman">Preconditions of UNSTACK</font>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1370" width="238.68" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-95" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1480" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-96" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-95">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.64000000000004" y="1500" as="sourcePoint" />
|
||||
<mxPoint x="312" y="1720" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-97" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-95">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.64000000000004" y="1490" as="sourcePoint" />
|
||||
<mxPoint x="111" y="1720" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-98" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="211.18" y="1440" as="sourcePoint" />
|
||||
<mxPoint x="211.15" y="1470" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-99" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1510" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-100" value="STACK(c, b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1540" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-101" value="holding(c)&nbsp;∧ clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1570" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-102" value="holding(c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1600" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-105" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.64" y="1685" as="sourcePoint" />
|
||||
<mxPoint x="80.48" y="1690" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.64" y="1684" />
|
||||
<mxPoint x="90.48" y="1680" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-106" value="UNSTACK(c, a)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.64" y="1630" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-107" value="handempty ∧ clear(c) ∧ on(c, X)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.64" y="1660" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-108" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><font style="font-size: 16px;" face="Times New Roman"><b>Goals ⊆ of current state</b></font><b><font style="font-size: 16px;" face="Times New Roman"><br></font></b></font></div><div style="font-size: 16px;" align="left"><font face="Times New Roman" style="font-size: 16px;">with substitution X/a<br></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1665" width="258.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-111" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.64" y="1645" as="sourcePoint" />
|
||||
<mxPoint x="80.48" y="1650" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.64" y="1644" />
|
||||
<mxPoint x="90.48" y="1640" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-112" value="<b><font style="font-size: 16px;"><font face="Times New Roman">Apply action</font><br></font></b>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1630" width="98.36" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-114" value="<div style="font-size: 20px;"><font style="font-size: 20px;">ontable(a)<span style="white-space: pre;">	</span><font style="font-size: 20px;"><span style="white-space: pre;"></span>ontable(b)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">clear(a)<font style="font-size: 20px;"><span style="white-space: pre;">	</span>clear(b)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">holding(c)<font style="font-size: 20px;"><br></font></font></div>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="503.5" y="1605" width="227" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-115" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-112" target="xEpXjmtw2FbbvQ37l8T_-114">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="420" y="1630" as="sourcePoint" />
|
||||
<mxPoint x="470" y="1580" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-116" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-13" target="xEpXjmtw2FbbvQ37l8T_-114">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="800" as="sourcePoint" />
|
||||
<mxPoint x="610" y="1170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-141" value="<font style="font-size: 16px;"><font face="Times New Roman">UNSTACK(c, a)</font><br></font>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xEpXjmtw2FbbvQ37l8T_-116">
|
||||
<mxGeometry x="0.3188" relative="1" as="geometry">
|
||||
<mxPoint y="-204" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-117" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1760" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-118" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-117">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370.64000000000004" y="1780" as="sourcePoint" />
|
||||
<mxPoint x="312" y="1920" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-119" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-117">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="321.64000000000004" y="1770" as="sourcePoint" />
|
||||
<mxPoint x="111" y="1920" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-120" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="211.18" y="1720" as="sourcePoint" />
|
||||
<mxPoint x="211.15" y="1750" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-121" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1790" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-122" value="STACK(c, b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1820" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-123" value="holding(c)&nbsp;∧ clear(b)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1850" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-124" value="holding(c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="111.63999999999999" y="1880" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-125" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111" y="1895" as="sourcePoint" />
|
||||
<mxPoint x="79.84" y="1900" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109" y="1894" />
|
||||
<mxPoint x="89.84" y="1890" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-128" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.64" y="1865" as="sourcePoint" />
|
||||
<mxPoint x="80.48" y="1870" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.64" y="1864" />
|
||||
<mxPoint x="90.48" y="1860" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-130" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="111.64" y="1835" as="sourcePoint" />
|
||||
<mxPoint x="80.48" y="1840" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109.64" y="1834" />
|
||||
<mxPoint x="90.48" y="1830" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-131" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="1770" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-132" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="1750" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-133" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="230" y="1730" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-134" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="1750" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-135" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><font style="font-size: 16px;" face="Times New Roman"><b>Goal ⊆ of current state</b></font><b><font style="font-size: 16px;" face="Times New Roman"><br></font></b></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1880" width="168.36" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-136" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><font style="font-size: 16px;" face="Times New Roman"><b>Goals ⊆ of current state</b></font><b><font style="font-size: 16px;" face="Times New Roman"><br></font></b></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1850" width="168.36" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-137" value="<b><font style="font-size: 16px;"><font face="Times New Roman">Apply action</font><br></font></b>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1820" width="98.36" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-138" value="<div style="font-size: 20px;"><font style="font-size: 20px;">ontable(a)<span style="white-space: pre;">	</span><font style="font-size: 20px;"><span style="white-space: pre;"></span>ontable(b)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">clear(a)<font style="font-size: 20px;"><span style="white-space: pre;">	</span>clear(c)</font></font></div><div style="font-size: 20px;"><font style="font-size: 20px;">on(c, b)<span style="white-space: pre;">	</span>handempty<font style="font-size: 20px;"><br></font></font></div>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;" vertex="1" parent="1">
|
||||
<mxGeometry x="503.5" y="1795" width="227" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-139" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-137">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="399.5" y="1834.76" as="sourcePoint" />
|
||||
<mxPoint x="503.5" y="1834.76" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-140" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-114" target="xEpXjmtw2FbbvQ37l8T_-138">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="940" as="sourcePoint" />
|
||||
<mxPoint x="627" y="1615" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-142" value="Text" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xEpXjmtw2FbbvQ37l8T_-140">
|
||||
<mxGeometry x="-0.0145" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-143" value="<font style="font-size: 16px;"><font face="Times New Roman">STACK(c, b)</font><br></font>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xEpXjmtw2FbbvQ37l8T_-140">
|
||||
<mxGeometry x="0.0145" y="4" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-144" value="<font style="font-size: 20px;">on(c, b) <span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span><span role="presentation" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo>&amp;#x2227;</mo></math>" style="position: relative; font-size: 20px;" tabindex="0" id="MathJax-Element-12-Frame" class="MathJax"></span></font>∧ on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="110.76999999999998" y="1970" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-145" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-144">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="369.77000000000004" y="1990" as="sourcePoint" />
|
||||
<mxPoint x="311" y="2040" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-146" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xEpXjmtw2FbbvQ37l8T_-144">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="320.77000000000004" y="1980" as="sourcePoint" />
|
||||
<mxPoint x="110" y="2040" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-147" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endWidth=8.275862068965518;endSize=5.172413793103448;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="210.31" y="1930" as="sourcePoint" />
|
||||
<mxPoint x="210.28" y="1960" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-148" value="on(a, c)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Times New Roman;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="110.76999999999998" y="2000" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-155" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="99.13" y="1980" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-156" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="99.13" y="1960" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-157" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="229.13" y="1940" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-158" value="&nbsp;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="99.13" y="1960" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-159" value="<div style="font-size: 16px;" align="left"><font style="font-size: 16px;"><b><font style="font-size: 16px;" face="Times New Roman">Single goal (not ⊆ of current state)<br></font></b></font></div><div style="font-size: 16px;" align="left"><font style="font-size: 16px;" face="Times New Roman">Pop and push suitable action<br></font></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="311.64" y="1995" width="258.68" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-160" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="211.34" y="2070" as="sourcePoint" />
|
||||
<mxPoint x="211.34" y="2040" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-161" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="616.75" y="1920" as="sourcePoint" />
|
||||
<mxPoint x="616.75" y="1890" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xEpXjmtw2FbbvQ37l8T_-162" value="<font face="Times New Roman" style="font-size: 18px;">Continue until stack empty</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="2070" width="200" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@ -13,5 +13,6 @@
|
||||
\input{sections/_swarm_intelligence.tex}
|
||||
\input{sections/_games.tex}
|
||||
\input{sections/_planning.tex}
|
||||
\input{sections/_generative_planning.tex}
|
||||
|
||||
\end{document}
|
||||
@ -0,0 +1,328 @@
|
||||
\chapter{Generative planning}
|
||||
|
||||
\begin{description}
|
||||
\item[Generative planning] \marginnote{Generative planning}
|
||||
Offline planning that creates the entire plan before execution based on
|
||||
a snapshot of the current state of the world.
|
||||
It relies on the following assumptions:
|
||||
\begin{descriptionlist}
|
||||
\item[Atomic time]
|
||||
Actions cannot be interrupted.
|
||||
\item[Determinism]
|
||||
Actions are deterministic.
|
||||
\item[Closed world]
|
||||
The initial state is fully known,
|
||||
what is not in the initial state is considered false (which is different from unknown).
|
||||
\item[No interference] Only the execution of the plan changes the state of the world.
|
||||
\end{descriptionlist}
|
||||
\end{description}
|
||||
|
||||
|
||||
\section{Linear planning}
|
||||
\marginnote{Linear planning}
|
||||
Formulates the planning problem as a search problem where:
|
||||
\begin{itemize}
|
||||
\item Nodes contain the state of the world.
|
||||
\item Edges represent possible actions.
|
||||
\end{itemize}
|
||||
Produces a totally ordered list of actions.
|
||||
|
||||
The direction of the search can be:
|
||||
\begin{descriptionlist}
|
||||
\item[Forward] \marginnote{Forward search}
|
||||
Starting from the initial state, the search terminates when a state containing a superset of the goal is reached.
|
||||
\item[Backward] \marginnote{Backward search}
|
||||
Starting from the goal, the search terminates when a state containing a subset of the initial state is reached.
|
||||
|
||||
Goal regression is used to reduce the goal into sub-goals.
|
||||
Given a (sub-)goal $G$ and a rule (action) $R$ with delete-list (states that are false after the action) \texttt{d\_list}
|
||||
and add-list (states that are true after the action) \texttt{a\_list}, regression of $G$ through $R$ is define as:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{regr[$G$, $R$]} &= \texttt{true} \text{ if } G \in \texttt{a\_list} \text{ (i.e. regression possible)} \\
|
||||
\texttt{regr[$G$, $R$]} &= \texttt{false} \text{ if } G \in \texttt{d\_list} \text{ (i.e. regression not possible)} \\
|
||||
\texttt{regr[$G$, $R$]} &= G \text{ otherwise} \text{ (i.e. $R$ does not influence $G$)} \\
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
Given the action \texttt{unstack(X, Y)} with:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{d\_list} &= \{ \texttt{handempty}, \texttt{on(X, Y)}, \texttt{clear(X)} \} \\
|
||||
\texttt{a\_list} &= \{ \texttt{holding(X)}, \texttt{clear(Y)} \}
|
||||
\end{split}
|
||||
\]
|
||||
We have that:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{regr[holding(b), unstack(b, Y)]} &= \texttt{true} \\
|
||||
\texttt{regr[handempty, unstack(X, Y)]} &= \texttt{false} \\
|
||||
\texttt{regr[ontable(c), unstack(X, Y)]} &= \texttt{ontable(c)} \\
|
||||
\texttt{regr[clear(c), unstack(X, Y)]} &= \begin{cases}
|
||||
\texttt{true} & \text{if \texttt{Y}=\texttt{c}} \\
|
||||
\texttt{clear(c)} & \text{otherwise}
|
||||
\end{cases}
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsection{Deductive planning}
|
||||
\marginnote{Deductive planning}
|
||||
Formulates the planning problem using first order logic to represent states, goals and actions.
|
||||
Plans are generated as theorem proofs.
|
||||
|
||||
\subsubsection{Green's formulation}
|
||||
\marginnote{Green's formulation}
|
||||
Green's formulation is based on \textbf{situation calculus}.
|
||||
To find a plan, the goal is negated and it is proven that it leads to an inconsistency.
|
||||
|
||||
The main concepts are:
|
||||
\begin{descriptionlist}
|
||||
\item[Situation]
|
||||
Properties (fluents) that hold in a given state \texttt{s}.
|
||||
\begin{example}[Moving blocks]
|
||||
To denote that \texttt{ontable(c)} holds in a state \texttt{s}, we use the axiom:
|
||||
\[ \texttt{ontable(c, s)} \]
|
||||
\end{example}
|
||||
The operator \texttt{do} allows to evolve the state such that:
|
||||
\[ \texttt{do(A, S)} = \texttt{S'} \]
|
||||
\texttt{S'} is the new state obtained by applying the action \texttt{A} in the state \texttt{S}.
|
||||
|
||||
\item[Actions]
|
||||
Define the pre-condition and post-condition fluents of an action in the form:
|
||||
\[ \texttt{pre-conditions} \rightarrow \texttt{post-conditions} \]
|
||||
Applying the equivalence $A \rightarrow B \equiv \lnot A \vee B$, actions can be described by means of disjunctions.
|
||||
\begin{example}[Moving blocks]
|
||||
The action \texttt{stack(X, Y)} has pre-conditions \texttt{holding(X)} and \texttt{clear(Y)}, and
|
||||
post-conditions \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handfree}.
|
||||
Its representation in Green's formulation is:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holding(X, S)} \land \texttt{clear(Y, S)} &\rightarrow \\
|
||||
&\texttt{on(X, Y, do(stack(X, Y), s))} \land \\
|
||||
&\texttt{clear(X, do(stack(X, Y), s))} \land \\
|
||||
&\texttt{handfree(do(stack(X, Y), s))} \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
|
||||
\item[Frame axioms]
|
||||
Besides the effects of actions, each state also have to define for all non-changing fluents their frame axioms.
|
||||
If the problem is complex, the number of frame axioms becomes unreasonable.
|
||||
\begin{example}[Moving blocks]
|
||||
\[ \texttt{on(U, V, S)}, \texttt{diff(U, X)} \rightarrow \texttt{on(U, V, do(move(X, Y, Z), S))} \]
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
The initial state is described by the following axioms:\\[0.5em]
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\texttt{on(a, d, s0)} \\
|
||||
\texttt{on(b, e, s0)} \\
|
||||
\texttt{on(c, f, s0)} \\
|
||||
\texttt{clear(a, s0)} \\
|
||||
\texttt{clear(b, s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\texttt{clear(c, s0)} \\
|
||||
\texttt{clear(g, s0)} \\
|
||||
\texttt{diff(a, b)} \\
|
||||
\texttt{diff(a, c)} \\
|
||||
\texttt{diff(a, d)} \dots \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{img/_moving_block_example_green.pdf}
|
||||
\end{minipage}\\[0.5em]
|
||||
|
||||
For simplicity, we only consider the action \texttt{move(X, Y, Z)} that moves \texttt{X} from \texttt{Y} to \texttt{Z}.
|
||||
It is defined as:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{clear(X, S)}&, \texttt{clear(Z, S)}, \texttt{on(X, Y, S)}, \texttt{diff(X, Z)} \rightarrow \\
|
||||
&\texttt{clear(Y, do(move(X, Y, Z), S))}, \texttt{on(X, Z, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
This action can be translated into the following effect axioms:
|
||||
\[
|
||||
\begin{split}
|
||||
\lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\
|
||||
&\texttt{clear(Y, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\[
|
||||
\begin{split}
|
||||
\lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\
|
||||
&\texttt{on(X, Z, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
|
||||
Given the goal \texttt{on(a, b, s1)}, we prove that $\lnot\texttt{on(a, b, s1)}$ leads to an inconsistency.
|
||||
We decide to make the following substitutions:
|
||||
\[ \{ \texttt{X}/\texttt{a}, \texttt{Z}/\texttt{b}, \texttt{s1}/\texttt{do(move(a, Y, b), S)} \} \]
|
||||
The premise of \texttt{move} leads to an inconsistency (when applying \texttt{move} its premise is false):
|
||||
\begin{center}
|
||||
\begin{tabular}{c|c|c|c}
|
||||
$\lnot\texttt{clear(a, S)}$ & $\lnot\texttt{clear(b, S)}$ & $\lnot\texttt{on(a, Y, S)}$ & $\lnot\texttt{diff(a, b)}$ \\
|
||||
False with $\{ \texttt{S}/\texttt{s0} \}$ & False with $\{ \texttt{S}/\texttt{s0} \}$
|
||||
& False with $\{ \texttt{S}/\texttt{s0}, \texttt{Y}/\texttt{d} \}$ & False
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
Therefore, the substitution $\{ \texttt{s1}/\texttt{do(move(a, Y, b), S)} \}$ defines the plan to reach the goal \texttt{on(a, b, s1)}.
|
||||
|
||||
|
||||
\subsubsection{Kowalsky's formulation}
|
||||
\marginnote{Kowalsky's formulation}
|
||||
Kowalsky's formulation avoids the frame axioms problem by using a set of fixed predicates:
|
||||
\begin{descriptionlist}
|
||||
\item[\texttt{holds(rel, s/a)}]
|
||||
Describes the relations \texttt{rel} that are true in a state \texttt{s} or after the execution of an action \texttt{a}.
|
||||
\item[\texttt{poss(s)}]
|
||||
Indicates if a state \texttt{s} is possible.
|
||||
\item[\texttt{pact(a, s)}]
|
||||
Indicates if an action \texttt{a} can be executed in a state \texttt{s}.
|
||||
\end{descriptionlist}
|
||||
Actions can be described as:
|
||||
\[ \texttt{poss(S)} \land \texttt{pact(A, S)} \rightarrow \texttt{poss(do(A, S))} \]
|
||||
|
||||
In the Kowalsky's formulation, each action requires a frame assertion (in Green's formulation, each state requires frame axioms).
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
An initial state can be described by the following axioms:\\[0.5em]
|
||||
\begin{minipage}{.35\linewidth}
|
||||
\centering
|
||||
\texttt{holds(on(a, b), s0)} \\
|
||||
\texttt{holds(ontable(b), s0)} \\
|
||||
\texttt{holds(ontable(c), s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.35\linewidth}
|
||||
\centering
|
||||
\texttt{holds(clear(a), s0)} \\
|
||||
\texttt{holds(clear(c), s0)} \\
|
||||
\texttt{holds(handempty, s0)} \\
|
||||
\texttt{poss(s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.2\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=0.6\linewidth]{img/_moving_block_example_kowalsky.pdf}
|
||||
\end{minipage}\\[0.5em]
|
||||
\end{example}
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
The action \texttt{unstack(X, Y)} has:
|
||||
\begin{descriptionlist}
|
||||
\item[Pre-conditions] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty}
|
||||
\item[Effects] \phantom{}
|
||||
\begin{description}
|
||||
\item[Add-list] \texttt{holding(X)} and \texttt{clear(Y)}
|
||||
\item[Delete-list] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty}
|
||||
\end{description}
|
||||
\end{descriptionlist}
|
||||
|
||||
Its description in Kowalsky's formulation is:
|
||||
\begin{descriptionlist}
|
||||
\item[Pre-conditions]
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holds(on(X, Y), S)}&, \texttt{holds(clear(X), S)}, \texttt{holds(handempty, S)} \rightarrow \\
|
||||
&\texttt{pact(unstack(X, Y), S)}
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\item[Effects] (use add-list)
|
||||
\[ \texttt{holds(holding(X), do(unstack(X, Y), S))} \]
|
||||
\[ \texttt{holds(clear(Y), do(unstack(X, Y), S))} \]
|
||||
|
||||
\item[Frame condition] (uses delete-list)
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holds(V, S)}&, \texttt{V} \neq \texttt{on(X, Y)}, \texttt{V} \neq \texttt{clear(X)}, \texttt{V} \neq \texttt{handempty}
|
||||
\rightarrow \\
|
||||
& \texttt{holds(V, do(unstack(X, Y), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
\end{example}
|
||||
|
||||
|
||||
\subsection{STRIPS}
|
||||
\marginnote{STRIPS}
|
||||
STRIPS (Stanford Research Institute Problem Solver) is an ad-hoc algorithm
|
||||
for linear planning resolution.
|
||||
The elements of the problem are represented as:
|
||||
\begin{descriptionlist}
|
||||
\item[State] represented with its true fluents.
|
||||
\item[Goal] represented with its true fluents.
|
||||
\item[Action] represented using three lists:
|
||||
\begin{descriptionlist}
|
||||
\item[Preconditions] Fluents that are required to be true in order to apply the action.
|
||||
\item[Delete-list] Fluents that become false after the action.
|
||||
\item[Add-list] Fluents that become true after the action.
|
||||
\end{descriptionlist}
|
||||
Add-list and delete-list can be combined in an effect list with positive (add-list) and negative (delete-list) axioms.
|
||||
|
||||
\begin{description}
|
||||
\item[STRIPS assumption] Everything that is not in the add-list or delete-list is unchanged in the next state.
|
||||
\end{description}
|
||||
\end{descriptionlist}
|
||||
|
||||
STRIPS uses two data structures:
|
||||
\begin{descriptionlist}
|
||||
\item[Goal stack] Does a backward search to reach the initial state.
|
||||
\item[Current state] Represents the forward application of the actions found using the goal stack.
|
||||
\end{descriptionlist}
|
||||
|
||||
\begin{algorithm}
|
||||
\caption{STRIPS}
|
||||
\begin{lstlisting}[mathescape=true]
|
||||
def strips(problem):
|
||||
goal_stack = Stack()
|
||||
current_state = State(problem.initial_state)
|
||||
goal_stack.push(problem.goal)
|
||||
plan = []
|
||||
while not goal_stack.empty():
|
||||
if (goal_stack.top() is a single/conjunction of goals and
|
||||
there is a substitution $\theta$ that makes it $\subseteq$ current_state):
|
||||
A = goal_stack.pop()
|
||||
$\theta$ = find_substitution(A, current_state)
|
||||
goal_stack.apply_substitution($\theta$)
|
||||
elif goal_stack.top() is a single goal:
|
||||
R = rule with a $\in$ R.add_list
|
||||
_ = goal_stack.pop() # Pop goal
|
||||
goal_stack.push(R)
|
||||
goal_stack.push(R.preconditions)
|
||||
elif goal_stack.top() is a conjunction of goals:
|
||||
for g in permutation(goal_stack.top()):
|
||||
goal_stack.push(g)
|
||||
# Note that there is no pop
|
||||
elif goal_stack.top() is an action:
|
||||
action = goal_stack.pop()
|
||||
current_state.apply(action)
|
||||
plan.append(action)
|
||||
return plan
|
||||
\end{lstlisting}
|
||||
\end{algorithm}
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
\begin{center}
|
||||
\includegraphics[trim={0 32.2cm 0 0}, clip, width=0.85\textwidth]{img/_strips_example.pdf}
|
||||
\end{center}
|
||||
\begin{center}
|
||||
\includegraphics[trim={0 0 0 17.5cm}, clip, width=0.85\textwidth]{img/_strips_example.pdf}
|
||||
\end{center}
|
||||
\end{example}
|
||||
|
||||
Since there are non-deterministic choices, the search space may become very large.
|
||||
Heuristics may be used to avoid this.
|
||||
|
||||
Conjunction of goals are solved separately, but this could lead to the \marginnote{Sussman anomaly} \textbf{Sussman anomaly}
|
||||
where a sub-goal destroys what another sub-goal has done.
|
||||
For this reason, when a conjunction is encountered, it is not immediately popped from the goal stack
|
||||
and is left as a final check.
|
||||
@ -1,4 +1,4 @@
|
||||
\chapter{Automated planning}
|
||||
\chapter{Automated planning definitions}
|
||||
|
||||
\begin{description}
|
||||
\item[Automated planning] \marginnote{Automated planning}
|
||||
@ -50,257 +50,3 @@
|
||||
An action applied to the real world may have unexpected effects due to uncertainty.
|
||||
\end{descriptionlist}
|
||||
\end{description}
|
||||
|
||||
|
||||
\section{Generative planning}
|
||||
|
||||
\begin{description}
|
||||
\item[Generative planning] \marginnote{Generative planning}
|
||||
Offline planning that creates the entire plan before execution based on
|
||||
a snapshot of the current state of the world.
|
||||
It relies on the following assumptions:
|
||||
\begin{descriptionlist}
|
||||
\item[Atomic time]
|
||||
Actions cannot be interrupted.
|
||||
\item[Determinism]
|
||||
Actions are deterministic.
|
||||
\item[Closed world]
|
||||
The initial state is fully known,
|
||||
what is not in the initial state is considered false (which is different from unknown).
|
||||
\item[No interference] Only the execution of the plan changes the state of the world.
|
||||
\end{descriptionlist}
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Linear planning}
|
||||
\marginnote{Linear planning}
|
||||
Formulates the planning problem as a search problem where:
|
||||
\begin{itemize}
|
||||
\item Nodes contain the state of the world.
|
||||
\item Edges represent possible actions.
|
||||
\end{itemize}
|
||||
Produces a totally ordered list of actions.
|
||||
|
||||
The direction of the search can be:
|
||||
\begin{descriptionlist}
|
||||
\item[Forward] \marginnote{Forward search}
|
||||
Starting from the initial state, the search terminates when a state containing a superset of the goal is reached.
|
||||
\item[Backward] \marginnote{Backward search}
|
||||
Starting from the goal, the search terminates when a state containing a subset of the initial state is reached.
|
||||
|
||||
Goal regression is used to reduce the goal into sub-goals.
|
||||
Given a (sub-)goal $G$ and a rule (action) $R$ with delete-list (states that are false after the action) \texttt{d\_list}
|
||||
and add-list (states that are true after the action) \texttt{a\_list}, regression of $G$ through $R$ is define as:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{regr[$G$, $R$]} &= \texttt{true} \text{ if } G \in \texttt{a\_list} \text{ (i.e. regression possible)} \\
|
||||
\texttt{regr[$G$, $R$]} &= \texttt{false} \text{ if } G \in \texttt{d\_list} \text{ (i.e. regression not possible)} \\
|
||||
\texttt{regr[$G$, $R$]} &= G \text{ otherwise} \text{ (i.e. $R$ does not influence $G$)} \\
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
Given the action \texttt{unstack(X, Y)} with:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{d\_list} &= \{ \texttt{handempty}, \texttt{on(X, Y)}, \texttt{clear(X)} \} \\
|
||||
\texttt{a\_list} &= \{ \texttt{holding(X)}, \texttt{clear(Y)} \}
|
||||
\end{split}
|
||||
\]
|
||||
We have that:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{regr[holding(b), unstack(b, Y)]} &= \texttt{true} \\
|
||||
\texttt{regr[handempty, unstack(X, Y)]} &= \texttt{false} \\
|
||||
\texttt{regr[ontable(c), unstack(X, Y)]} &= \texttt{ontable(c)} \\
|
||||
\texttt{regr[clear(c), unstack(X, Y)]} &= \begin{cases}
|
||||
\texttt{true} & \text{if \texttt{Y}=\texttt{c}} \\
|
||||
\texttt{clear(c)} & \text{otherwise}
|
||||
\end{cases}
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsection{Deductive planning}
|
||||
\marginnote{Deductive planning}
|
||||
Formulates the planning problem using first order logic to represent states, goals and actions.
|
||||
Plans are generated as theorem proofs.
|
||||
|
||||
\subsubsection{Green's formulation}
|
||||
\marginnote{Green's formulation}
|
||||
Green's formulation is based on \textbf{situation calculus}.
|
||||
To find a plan, the goal is negated and it is proven that it leads to an inconsistency.
|
||||
|
||||
The main concepts are:
|
||||
\begin{descriptionlist}
|
||||
\item[Situation]
|
||||
Properties (fluents) that hold in a given state \texttt{s}.
|
||||
\begin{example}[Moving blocks]
|
||||
To denote that \texttt{ontable(c)} holds in a state \texttt{s}, we use the axiom:
|
||||
\[ \texttt{ontable(c, s)} \]
|
||||
\end{example}
|
||||
The operator \texttt{do} allows to evolve the state such that:
|
||||
\[ \texttt{do(A, S)} = \texttt{S'} \]
|
||||
\texttt{S'} is the new state obtained by applying the action \texttt{A} in the state \texttt{S}.
|
||||
|
||||
\item[Actions]
|
||||
Define the pre-condition and post-condition fluents of an action in the form:
|
||||
\[ \texttt{pre-conditions} \rightarrow \texttt{post-conditions} \]
|
||||
Applying the equivalence $A \rightarrow B \equiv \lnot A \vee B$, actions can be described by means of disjunctions.
|
||||
\begin{example}[Moving blocks]
|
||||
The action \texttt{stack(X, Y)} has pre-conditions \texttt{holding(X)} and \texttt{clear(Y)}, and
|
||||
post-conditions \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handfree}.
|
||||
Its representation in Green's formulation is:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holding(X, S)} \land \texttt{clear(Y, S)} &\rightarrow \\
|
||||
&\texttt{on(X, Y, do(stack(X, Y), s))} \land \\
|
||||
&\texttt{clear(X, do(stack(X, Y), s))} \land \\
|
||||
&\texttt{handfree(do(stack(X, Y), s))} \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
|
||||
\item[Frame axioms]
|
||||
Besides the effects of actions, each state also have to define for all non-changing fluents their frame axioms.
|
||||
If the problem is complex, the number of frame axioms becomes unreasonable.
|
||||
\begin{example}[Moving blocks]
|
||||
\[ \texttt{on(U, V, S)}, \texttt{diff(U, X)} \rightarrow \texttt{on(U, V, do(move(X, Y, Z), S))} \]
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
The initial state is described by the following axioms:\\[0.5em]
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\texttt{on(a, d, s0)} \\
|
||||
\texttt{on(b, e, s0)} \\
|
||||
\texttt{on(c, f, s0)} \\
|
||||
\texttt{clear(a, s0)} \\
|
||||
\texttt{clear(b, s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\texttt{clear(c, s0)} \\
|
||||
\texttt{clear(g, s0)} \\
|
||||
\texttt{diff(a, b)} \\
|
||||
\texttt{diff(a, c)} \\
|
||||
\texttt{diff(a, d)} \dots \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.3\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{img/_moving_block_example_green.pdf}
|
||||
\end{minipage}\\[0.5em]
|
||||
|
||||
For simplicity, we only consider the action \texttt{move(X, Y, Z)} that moves \texttt{X} from \texttt{Y} to \texttt{Z}.
|
||||
It is defined as:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{clear(X, S)}&, \texttt{clear(Z, S)}, \texttt{on(X, Y, S)}, \texttt{diff(X, Z)} \rightarrow \\
|
||||
&\texttt{clear(Y, do(move(X, Y, Z), S))}, \texttt{on(X, Z, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
This action can be translated into the following effect axioms:
|
||||
\[
|
||||
\begin{split}
|
||||
\lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\
|
||||
&\texttt{clear(Y, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\[
|
||||
\begin{split}
|
||||
\lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\
|
||||
&\texttt{on(X, Z, do(move(X, Y, Z), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\end{example}
|
||||
|
||||
Given the goal \texttt{on(a, b, s1)}, we prove that $\lnot\texttt{on(a, b, s1)}$ leads to an inconsistency.
|
||||
We decide to make the following substitutions:
|
||||
\[ \{ \texttt{X}/\texttt{a}, \texttt{Z}/\texttt{b}, \texttt{s1}/\texttt{do(move(a, Y, b), S)} \} \]
|
||||
The premise of \texttt{move} leads to an inconsistency (when applying \texttt{move} its premise is false):
|
||||
\begin{center}
|
||||
\begin{tabular}{c|c|c|c}
|
||||
$\lnot\texttt{clear(a, S)}$ & $\lnot\texttt{clear(b, S)}$ & $\lnot\texttt{on(a, Y, S)}$ & $\lnot\texttt{diff(a, b)}$ \\
|
||||
False with $\{ \texttt{S}/\texttt{s0} \}$ & False with $\{ \texttt{S}/\texttt{s0} \}$
|
||||
& False with $\{ \texttt{S}/\texttt{s0}, \texttt{Y}/\texttt{d} \}$ & False
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
Therefore, the substitution $\{ \texttt{s1}/\texttt{do(move(a, Y, b), S)} \}$ defines the plan to reach the goal \texttt{on(a, b, s1)}.
|
||||
|
||||
|
||||
\subsubsection{Kowalsky's formulation}
|
||||
\marginnote{Kowalsky's formulation}
|
||||
Kowalsky's formulation avoids the frame axioms problem by using a set of fixed predicates:
|
||||
\begin{descriptionlist}
|
||||
\item[\texttt{holds(rel, s/a)}]
|
||||
Describes the relations \texttt{rel} that are true in a state \texttt{s} or after the execution of an action \texttt{a}.
|
||||
\item[\texttt{poss(s)}]
|
||||
Indicates if a state \texttt{s} is possible.
|
||||
\item[\texttt{pact(a, s)}]
|
||||
Indicates if an action \texttt{a} can be executed in a state \texttt{s}.
|
||||
\end{descriptionlist}
|
||||
Actions can be described as:
|
||||
\[ \texttt{poss(S)} \land \texttt{pact(A, S)} \rightarrow \texttt{poss(do(A, S))} \]
|
||||
|
||||
In the Kowalsky's formulation, each action requires a frame assertion (in Green's formulation, each state requires frame axioms).
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
An initial state can be described by the following axioms:\\[0.5em]
|
||||
\begin{minipage}{.35\linewidth}
|
||||
\centering
|
||||
\texttt{holds(on(a, b), s0)} \\
|
||||
\texttt{holds(ontable(b), s0)} \\
|
||||
\texttt{holds(ontable(c), s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.35\linewidth}
|
||||
\centering
|
||||
\texttt{holds(clear(a), s0)} \\
|
||||
\texttt{holds(clear(c), s0)} \\
|
||||
\texttt{holds(handempty, s0)} \\
|
||||
\texttt{poss(s0)} \\
|
||||
\end{minipage}
|
||||
\begin{minipage}{.2\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=0.6\linewidth]{img/_moving_block_example_kowalsky.pdf}
|
||||
\end{minipage}\\[0.5em]
|
||||
\end{example}
|
||||
|
||||
\begin{example}[Moving blocks]
|
||||
The action \texttt{unstack(X, Y)} has:
|
||||
\begin{descriptionlist}
|
||||
\item[Pre-conditions] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty}
|
||||
\item[Effects] \phantom{}
|
||||
\begin{description}
|
||||
\item[Add-list] \texttt{holding(X)} and \texttt{clear(Y)}
|
||||
\item[Delete-list] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty}
|
||||
\end{description}
|
||||
\end{descriptionlist}
|
||||
|
||||
Its description in Kowalsky's formulation is:
|
||||
\begin{descriptionlist}
|
||||
\item[Pre-conditions]
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holds(on(X, Y), S)}&, \texttt{holds(clear(X), S)}, \texttt{holds(handempty, S)} \rightarrow \\
|
||||
&\texttt{pact(unstack(X, Y), S)}
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\item[Effects] (use add-list)
|
||||
\[ \texttt{holds(holding(X), do(unstack(X, Y), S))} \]
|
||||
\[ \texttt{holds(clear(Y), do(unstack(X, Y), S))} \]
|
||||
|
||||
\item[Frame condition] (uses delete-list)
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{holds(V, S)}&, \texttt{V} \neq \texttt{on(X, Y)}, \texttt{V} \neq \texttt{clear(X)}, \texttt{V} \neq \texttt{handempty}
|
||||
\rightarrow \\
|
||||
& \texttt{holds(V, do(unstack(X, Y), S))}
|
||||
\end{split}
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
\end{example}
|
||||
Reference in New Issue
Block a user