Add FAIKR1 STRIPS

This commit is contained in:
2023-11-08 21:01:09 +01:00
parent f0fbac7cf6
commit 6df916b1bf
5 changed files with 836 additions and 255 deletions

View 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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="&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;ontable(a)&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;ontable(b)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;clear(b)&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;clear(c)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, a) &lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;handempty&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b)&lt;/font&gt;" 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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Disjunction of goals&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Push in arbitrarily decided order&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b)&lt;/font&gt;" 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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Single goal (not ⊆ of current state)&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Pop and push suitable action&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" 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)&amp;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="&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Preconditions of STACK&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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)&amp;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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Disjunction of goals&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Push in arbitrarily decided order&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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)&amp;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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Single goal (not ⊆ of current state)&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Pop and push suitable action&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Preconditions of UNSTACK&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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)&amp;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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;b&gt;Goals ⊆ of current state&lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font face=&quot;Times New Roman&quot; style=&quot;font-size: 16px;&quot;&gt;with substitution X/a&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font face=&quot;Times New Roman&quot;&gt;Apply action&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;" 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="&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;ontable(a)&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;ontable(b)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;clear(a)&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;clear(b)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;holding(c)&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font face=&quot;Times New Roman&quot;&gt;UNSTACK(c, a)&lt;/font&gt;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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)&amp;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="&amp;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="&amp;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="&amp;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="&amp;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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;b&gt;Goal ⊆ of current state&lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;b&gt;Goals ⊆ of current state&lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font face=&quot;Times New Roman&quot;&gt;Apply action&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;" 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="&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;ontable(a)&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;/span&gt;ontable(b)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;clear(a)&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;clear(c)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 20px;&quot;&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b)&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;handempty&lt;font style=&quot;font-size: 20px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;font face=&quot;Times New Roman&quot;&gt;STACK(c, b)&lt;/font&gt;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 20px;&quot;&gt;on(c, b) &lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;span role=&quot;presentation&quot; data-mathml=&quot;&lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&gt;&lt;mo&gt;&amp;amp;#x2227;&lt;/mo&gt;&lt;/math&gt;&quot; style=&quot;position: relative; font-size: 20px;&quot; tabindex=&quot;0&quot; id=&quot;MathJax-Element-12-Frame&quot; class=&quot;MathJax&quot;&gt;&lt;/span&gt;&lt;/font&gt;∧ 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="&amp;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="&amp;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="&amp;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="&amp;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="&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Single goal (not ⊆ of current state)&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 16px;&quot; align=&quot;left&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot; face=&quot;Times New Roman&quot;&gt;Pop and push suitable action&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" 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="&lt;font face=&quot;Times New Roman&quot; style=&quot;font-size: 18px;&quot;&gt;Continue until stack empty&lt;/font&gt;" 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>

View File

@ -13,5 +13,6 @@
\input{sections/_swarm_intelligence.tex}
\input{sections/_games.tex}
\input{sections/_planning.tex}
\input{sections/_generative_planning.tex}
\end{document}

View File

@ -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.

View File

@ -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}