mirror of
https://github.com/NotXia/unibo-ai-notes.git
synced 2025-12-16 19:32:21 +01:00
Moved CDMO1 in year1
This commit is contained in:
@ -0,0 +1 @@
|
||||
../../../ainotes.cls
|
||||
@ -0,0 +1,14 @@
|
||||
\documentclass[11pt]{ainotes}
|
||||
|
||||
\title{Combinatorial Decision Making\\and Optimization\\(Module 1)}
|
||||
\date{2023 -- 2024}
|
||||
\def\lastupdate{{PLACEHOLDER-LAST-UPDATE}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\makenotesfront
|
||||
\input{./sections/_constraint_programming.tex}
|
||||
\input{./sections/_sat.tex}
|
||||
\eoc
|
||||
|
||||
\end{document}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,701 @@
|
||||
<mxfile host="Electron" modified="2024-03-15T16:02:44.844Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="xqsC8_HsGit7oY8XCL57" version="23.1.5" type="device">
|
||||
<diagram name="Pagina-1" id="TPm98Ap4iW5uKvmGSb2f">
|
||||
<mxGraphModel dx="1103" dy="1812" 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="mCqeTS5OQJ7wAlwwDYhK-1" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨ <i>x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub>4</sub>&nbsp;<br>c<sub>2</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨&nbsp;<i>¬x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;x<sub>3</sub></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;¬x</i><sub style="font-style: italic;">3</sub><i>&nbsp;</i>∨&nbsp;<i>¬x<sub>4</sub></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;x</i><sub style="font-style: italic;">4</sub><i>&nbsp;</i>∨<i>&nbsp;x<sub style="">5</sub>&nbsp;</i>∨<i>&nbsp;x<sub>6</sub></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;¬x<sub>5</sub>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;¬x</i><sub style="font-style: italic;">6</sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>8</sub></font></i></font><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="220" width="200" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-4" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;¬x<sub>1</sub>&nbsp;</i>∨ <i>x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub>4</sub>&nbsp;<br>c<sub>2</sub>:&nbsp;¬x<sub>1</sub>&nbsp;</i>∨&nbsp;<i>¬x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;x<sub>3</sub></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;¬x</i><sub style="font-style: italic;">3</sub><i>&nbsp;</i>∨&nbsp;<i>¬x<sub>4</sub></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;x</i><sub style="font-style: italic;">4</sub><i>&nbsp;</i>∨<i>&nbsp;x<sub>5</sub>&nbsp;</i>∨<i>&nbsp;x<sub>6</sub></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;¬x<sub>5</sub>&nbsp;</i>∨&nbsp;<i>x<sub>7</sub></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;¬x</i><sub style="font-style: italic;">6</sub><i>&nbsp;</i>∨&nbsp;<i>x<sub>7</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub>8</sub></i></font><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="-90" width="230" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-5" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="210" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-6" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="250" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-7" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="360" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-8" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨ <i>x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub>4</sub>&nbsp;<br>c<sub>2</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨&nbsp;<i>¬x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;x<sub>3</sub></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;¬x</i><sub style="font-style: italic;">3</sub><i>&nbsp;</i>∨&nbsp;<i>¬x<sub>4</sub></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;x</i><sub style="font-style: italic;">4</sub><i>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub style="">5</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub>6</sub></font></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;<font color="#009900">¬x<sub>5</sub></font>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;<font color="#009900">¬x</font></i><sub style="font-style: italic;"><font color="#009900">6</font></sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>8</sub></font></i></font><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="480" width="200" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-9" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="470" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-10" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="510" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-11" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="620" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-14" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">6</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="530" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-15" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">5</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="610" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-16" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-10" target="mCqeTS5OQJ7wAlwwDYhK-14">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="440" y="610" as="sourcePoint" />
|
||||
<mxPoint x="490" y="560" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-20" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-16">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-17" value="" style="endArrow=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="mCqeTS5OQJ7wAlwwDYhK-11" target="mCqeTS5OQJ7wAlwwDYhK-15">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="546" as="sourcePoint" />
|
||||
<mxPoint x="530" y="565" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-19" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">5</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-17">
|
||||
<mxGeometry x="0.035" y="-2" relative="1" as="geometry">
|
||||
<mxPoint y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-21" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-11" target="mCqeTS5OQJ7wAlwwDYhK-14">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="546" as="sourcePoint" />
|
||||
<mxPoint x="530" y="565" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-22" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-21">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-11" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-36" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨ <i><font color="#009900">x<sub>2</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>4</sub></font>&nbsp;<br>c<sub>2</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">¬x<sub>2</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub>3</sub></font></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;<font color="#009900">¬x</font></i><sub style="font-style: italic;"><font color="#009900">3</font></sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">¬x<sub>4</sub></font></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;<font color="#009900">x</font></i><sub style="font-style: italic;"><font color="#009900">4</font></sub><i>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub style="">5</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub>6</sub></font></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;<font color="#009900">¬x<sub>5</sub></font>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;<font color="#009900">¬x</font></i><sub style="font-style: italic;"><font color="#009900">6</font></sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>8</sub></font></i></font><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="760" width="200" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-37" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="750" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-38" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="790" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-39" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="900" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-40" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">6</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="810" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-41" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">5</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="890" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-42" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-38" target="mCqeTS5OQJ7wAlwwDYhK-40">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="440" y="890" as="sourcePoint" />
|
||||
<mxPoint x="490" y="840" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-43" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-42">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-44" value="" style="endArrow=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="mCqeTS5OQJ7wAlwwDYhK-39" target="mCqeTS5OQJ7wAlwwDYhK-41">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="826" as="sourcePoint" />
|
||||
<mxPoint x="530" y="845" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-45" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">5</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-44">
|
||||
<mxGeometry x="0.035" y="-2" relative="1" as="geometry">
|
||||
<mxPoint y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-46" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-39" target="mCqeTS5OQJ7wAlwwDYhK-40">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="826" as="sourcePoint" />
|
||||
<mxPoint x="530" y="845" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-47" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-46">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-11" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-48" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">4</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="850" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-49" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-40" target="mCqeTS5OQJ7wAlwwDYhK-48">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="826" as="sourcePoint" />
|
||||
<mxPoint x="510" y="835" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-50" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-49">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-51" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-41" target="mCqeTS5OQJ7wAlwwDYhK-48">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="846" as="sourcePoint" />
|
||||
<mxPoint x="610" y="864" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-52" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-51">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-53" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">2</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="810" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-54" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">3</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="890" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-55" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-48" target="mCqeTS5OQJ7wAlwwDYhK-53">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="846" as="sourcePoint" />
|
||||
<mxPoint x="610" y="864" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-56" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-55">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-57" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-48" target="mCqeTS5OQJ7wAlwwDYhK-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="660" y="864" as="sourcePoint" />
|
||||
<mxPoint x="700" y="846" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-58" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">3</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-57">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-3" y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-59" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.106;entryY=0.126;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-37" target="mCqeTS5OQJ7wAlwwDYhK-53">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="660" y="864" as="sourcePoint" />
|
||||
<mxPoint x="700" y="846" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-60" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-59">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-61" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨ <i><font color="#009900">x<sub>2</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>4</sub></font>&nbsp;<br>c<sub>2</sub>:&nbsp;<font color="#cccccc">¬x<sub>1</sub></font>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">¬x<sub>2</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub>3</sub></font></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;<font color="#009900">¬x</font></i><sub style="font-style: italic;"><font color="#009900">3</font></sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">¬x<sub>4</sub></font></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;<font color="#009900">x</font></i><sub style="font-style: italic;"><font color="#009900">4</font></sub><i>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub style="">5</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">x<sub>6</sub></font></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;<font color="#009900">¬x<sub>5</sub></font>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;<font color="#009900">¬x</font></i><sub style="font-style: italic;"><font color="#009900">6</font></sub><i>&nbsp;</i>∨&nbsp;<i><font color="#cccccc">x<sub>7</sub></font>&nbsp;</i>∨<i>&nbsp;<font color="#cccccc">¬x<sub>8</sub></font></i></font><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="1020" width="200" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-62" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="580" y="1010" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-63" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="1050" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-64" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="1160" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-65" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">6</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="1070" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-66" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">5</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="1150" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-67" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-63" target="mCqeTS5OQJ7wAlwwDYhK-65">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="450" y="1150" as="sourcePoint" />
|
||||
<mxPoint x="500" y="1100" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-68" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-67">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-69" value="" style="endArrow=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="mCqeTS5OQJ7wAlwwDYhK-64" target="mCqeTS5OQJ7wAlwwDYhK-66">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="1086" as="sourcePoint" />
|
||||
<mxPoint x="540" y="1105" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-70" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">5</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-69">
|
||||
<mxGeometry x="0.035" y="-2" relative="1" as="geometry">
|
||||
<mxPoint y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-71" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-64" target="mCqeTS5OQJ7wAlwwDYhK-65">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="1086" as="sourcePoint" />
|
||||
<mxPoint x="540" y="1105" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-72" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-71">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-11" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-73" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">4</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="1110" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-74" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-65" target="mCqeTS5OQJ7wAlwwDYhK-73">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="1086" as="sourcePoint" />
|
||||
<mxPoint x="520" y="1095" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-75" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-74">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-76" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-66" target="mCqeTS5OQJ7wAlwwDYhK-73">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="580" y="1106" as="sourcePoint" />
|
||||
<mxPoint x="620" y="1124" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-77" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-76">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-78" value="<font style="font-size: 20px;" face="Computer modern"><i style="border-color: var(--border-color);">x</i><sub style="border-color: var(--border-color); font-style: italic;">2</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="1070" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-79" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font style="border-color: var(--border-color); font-size: 20px;" face="Computer modern"><i style="border-color: var(--border-color);">x</i><sub style="border-color: var(--border-color); font-style: italic;">3</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="1150" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-80" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-73" target="mCqeTS5OQJ7wAlwwDYhK-78">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="580" y="1106" as="sourcePoint" />
|
||||
<mxPoint x="620" y="1124" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-81" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-80">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-82" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-73" target="mCqeTS5OQJ7wAlwwDYhK-79">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="670" y="1124" as="sourcePoint" />
|
||||
<mxPoint x="710" y="1106" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-83" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">3</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-82">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-3" y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-84" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.106;entryY=0.126;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-62" target="mCqeTS5OQJ7wAlwwDYhK-78">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="670" y="1124" as="sourcePoint" />
|
||||
<mxPoint x="710" y="1106" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-85" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-84">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-88" value="<font face="Computer modern" style="font-size: 20px;"><i>κ</i>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFCCCC;verticalAlign=middle;labelPosition=center;verticalLabelPosition=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="790" y="1110" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-89" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-78" target="mCqeTS5OQJ7wAlwwDYhK-88">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="790" y="1040" as="sourcePoint" />
|
||||
<mxPoint x="847" y="1078" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-90" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-89">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-91" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-79" target="mCqeTS5OQJ7wAlwwDYhK-88">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="760" y="1106" as="sourcePoint" />
|
||||
<mxPoint x="810" y="1124" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-92" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-91">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-93" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-62" target="mCqeTS5OQJ7wAlwwDYhK-88">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="760" y="1106" as="sourcePoint" />
|
||||
<mxPoint x="810" y="1124" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="770" y="1020" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-94" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-93">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="1" y="9" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-96" value="<font color="#ffffff">Text</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="790" width="20" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-97" value="<font color="#ffffff">Text</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="510" width="20" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-98" value="<font color="#ffffff">Text</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="290" width="20" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-99" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="1370" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-100" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="330" y="1410" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-101" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="330" y="1520" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-102" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">6</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="1430" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-103" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">5</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="1510" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-104" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-100" target="mCqeTS5OQJ7wAlwwDYhK-102">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370" y="1510" as="sourcePoint" />
|
||||
<mxPoint x="420" y="1460" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-105" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-104">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-106" value="" style="endArrow=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="mCqeTS5OQJ7wAlwwDYhK-101" target="mCqeTS5OQJ7wAlwwDYhK-103">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="400" y="1446" as="sourcePoint" />
|
||||
<mxPoint x="460" y="1465" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-107" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">5</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-106">
|
||||
<mxGeometry x="0.035" y="-2" relative="1" as="geometry">
|
||||
<mxPoint y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-108" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-101" target="mCqeTS5OQJ7wAlwwDYhK-102">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="400" y="1446" as="sourcePoint" />
|
||||
<mxPoint x="460" y="1465" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-109" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-108">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-11" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-110" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">4</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="1470" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-111" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-102" target="mCqeTS5OQJ7wAlwwDYhK-110">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="400" y="1446" as="sourcePoint" />
|
||||
<mxPoint x="440" y="1455" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-112" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-111">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-113" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-103" target="mCqeTS5OQJ7wAlwwDYhK-110">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="500" y="1466" as="sourcePoint" />
|
||||
<mxPoint x="540" y="1484" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-114" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-113">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-115" value="<font face="Computer modern" style="font-size: 20px;"><i style="border-color: var(--border-color);">x</i><sub style="border-color: var(--border-color); font-style: italic;">2</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="1430" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-116" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font style="border-color: var(--border-color); font-size: 20px;" face="Computer modern"><i style="border-color: var(--border-color);">x</i><sub style="border-color: var(--border-color); font-style: italic;">3</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="1510" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-117" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-110" target="mCqeTS5OQJ7wAlwwDYhK-115">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="500" y="1466" as="sourcePoint" />
|
||||
<mxPoint x="540" y="1484" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-118" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-117">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-119" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-110" target="mCqeTS5OQJ7wAlwwDYhK-116">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="590" y="1484" as="sourcePoint" />
|
||||
<mxPoint x="630" y="1466" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-120" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">3</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-119">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-3" y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-121" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.106;entryY=0.126;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-99" target="mCqeTS5OQJ7wAlwwDYhK-115">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="590" y="1484" as="sourcePoint" />
|
||||
<mxPoint x="630" y="1466" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-122" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-121">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-123" value="<font face="Computer modern" style="font-size: 20px;"><i>κ</i>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFCCCC;verticalAlign=middle;labelPosition=center;verticalLabelPosition=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="710" y="1470" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-124" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-115" target="mCqeTS5OQJ7wAlwwDYhK-123">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="710" y="1400" as="sourcePoint" />
|
||||
<mxPoint x="767" y="1438" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-125" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-124">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-126" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-116" target="mCqeTS5OQJ7wAlwwDYhK-123">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="680" y="1466" as="sourcePoint" />
|
||||
<mxPoint x="730" y="1484" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-127" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-126">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-128" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-99" target="mCqeTS5OQJ7wAlwwDYhK-123">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="680" y="1466" as="sourcePoint" />
|
||||
<mxPoint x="730" y="1484" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="690" y="1380" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-129" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-128">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="1" y="9" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-131" value="" style="endArrow=none;dashed=1;html=1;rounded=0;curved=1;strokeColor=#3399FF;strokeWidth=2;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="mCqeTS5OQJ7wAlwwDYhK-133">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="420" y="1560" as="sourcePoint" />
|
||||
<mxPoint x="590" y="1350" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="380" y="1360" />
|
||||
<mxPoint x="600" y="1470" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-133" value="<font color="#3399ff"><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub>1&nbsp;</sub></i><span style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">∨</span><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;"> x<sub>7&nbsp;</sub></i><span style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">∨</span><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">&nbsp;</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub>8</sub></i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="1320" width="130" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-135" value="" style="endArrow=none;dashed=1;html=1;rounded=0;strokeWidth=2;curved=1;strokeColor=#CC0000;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="mCqeTS5OQJ7wAlwwDYhK-137">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="610" y="1560" as="sourcePoint" />
|
||||
<mxPoint x="670" y="1360" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="590" y="1450" />
|
||||
<mxPoint x="620" y="1400" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-137" value="<font color="#cc0000"><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub style="">1&nbsp;</sub></i><span style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">∨</span><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;"> </i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub style="">4</sub></i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="1340" width="130" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-138" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">1</sub>@1</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="1700" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-139" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">8</sub>@2</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="1740" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-140" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">7</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="1850" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-141" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">6</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="1760" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-142" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">5</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="1840" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-143" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-139" target="mCqeTS5OQJ7wAlwwDYhK-141">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="530" y="1840" as="sourcePoint" />
|
||||
<mxPoint x="580" y="1790" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-144" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-143">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-145" value="" style="endArrow=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="mCqeTS5OQJ7wAlwwDYhK-140" target="mCqeTS5OQJ7wAlwwDYhK-142">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="560" y="1776" as="sourcePoint" />
|
||||
<mxPoint x="620" y="1795" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-146" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">5</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-145">
|
||||
<mxGeometry x="0.035" y="-2" relative="1" as="geometry">
|
||||
<mxPoint y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-147" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-140" target="mCqeTS5OQJ7wAlwwDYhK-141">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="560" y="1776" as="sourcePoint" />
|
||||
<mxPoint x="620" y="1795" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-148" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">6</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-147">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-11" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-149" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">4</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="1800" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-150" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-141" target="mCqeTS5OQJ7wAlwwDYhK-149">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="560" y="1776" as="sourcePoint" />
|
||||
<mxPoint x="600" y="1785" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-151" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-150">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-152" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-142" target="mCqeTS5OQJ7wAlwwDYhK-149">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="660" y="1796" as="sourcePoint" />
|
||||
<mxPoint x="700" y="1814" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-153" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">4</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-152">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="2" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-154" value="<font face="Computer modern" style="font-size: 20px;"><i>x</i><sub style="font-style: italic;">2</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="1760" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-155" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬</i><font style="border-color: var(--border-color); font-size: 20px;" face="Computer modern"><i style="border-color: var(--border-color);">x</i><sub style="border-color: var(--border-color); font-style: italic;">3</sub>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="1840" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-156" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-149" target="mCqeTS5OQJ7wAlwwDYhK-154">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="660" y="1796" as="sourcePoint" />
|
||||
<mxPoint x="700" y="1814" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-157" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-156">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-158" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-149" target="mCqeTS5OQJ7wAlwwDYhK-155">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="750" y="1814" as="sourcePoint" />
|
||||
<mxPoint x="790" y="1796" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-159" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">3</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-158">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-3" y="3" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-160" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.106;entryY=0.126;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-138" target="mCqeTS5OQJ7wAlwwDYhK-154">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="750" y="1814" as="sourcePoint" />
|
||||
<mxPoint x="790" y="1796" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-161" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><sub style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left; font-style: italic;">1</sub>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-160">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-162" value="<font face="Computer modern" style="font-size: 20px;"><i>κ</i>@3</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFCCCC;verticalAlign=middle;labelPosition=center;verticalLabelPosition=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="870" y="1800" width="70" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-163" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-154" target="mCqeTS5OQJ7wAlwwDYhK-162">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="870" y="1730" as="sourcePoint" />
|
||||
<mxPoint x="927" y="1768" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-164" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-163">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="-11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-165" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-155" target="mCqeTS5OQJ7wAlwwDYhK-162">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="840" y="1796" as="sourcePoint" />
|
||||
<mxPoint x="890" y="1814" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-166" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-165">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="5" y="4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-167" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="mCqeTS5OQJ7wAlwwDYhK-138" target="mCqeTS5OQJ7wAlwwDYhK-162">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="840" y="1796" as="sourcePoint" />
|
||||
<mxPoint x="890" y="1814" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="850" y="1710" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-168" value="<i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; text-align: left;"><font size="1">2</font></i>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="mCqeTS5OQJ7wAlwwDYhK-167">
|
||||
<mxGeometry x="-0.0329" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="1" y="9" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-171" value="" style="endArrow=none;dashed=1;html=1;rounded=0;strokeWidth=2;curved=1;strokeColor=#CC0000;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="mCqeTS5OQJ7wAlwwDYhK-172">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="770" y="1890" as="sourcePoint" />
|
||||
<mxPoint x="830" y="1690" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="750" y="1780" />
|
||||
<mxPoint x="780" y="1730" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-172" value="<font color="#cc0000"><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub style="">1&nbsp;</sub></i><span style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">∨</span><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;"> </i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px; text-align: left;">¬x<sub style="">4</sub></i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="1670" width="130" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-173" value="<font style="font-size: 20px;" face="Computer modern"><i>c<sub style="">1</sub>:&nbsp;¬x<sub>1</sub>&nbsp;</i>∨ <i>x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub>4</sub>&nbsp;<br>c<sub>2</sub>:&nbsp;¬x<sub>1</sub>&nbsp;</i>∨&nbsp;<i>¬x<sub>2</sub>&nbsp;</i>∨<i>&nbsp;x<sub>3</sub></i><br><i>c</i><sub style="font-style: italic;">3</sub><i>:&nbsp;¬x</i><sub style="font-style: italic;">3</sub><i>&nbsp;</i>∨&nbsp;<i>¬x<sub>4</sub></i><br><i>c</i><sub style="font-style: italic;">4</sub><i>:&nbsp;x</i><sub style="font-style: italic;">4</sub><i>&nbsp;</i>∨<i>&nbsp;x<sub style="">5</sub>&nbsp;</i>∨<i>&nbsp;x<sub>6</sub></i><br><i>c</i><sub style="font-style: italic;">5</sub><i>:&nbsp;¬x<sub>5</sub>&nbsp;</i>∨&nbsp;<i>x<sub>7</sub></i><br><i>c</i><span style="font-style: italic;"><sub>6</sub></span><i>:&nbsp;¬x</i><sub style="font-style: italic;">6</sub><i>&nbsp;</i>∨&nbsp;<i>x<sub>7</sub>&nbsp;</i>∨<i>&nbsp;¬x<sub style="">8<br></sub></i></font><b><u><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">c</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">:&nbsp;</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">¬x<sub style="border-color: var(--border-color);">1&nbsp;</sub></i><span style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">∨</span><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">&nbsp;</i><i style="border-color: var(--border-color); font-family: &quot;Computer modern&quot;; font-size: 20px;">¬x<sub style="border-color: var(--border-color);">4</sub></i></u></b><font face="Computer modern"><br></font>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="1680" width="200" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mCqeTS5OQJ7wAlwwDYhK-174" value="<font face="Computer modern" style="font-size: 18px;">(1UIP)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="685" y="1830" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@ -0,0 +1,484 @@
|
||||
\chapter{Constraint programming}
|
||||
|
||||
|
||||
|
||||
\section{Definitions}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Constraint satisfaction problem (CSP)] \marginnote{Constraint satisfaction problem (CSP)}
|
||||
Triple $\langle X, D, C \rangle$ where:
|
||||
\begin{itemize}
|
||||
\item $X$ is the set of decision variables $\{ x_1, \dots, x_n \}$.
|
||||
\item $D$ is the set of domains $\{ D(X_1), \dots, D(X_n) \}$ or $\{ D_1, \dots, D_n \}$ for $X$.
|
||||
\item $C$ is the set of constraints $\{ C_1, \dots, C_m \}$.
|
||||
Each $C_i$ is a relation over the domain of $X$ (i.e. $C_i \subseteq D_j \times \dots \times D_k$).
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\item[Constraint optimization problem (COP)] \marginnote{Constraint optimization problem (COP)}
|
||||
Tuple $\langle X, D, C, f \rangle$ where $\langle X, D, C \rangle$ is a CSP and
|
||||
$f$ is the objective variable to minimize or maximize.
|
||||
|
||||
|
||||
\item[Constraint] \marginnote{Constraint}
|
||||
\phantom{}
|
||||
\begin{description}
|
||||
\item[Extensional representation] List all allowed combinations.
|
||||
\item[Intensional representation] Declarative relations between variables.
|
||||
\end{description}
|
||||
|
||||
|
||||
\item[Symmetry] \marginnote{}
|
||||
Search states that lead to the same result.
|
||||
|
||||
\begin{description}
|
||||
\item[Variable symmetry] \marginnote{Variable symmetry}
|
||||
A permutation of the assignment order of the variables results in the same feasible or unfeasible solution.
|
||||
|
||||
\item[Value symmetry] \marginnote{Value symmetry}
|
||||
A permutation of the values in the domain results in the same feasible or unfeasible solution.
|
||||
\end{description}
|
||||
|
||||
\begin{remark}
|
||||
Variable and value symmetries can be combined resulting in a total of $2n!$ possible symmetries.
|
||||
\end{remark}
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\section{Modeling techniques}
|
||||
|
||||
\begin{description}
|
||||
\item[Auxiliary variables] \marginnote{Auxiliary variables}
|
||||
Add new variables to capture constraints difficult to model or
|
||||
to reduce the search space by collapsing multiple variables into one.
|
||||
|
||||
|
||||
\item[Global constraints] \marginnote{Global constraints}
|
||||
Relation between an arbitrary number of variables.
|
||||
It is usually computationally faster than listing multiple constraints.
|
||||
|
||||
|
||||
\item[Implied constraints] \marginnote{Implied constraints}
|
||||
Semantically redundant constraints with the advantage of pruning the search space earlier.
|
||||
|
||||
\begin{remark}
|
||||
A purely redundant constraint is also an implied constraint but it does not give any computational improvement.
|
||||
\end{remark}
|
||||
|
||||
|
||||
\item[Symmetry breaking constraints] \marginnote{Symmetry breaking constraints}
|
||||
Constraints to avoid considering symmetric states.
|
||||
Usually, it is sufficient to fix an ordering of the variables.
|
||||
|
||||
\begin{remark}
|
||||
When introducing symmetry breaking constraints,
|
||||
it might be possible to add new simplifications and implied constraints.
|
||||
\end{remark}
|
||||
|
||||
|
||||
\item[Dual viewpoint] \marginnote{Dual viewpoint}
|
||||
Modeling a problem from a different perspective might result in a more efficient search.
|
||||
\begin{example}
|
||||
Exploiting geometric symmetries.
|
||||
\end{example}
|
||||
|
||||
|
||||
\item[Combined model] \marginnote{Combined model}
|
||||
Merging two or more models of the same problem by adding channeling constraints to guarantee consistency.
|
||||
|
||||
Combining two models can be useful for obtaining the advantages of both
|
||||
(e.g. one model uses global constraints, while the other handles symmetries).
|
||||
|
||||
\begin{remark}
|
||||
When combining multiple models, some constraints might be simplified as one of the models already captures it natively.
|
||||
\end{remark}
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\section{Constraints}
|
||||
|
||||
|
||||
\subsection{Local consistency}
|
||||
|
||||
Examine individual constraints and detect inconsistent partial assignments.
|
||||
|
||||
\begin{description}
|
||||
\item[Generalized arc consistency (GAC)] \marginnote{Generalized arc consistency (GAC)}
|
||||
\phantom{}
|
||||
\begin{description}
|
||||
\item[Support]
|
||||
Given a constraint defined on $k$ variables $C \subseteq D(X_1)\times \dots \times D(X_k)$,
|
||||
each tuple $(d_1, \dots, d_k) \in C$ (i.e. allowed variables assignment) is a support for $C$.
|
||||
\end{description}
|
||||
|
||||
A constraint $C(X_1, \dots, X_k)$ is GAC (GAC($C$)) iff:
|
||||
\[ \forall X_i \in \{ X_1, \dots, X_k \}, \forall v \in D(X_i): \text{$v$ belongs to a support for $C$} \]
|
||||
|
||||
\begin{remark}
|
||||
A CSP is GAC when all its constraints are GAC.
|
||||
\end{remark}
|
||||
|
||||
\begin{example}[Generalized arc consistency]
|
||||
Given the variables $D(X_1) = \{ 1, 2, 3 \}$, $D(X_2) = \{ 1, 2 \}$, $D(X_3) = \{ 1, 2 \}$ and
|
||||
the constraint $C: \texttt{alldifferent}([X_1, X_2, X_3])$,
|
||||
$C$ is not GAC as $1 \in D(X_1)$ and $2 \in D(X_2)$ do not have a support.
|
||||
|
||||
By applying a constraint propagation algorithm, we can reduce the domain to:
|
||||
$D(X_1) = \{ \cancel{1}, \cancel{2}, 3 \}$ and $D(X_2) = D(X_3) = \{ 1, 2 \}$.
|
||||
Now $C$ is GAC.
|
||||
\end{example}
|
||||
|
||||
\begin{description}
|
||||
\item[Arc consistency (AC)] \marginnote{Arc consistency (AC)}
|
||||
A constraint is arc consistent when its binary constrains are GAC.
|
||||
|
||||
\begin{example}[Arc consistency]
|
||||
Given the variables $D(X_1) = \{ 1, 2, 3 \}$, $D(X_2) = \{ 2, 3, 4 \}$ and the constraint $C: X_1 = X_2$,
|
||||
$C$ is not arc consistent as $1 \in D(X_1)$ and $4 \in D(X_2)$ do not have a support.
|
||||
|
||||
By applying a constraint propagation algorithm, we can reduce the domain to:
|
||||
$D(X_1) = \{ \cancel{1}, 2, 3 \}$ and $D(X_2) = \{ 2, 3, \cancel{4} \}$.
|
||||
Now $C$ is arc consistent.
|
||||
\end{example}
|
||||
\end{description}
|
||||
|
||||
|
||||
\item[Bounds consistency (BC)] \marginnote{Bounds consistency (BC)}
|
||||
Can be applied on totally ordered domains.
|
||||
The domain of a variable $X_i$ is relaxed from $D(X_i)$ to the interval $[\min\{D(X_i)\}, \max\{D(X_i)\}]$.
|
||||
|
||||
\begin{description}
|
||||
\item[Bound support]
|
||||
Given a constraint defined on $k$ variables $C(X_1, \dots, X_k)$,
|
||||
each tuple $(d_1, \dots, d_k) \in C$, where $d_i \in [\min\{D(X_i)\}, \max\{D(X_i)\}]$, is a bound support for $C$.
|
||||
\end{description}
|
||||
|
||||
A constraint $C(X_1, \dots, X_k)$ is BC (BC($C$)) iff:
|
||||
\[
|
||||
\begin{split}
|
||||
\forall X_i &\in \{ X_1, \dots, X_k \}: \\
|
||||
&\text{$\min\{D(X_i)\}$ and $\max\{D(X_i)\}$ belong to a bound support for $C$}
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\begin{remark}
|
||||
BC might not detect all GAC inconsistencies, but it is computationally cheaper.
|
||||
\end{remark}
|
||||
|
||||
\begin{remark}
|
||||
On monotonic constraints, BC and GAC are equivalent.
|
||||
\end{remark}
|
||||
|
||||
\begin{example}
|
||||
Given the variables $D(X_1) = D(X_2) = D(X_3) = \{ 1, 3 \}$ and the constraint $C: \texttt{alldifferent}([X_1, X_2, X_3])$,
|
||||
$C$ is BC as all $\min\{D(X_i)\}$ and $\max\{D(X_i)\}$ belong to the bound support $\{ (d_1, d_2, d_3) \mid d_i \in [1, 3] \land d_1 \neq d_2 \neq d_3 \}$
|
||||
|
||||
On the other hand, $C$ fails with GAC.
|
||||
\end{example}
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Constraint propagation}
|
||||
|
||||
\begin{description}
|
||||
\item[Constraint propagation] \marginnote{Constraint propagation}
|
||||
Algorithm that removes values from the domains of the variables to achieve a given level of consistency.
|
||||
|
||||
Constraint propagation algorithms interact with each other and already propagated constraints might be woke up again by another constraint.
|
||||
Propagation will eventually reach a fixed point.
|
||||
|
||||
|
||||
\item[Specialized propagation] \marginnote{Specialized propagation}
|
||||
Propagation algorithm specific to a given constraint.
|
||||
Allows to exploit the semantics of the constraint for a generally more efficient approach.
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Global constraints}
|
||||
|
||||
Constraints to capture complex, non-binary, and recurring features of the variables.
|
||||
Usually, global constraints are enforced using specialized propagation algorithms.
|
||||
|
||||
|
||||
\subsubsection{Counting constraints}
|
||||
\marginnote{Counting constraints}
|
||||
Constrains the number of variables satisfying a condition
|
||||
or the occurrences of certain values.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[All-different]
|
||||
Enforces that all variables assume a different value.
|
||||
\[ \texttt{alldifferent}([X_1, \dots, X_k]) \iff \forall i, j, \in \{ 1, \dots, k\}, i \neq j: X_i \neq X_j \]
|
||||
|
||||
\item[Global cardinality]
|
||||
Enforces the number of times some values should appear among the variables.
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{gcc}([X_1, \dots, X_k], &[v_1, \dots, v_m], [O_1, \dots, O_m]) \iff \\
|
||||
& \forall j \in \{1, \dots, m\}: \left\vert \{ X_i \mid X_i = v_j \} \right\vert = O_j
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\item[Among]
|
||||
Constrains the number of occurrences of certain values among the variables.
|
||||
\[
|
||||
\texttt{among}([X_1, \dots, X_k], \{v_1, \dots, v_n\}, l, u) \iff l \leq \left\vert \{ X_i \mid X_i \in \{v_1, \dots, v_n\} \} \right\vert \leq u
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsubsection{Sequencing constraints}
|
||||
\marginnote{Sequencing constraints}
|
||||
Enforces a pattern on a sequence of variables.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Sequence]
|
||||
Enforces the number of times certain values can appear in a subsequence of a given length $q$.
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{sequence}(l, u, q, &[X_1, \dots, X_k], \{v_1, \dots, v_n\}) \iff \\
|
||||
& \forall i \in [1, \dots, k-q+1]: \texttt{among}([X_1, \dots, X_{i+q-1}], \{v_1, \dots, v_n\}, l, u)
|
||||
\end{split}
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsubsection{Scheduling constraints}
|
||||
\marginnote{Scheduling constraints}
|
||||
Useful to schedule tasks with release times, duration, deadlines, and resource limitations.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Disjunctive resource]
|
||||
Enforces that the tasks do not overlap over time.
|
||||
Given the start time $S_i$ and the duration $D_i$ of $k$ tasks:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{disjunctive}([S_1, \dots, S_k], &[D_1, \dots, D_k]) \iff \\
|
||||
& \forall i < j: (S_i + D_i \leq S_j) \vee (S_j + D_j \leq S_i)
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\item[Cumulative resource]
|
||||
Constrains the usage of a shared resource.
|
||||
Given a resource with capacity $C$ and the start time $S_i$, the duration $D_i$, and the resource requirement $R_i$ of $k$ tasks:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{cumulative}([S_1, \dots, S_k], &[D_1, \dots, D_k], [R_1, \dots, R_k], C) \iff \\
|
||||
& \forall u \in \{ D_1, \dots, D_k \}: \sum_{\text{$i$ s.t. $S_i \leq u < S_i+D_i$}} R_i \leq C
|
||||
\end{split}
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsubsection{Ordering constraints}
|
||||
\marginnote{Ordering constraints}
|
||||
|
||||
Enforce an ordering between variables or values.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Lexicographic ordering]
|
||||
Enforces that a sequence of variables is lexicographically less than or equal to another sequence.
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{lex$\leq$}([X_1, \dots, X_k], [Y_1, \dots, Y_k]) \iff & X_1 \leq Y_1 \land \\
|
||||
&(X_1 = Y_1 \Rightarrow X_2 \leq Y_2) \land \\
|
||||
& \dots \land \\
|
||||
&((X_1 = Y_1 \land \dots \land X_{k-1} = Y_{k-1}) \Rightarrow X_k \leq Y_k)
|
||||
\end{split}
|
||||
\]
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsubsection{Generic purpose constraints}
|
||||
\marginnote{Generic purpose constraints}
|
||||
|
||||
Define constraints in an extensive way.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Table]
|
||||
Associate to the variables their allowed assignments.
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\subsubsection{Specialized propagation}
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Constraint decomposition] \marginnote{Constraint decomposition}
|
||||
A global constraint is decomposed into smaller and simpler constraints with known propagation algorithms.
|
||||
\begin{remark}
|
||||
As the problem is decomposed, some inconsistencies may not be detected.
|
||||
\end{remark}
|
||||
|
||||
\begin{example}(Decomposition of \texttt{among})
|
||||
The \texttt{among} constraint can be decomposed as follows:
|
||||
\begin{descriptionlist}
|
||||
\item[Variables]
|
||||
$B_i$ with $D(B_i) = \{ 0, 1 \}$ for $1 \leq i \leq k$.
|
||||
\item[Constraints] \phantom{}
|
||||
\begin{itemize}
|
||||
\item $C_i: B_i = 1 \iff X_i \in v$ for $1 \leq i \leq k$.
|
||||
\item $C_{k+1}: \sum_{i} B_i = N$.
|
||||
\end{itemize}
|
||||
\end{descriptionlist}
|
||||
AC($C_i$) and BC($C_{k+1}$) ensures GAC on \texttt{among}.
|
||||
\end{example}
|
||||
|
||||
\item[Dedicated propagation algorithm] \marginnote{Dedicated propagation algorithm}
|
||||
Ad-hoc algorithm that implements an efficient propagation.
|
||||
|
||||
\begin{example}(\texttt{alldifferent} through maximal matching)
|
||||
\begin{descriptionlist}
|
||||
\item[Bipartite graph]
|
||||
Graph where the edges are partitioned in two groups $U$ and $V$.
|
||||
Nodes in $U$ can only connect to nodes in $V$.
|
||||
|
||||
\item[Maximal matching]
|
||||
Largest subsets of edges such that there are no edges with nodes in common.
|
||||
\end{descriptionlist}
|
||||
|
||||
Define a bipartite graph $G=(U \cup V, E)$ where:
|
||||
\begin{itemize}
|
||||
\item $U = \{ X_1, \dots, X_k \}$ are the variables.
|
||||
\item $V = D(X_1) \cup \dots \cup D(X_k)$ are the possible values of the variables.
|
||||
\item $E = \{ (X_i, v) \mid X_i \in U, v \in V: v \in D(X_i) \}$
|
||||
contains the edges that connect every variable in $U$ to its possible values in $V$.
|
||||
\end{itemize}
|
||||
|
||||
All the possible variable assignments of $X_1, \dots, X_k$ are the maximal matchings in $G$.
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
|
||||
\section{Search}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Backtraking tree search] \marginnote{Backtraking tree search}
|
||||
Tree where nodes are variables and branches are variable assignments.
|
||||
|
||||
\item[Systematic search] \marginnote{Systematic search}
|
||||
Instantiate and explore the tree depth first.
|
||||
Constraints are checked when all variables are assigned (i.e. when a leaf is reached)
|
||||
and the search backtracks of one decision if it fails.
|
||||
|
||||
This approach has exponential complexity.
|
||||
|
||||
\item[Search and propagation] \marginnote{Search and propagation}
|
||||
Propagate the constraints after an assignment to
|
||||
remove inconsistent values from the domain of yet unassigned variables.
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Search heuristics}
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Static heuristic] \marginnote{Static heuristic}
|
||||
The order of exploration of the variables is fixed before search.
|
||||
|
||||
\item[Dynamic heuristic] \marginnote{Dynamic heuristic}
|
||||
The order of exploration of the variables is determined during search.
|
||||
\end{descriptionlist}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Fail-first (FF)] \marginnote{Fail-first (FF)}
|
||||
Try the variables that are most likely to fail in order to maximize propagation.
|
||||
\begin{description}
|
||||
\item[Minimum domain] \marginnote{Minimum domain}
|
||||
Assign the variable with the minimum domain size.
|
||||
|
||||
\item[Most constrained] \marginnote{Most constrained}
|
||||
Assign the variable with the maximum degree (i.e. number of constraints that involve it).
|
||||
|
||||
\item[Combination] \marginnote{Combination}
|
||||
Combine both minimum domain and most constrained to minimize the value $\frac{\text{domain size}}{\text{degree}}$.
|
||||
|
||||
\item[Weighted degree] \marginnote{Weighted degree}
|
||||
Each constraint $C$ starts with a weight $w(C) = 1$.
|
||||
During propagation, when a constraint $C$ fails, its weight is increased by 1.
|
||||
|
||||
The weighted degree of a variable $X_i$ is:
|
||||
\[ w(X_i) = \sum_{\text{$C$ s.t. $C$ involves $X_i$}} w(C) \]
|
||||
|
||||
Assign the variable with minimum $\frac{\vert D(X_i) \vert}{w(X_i)}$.
|
||||
\end{description}
|
||||
|
||||
|
||||
\item[Heavy tail behavior]
|
||||
Instances of a problem that are particularly hard and expensive to solve.
|
||||
|
||||
\begin{description}
|
||||
\item[Randomization] \marginnote{Randomization}
|
||||
Sometimes, make a random choice:
|
||||
\begin{itemize}
|
||||
\item Randomly choose the variable or value to assign.
|
||||
\item Break ties randomly.
|
||||
\end{itemize}
|
||||
|
||||
\item[Restarting] \marginnote{Restarting}
|
||||
Restart the search after a certain amount of resources (e.g. search steps) have been consumed.
|
||||
The new search can exploit past knowledge, change heuristics, or use randomization.
|
||||
|
||||
\begin{description}
|
||||
\item[Constant restart]
|
||||
Restart after a fixed number $L$ of resources have been used.
|
||||
|
||||
\item[Geometric restart]
|
||||
At each restart, the resource limit $L$ is multiplied by a factor $\alpha$.
|
||||
This will result in a sequence $L, \alpha L, \alpha^2 L, \dots$.
|
||||
|
||||
\item[Luby restart]
|
||||
\phantom{}
|
||||
\begin{descriptionlist}
|
||||
\item[Luby sequence]
|
||||
The first element of the sequence is 1. Then, the sequence is iteratively computed as follows:
|
||||
\begin{itemize}
|
||||
\item Repeat the current sequence.
|
||||
\item Add $2^{i+1}$ at the end of the sequence.
|
||||
\end{itemize}
|
||||
\begin{example}
|
||||
$[1, 1, 2, 1, 1, 2, 4, 1, 1, 2, 1, 1, 2, 4, 8, \dots]$
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||
At the $i$-th restart, the resource limit $L$ is multiplied by a factor determined by the $i$-th element of the Luby sequence.
|
||||
\end{description}
|
||||
|
||||
\begin{remark}
|
||||
Weighted degree and restarts work well together when weights are carried over.
|
||||
\end{remark}
|
||||
|
||||
\begin{remark}
|
||||
Restarting on deterministic heuristics does not give any advantage.
|
||||
\end{remark}
|
||||
\end{description}
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\subsection{Constraint optimization problems}
|
||||
|
||||
\begin{description}
|
||||
\item[Branch and bound] \marginnote{Branch and bound}
|
||||
Solves a COP by solving a sequence of CSPs.
|
||||
\begin{enumerate}
|
||||
\item Find a feasible solution and add a bounding constraint
|
||||
to enforce that future solutions are better than this one.
|
||||
\item Backtrack the last decision and look for a new solution on the same tree with the new constraint.
|
||||
\item Repeat until the problem becomes unfeasible. The last solution is optimal.
|
||||
\end{enumerate}
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Large neighborhood search (LNS)}
|
||||
\marginnote{Large neighborhood search (LNS)}
|
||||
|
||||
Hybrid between constraint programming and heuristic search.
|
||||
\begin{enumerate}
|
||||
\item Find an initial solution $s$ using CP.
|
||||
\item Create a partial solution $N(s)$ by taking some assignments from the solution $s$ and leaving the other unassigned.
|
||||
\item Explore the large neighborhood using CP starting from $N(s)$.
|
||||
\end{enumerate}
|
||||
@ -0,0 +1,482 @@
|
||||
\chapter{SAT solver}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Satifiability (SAT)] \marginnote{SAT}
|
||||
Given a propositional formula $f$,
|
||||
find an assignment of the variables to make the formula true.
|
||||
|
||||
If $f$ is satisfiable, we say that it is SAT. Otherwise, it is UNSAT.
|
||||
\end{description}
|
||||
|
||||
\begin{theorem}(Cook-Levin) \marginnote{Cook-Levin theorem}
|
||||
SAT is NP-complete.
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[NP-complete]
|
||||
A problem is NP-complete iff it is in NP and every NP problem can be reduced to it.
|
||||
\begin{remark}
|
||||
All problems in NP can be reduced to SAT.
|
||||
\end{remark}
|
||||
\end{descriptionlist}
|
||||
\end{theorem}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Satisfiable formula] \marginnote{Satisfiable formula}
|
||||
A formula $f$ is satisfiable iff there is an assignment of the variables that makes it true.
|
||||
|
||||
|
||||
\item[Valid formula] \marginnote{Valid formula}
|
||||
A formula $f$ is valid iff any assignment of the variables makes it true.
|
||||
|
||||
\begin{remark}
|
||||
$f$ is valid iff $\lnot f$ is UNSAT.
|
||||
\end{remark}
|
||||
|
||||
|
||||
\item[SAT solver] \marginnote{SAT solver}
|
||||
Given a problem, the following steps should be followed to solve it using a SAT solver:
|
||||
\begin{enumerate}
|
||||
\item Formalize the problem into a propositional formula.
|
||||
\item Depending on the solver, it might be necessary to convert it into CNF.
|
||||
\item Feed the formula to a SAT solver.
|
||||
\item The result can be an assignment of the variables (SAT) or a failure (UNSAT).
|
||||
\end{enumerate}
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\section{Solvers}
|
||||
|
||||
\subsection{Resolution}
|
||||
|
||||
\begin{description}
|
||||
\item[Resolution] \marginnote{Resolution}
|
||||
Basic approach for SAT.
|
||||
Prove that a set of CNF clauses is UNSAT by deriving new clauses until a contradiction is reached.
|
||||
|
||||
Resolution rules to derive new clauses are:
|
||||
\begin{descriptionlist}
|
||||
\item[Resolution rule] \marginnote{Resolution rule}
|
||||
\phantom{}
|
||||
\begin{minipage}{0.4\linewidth}
|
||||
\begin{prooftree}
|
||||
\AxiomC{$p \vee V$}
|
||||
\AxiomC{$\lnot p \vee W$}
|
||||
\BinaryInfC{$V \vee W$}
|
||||
\end{prooftree}
|
||||
\end{minipage}
|
||||
|
||||
\item[Unit resolution] \marginnote{Unit resolution}
|
||||
\begin{minipage}{0.4\linewidth}
|
||||
\begin{prooftree}
|
||||
\AxiomC{$p$}
|
||||
\AxiomC{$\lnot p \vee W$}
|
||||
\BinaryInfC{$W$}
|
||||
\end{prooftree}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.4\linewidth}
|
||||
\begin{prooftree}
|
||||
\AxiomC{$\lnot p$}
|
||||
\AxiomC{$p \vee V$}
|
||||
\BinaryInfC{$V$}
|
||||
\end{prooftree}
|
||||
\end{minipage}
|
||||
|
||||
Note that this is equivalent to the rule of implication elimination:\\
|
||||
\begin{minipage}{0.4\linewidth}
|
||||
\begin{prooftree}
|
||||
\AxiomC{$p$}
|
||||
\AxiomC{$p \Rightarrow W$}
|
||||
\BinaryInfC{$W$}
|
||||
\end{prooftree}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.4\linewidth}
|
||||
\begin{prooftree}
|
||||
\AxiomC{$\lnot p$}
|
||||
\AxiomC{$\lnot p \Rightarrow V$}
|
||||
\BinaryInfC{$V$}
|
||||
\end{prooftree}
|
||||
\end{minipage}
|
||||
\end{descriptionlist}
|
||||
\end{description}
|
||||
|
||||
\begin{example}
|
||||
Given the CNF formula:
|
||||
\[ (p \vee q) \land (\lnot r \vee s) \land (\lnot q \vee r) \land (\lnot r \vee \lnot s) \land (\lnot p \vee r) \]
|
||||
Resolution can be applied as follows:
|
||||
\begin{itemize}
|
||||
\item The starting clauses are:
|
||||
$(p \vee q) \cdot (\lnot r \vee s) \cdot (\lnot q \vee r) \cdot (\lnot r \vee \lnot s) \cdot (\lnot p \vee r)$
|
||||
\item From $(p \vee q)$ and $(\lnot q \vee r)$, one can derive $(p \vee r)$.
|
||||
\item From $(\lnot p \vee r)$ and $(p \vee r)$, one can derive $r$.
|
||||
\item From $(\lnot r \vee s)$ and $r$, one can derive $s$.
|
||||
\item From $(\lnot r \vee \lnot s)$ and $s$, one can derive $\lnot r$.
|
||||
\item From $r$ and $\lnot r$, one reaches $\bot$.
|
||||
\end{itemize}
|
||||
\end{example}
|
||||
|
||||
|
||||
|
||||
\subsection{DPLL algorithm}
|
||||
|
||||
\begin{description}
|
||||
\item[DPLL] \marginnote{DPLL}
|
||||
Algorithm based on unit resolution.
|
||||
Given a set of clauses, DPLL is applied as follows:
|
||||
\begin{enumerate}
|
||||
\item Apply unit resolution as long as possible
|
||||
(i.e. for every clause containing a single literal $l$, remove $\lnot l$ from all clauses.
|
||||
Clauses containing $l$ can also be removed as they are redundant).
|
||||
\item Choose a variable $p$.
|
||||
\item Recursively apply DPLL by assuming $p$ in one call and $\lnot p$ in another.
|
||||
\end{enumerate}
|
||||
|
||||
\begin{theorem}
|
||||
DPLL is complete.
|
||||
\end{theorem}
|
||||
|
||||
\begin{remark}
|
||||
DPLL efficiency strongly depends on the variables.
|
||||
\end{remark}
|
||||
\end{description}
|
||||
|
||||
\begin{example}
|
||||
Given a CNF formula with clauses:
|
||||
\[ (\lnot p \vee \lnot s) \cdot (\lnot p \vee \lnot r) \cdot (\lnot q \vee \lnot t) \cdot (p \vee r) \cdot (p \vee s) \cdot (r \vee t) \cdot (\lnot s \vee t) \cdot (q \vee s) \]
|
||||
There are no unit clauses, so we choose the variable $p$ and consider the cases where $p$ and where $\lnot p$.
|
||||
|
||||
By assuming $p$, unit resolution can be applied as follows:
|
||||
\begin{itemize}
|
||||
\item $p$ with $(\lnot p \vee \lnot s)$ derives $\lnot s$.
|
||||
\item $p$ with $(\lnot p \vee \lnot r)$ derives $\lnot r$.
|
||||
\item $\lnot s$ with $(q \vee s)$ derives $q$.
|
||||
\item $\lnot r$ with $(r \vee t)$ derives $t$.
|
||||
\item $q$ with $(\lnot q \vee \lnot t)$ derives $\not t$.
|
||||
\item $t$ and $\lnot t$ bring to $\bot$. This branch is UNSAT.
|
||||
\end{itemize}
|
||||
|
||||
By assuming $\lnot p$, unit resolution can be applied as follows:
|
||||
\begin{itemize}
|
||||
\item $\lnot p$ with $(p \vee r)$ derives $r$.
|
||||
\item $\lnot p$ with $(p \vee s)$ derives $s$.
|
||||
\item $s$ with $(\lnot s \vee t)$ derives $t$.
|
||||
\item $t$ with $(\lnot q \vee \lnot t)$ derives $\lnot q$.
|
||||
\end{itemize}
|
||||
We reached a full assignment $\langle \lnot p, r, s, t, \lnot q \rangle$. The formula is SAT.
|
||||
\end{example}
|
||||
|
||||
\begin{description}
|
||||
\item[DPLL implementation] \marginnote{DPLL algorithm}
|
||||
An efficient implementation of DPLL uses a list $M$ of the literals that have been decided or derived.
|
||||
|
||||
\begin{description}
|
||||
\item[Notations] \phantom{}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item A literal $l$ holds in $M$ ($M \models l$) iff $l$ is in $M$.
|
||||
\item $M$ contradicts a clause $C$ ($M \models \lnot C$) iff for every literal $l$ in $C$, $M \models \lnot l$.
|
||||
\item A literal $l$ is undefined iff $M \cancel{\models} l$ and $M \cancel{\models} \lnot l$.
|
||||
\item A decision literal (i.e. literal assumed to hold) is denoted as $l^\mathcal{D}$.
|
||||
\end{itemize}
|
||||
\end{description}
|
||||
|
||||
The algorithm follows four rules:
|
||||
\begin{descriptionlist}
|
||||
\item[\texttt{UnitPropagate}]
|
||||
If the CNF contains a clause $(A \vee l)$ such that $M \models \lnot A$ and $l$ is an undefined literal,
|
||||
then there is a transition:
|
||||
\[ M \rightarrow Ml \]
|
||||
|
||||
\item[\texttt{Decide}]
|
||||
When \texttt{UnitPropagate} it not possible, an undefined literal $l$ is assumed to hold (it becomes a decision literal):
|
||||
\[ M \rightarrow Ml^\mathcal{D} \]
|
||||
|
||||
\item[\texttt{Backtrack}]
|
||||
When a branch is UNSAT, the algorithm backtracks to the nearest decision literal and negates it.
|
||||
Given a clause $C$ of the CNF, if $Ml^\mathcal{D}N \models \lnot C$ and $N$ does not contain other decision literals,
|
||||
then there is a transition:
|
||||
\[ Ml^\mathcal{D}N \rightarrow M \lnot l \]
|
||||
|
||||
\item[\texttt{Fail}]
|
||||
Given a clause $C$ of the CNF, if $M \models \lnot C$ and $M$ contains a definitive assignment of all the variables (i.e. no decision literals),
|
||||
then there is a transition:
|
||||
\[ M \rightarrow \text{fail} \]
|
||||
\end{descriptionlist}
|
||||
|
||||
In the end, if the formula is SAT, $M$ contains an assignment of the variables.
|
||||
\end{description}
|
||||
|
||||
\begin{remark}
|
||||
Compared to resolution, DPLL is more memory efficient.
|
||||
\end{remark}
|
||||
|
||||
|
||||
|
||||
\subsection{Conflict-driven clause learning (CDCL)}
|
||||
|
||||
DPLL with two improvements:
|
||||
\begin{descriptionlist}
|
||||
\item[Clause learning]
|
||||
When a contradiction is found, augment the original CNF with a conflict clause
|
||||
to prune the search space.
|
||||
|
||||
The conflict clause is obtained through resolution by combining two clauses that cause the contradiction.
|
||||
|
||||
\item[\texttt{Backjumping}]
|
||||
Depending on the type of contradiction, skip decision literals that are not causing the conflict
|
||||
and directly backtrack to an earlier relevant decision literal.
|
||||
|
||||
Given a clause $C$ of the CNF, if $Ml^\mathcal{D}N \models \lnot C$ and
|
||||
there is a clause $(C' \vee l')$ derivable from the CNF such that $M \models \lnot C'$ and
|
||||
$l'$ is undefined, then there is a transition:
|
||||
\[ Ml^\mathcal{D}N \rightarrow Ml' \]
|
||||
Note that $N$ might contain other decision literals and $(C' \vee l')$ is a conflict clause.
|
||||
|
||||
\begin{remark}
|
||||
\texttt{Backjumping} can be seen as \texttt{UnitPropagate} applied on conflict clauses.
|
||||
\end{remark}
|
||||
\end{descriptionlist}
|
||||
|
||||
\begin{description}
|
||||
\item[Implication graph]
|
||||
DAG $G=(V, E)$ to record the history of decisions and unit resolutions.
|
||||
\begin{descriptionlist}
|
||||
\item[Vertex] Can be:
|
||||
\begin{itemize}
|
||||
\item A decision or derived literal (denoted as $l@d$, where $l$ is the literal and $d$ the decision level it originated from).
|
||||
\item A marker to indicate a conflict (denoted as $\kappa@d$, where $d$ is the decision level it originated from).
|
||||
\end{itemize}
|
||||
|
||||
\item[Edge]
|
||||
Has form $v \xrightarrow{c_i} w$ and indicates that $w$ is obtained using the clause $c_i$ and the literal $v$.
|
||||
\end{descriptionlist}
|
||||
|
||||
\begin{example}
|
||||
Starting from the clauses $c_1, \dots, c_6$ of a CNF, one can build the implication graph while running DPLL/CDCL.
|
||||
|
||||
In this example, the decision literals (green nodes) are assigned following this order: $x_1 \rightarrow x_8 \rightarrow \lnot x_7$:
|
||||
\begin{center}
|
||||
\includegraphics[width=0.8\linewidth]{./img/_cdcl_example1.pdf}
|
||||
\end{center}
|
||||
\[ M \rightarrow M x_1^\mathcal{D} x_8^\mathcal{D} \lnot x_7^\mathcal{D} \]
|
||||
|
||||
Then, it is possible to derive implied variables using unit resolution starting from the decision literals:
|
||||
\begin{center}
|
||||
\includegraphics[width=0.8\linewidth]{./img/_cdcl_example2.pdf}
|
||||
\end{center}
|
||||
\[ M \rightarrow M \lnot x_6 \lnot x_5 \]
|
||||
And so on:
|
||||
\begin{center}
|
||||
\includegraphics[width=0.8\linewidth]{./img/_cdcl_example3.pdf}
|
||||
\end{center}
|
||||
\[ M \rightarrow M x_4 x_2 \lnot x_3 \]
|
||||
|
||||
As $c_2$ is UNSAT, we reached a contradiction:
|
||||
\begin{center}
|
||||
\includegraphics[width=0.8\linewidth]{./img/_cdcl_example4.pdf}
|
||||
\end{center}
|
||||
\end{example}
|
||||
|
||||
\begin{remark}
|
||||
Any cut that separates sources (decision literals) and the sink (contradiction node) is a valid conflict clause for backjumping.
|
||||
|
||||
\begin{example} \phantom{}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.55\linewidth]{./img/_cdcl_cut.pdf}
|
||||
\end{center}
|
||||
\end{example}
|
||||
\end{remark}
|
||||
|
||||
\item[Unit implication point (UIP)]
|
||||
Given an implication graph where the latest decision node is $(l@d)$ and the conflict node is $(\kappa@d)$,
|
||||
a node is a unit implication point iff it appears in all the paths from $(l@d)$ to $(\kappa@d)$.
|
||||
|
||||
The UIP closest to the conflict is denoted as 1UIP.
|
||||
|
||||
\begin{remark}
|
||||
The decision node $(l@d)$ itself is a UIP.
|
||||
\end{remark}
|
||||
|
||||
\item[1UIP-based backjumping]
|
||||
In case of conflict, use the conflict clause obtained by cutting in front of the 1UIP.
|
||||
|
||||
\begin{remark}
|
||||
This allows to:
|
||||
\begin{itemize}
|
||||
\item Reduce the size of the conflict clause.
|
||||
\item Guarantee the highest backtrack jump.
|
||||
\end{itemize}
|
||||
\end{remark}
|
||||
|
||||
\begin{example}
|
||||
\phantom{}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.75\linewidth]{./img/_cdcl_1uip.pdf}
|
||||
\end{center}
|
||||
By adding the conflict clause $(\lnot x_1 \vee \lnot x_4)$, we can backjump up to $x_8^\mathcal{D}$
|
||||
(not to $x_1^\mathcal{D}$ as it makes the conflict clause a unit).
|
||||
\[ x_1^\mathcal{D} x_8^\mathcal{D} \lnot x_7^\mathcal{D} \lnot x_6 \lnot x_5 x_4 x_2 \lnot x_3 \rightarrow x_1^\mathcal{D} \lnot x_4\]
|
||||
\end{example}
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\section{Encodings}
|
||||
|
||||
\begin{description}
|
||||
\item[Cardinality constraints] \marginnote{Cardinality constraints}
|
||||
Constraints of the form:
|
||||
\[ \sum_{1 \leq i \leq n} x_i \bowtie k \]
|
||||
where $k \in \mathbb{N}$ and $\bowtie\,\, \in \{ <, \leq, =, \neq, \geq, > \}$.
|
||||
|
||||
\item[$\mathbf{k=1}$ constraints] \marginnote{$k=1$ constraints}
|
||||
Constraints of the form:
|
||||
\[ \sum_{1 \leq i \leq n} x_i \bowtie 1 \]
|
||||
|
||||
\begin{description}
|
||||
\item[\texttt{ExactlyOne}] \marginnote{\texttt{ExactlyOne}}
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{ExactlyOne}([x_1, \dots, x_n]) &\iff \\
|
||||
&\texttt{AtMostOne}([x_1, \dots, x_n]) \land \texttt{AtLeastOne}([x_1, \dots, x_n])
|
||||
\end{split}
|
||||
\]
|
||||
|
||||
\item[\texttt{AtLeastOne}] \marginnote{\texttt{AtLeastOne}}
|
||||
\[ \texttt{AtLeastOne}([x_1, \dots, x_n]) \iff x_1 \vee x_2 \vee \dots \vee x_n \]
|
||||
|
||||
\item[\texttt{AtMostOne}] \marginnote{\texttt{AtMostOne}}
|
||||
There are different encoding approaches:
|
||||
|
||||
\begin{description}
|
||||
\item[Pairwise encoding] \marginnote{\texttt{AtMostOne} pairwise encoding}
|
||||
Constrains the fact that any pair of variables cannot be both true:
|
||||
\[ \texttt{AtMostOne}([x_1, \dots, x_n]) \iff \bigwedge_{1 \leq i < j \leq n} \lnot (x_i \land x_j) \]
|
||||
This encoding does not require auxiliary variables and introduces $O(n^2)$ new clauses.
|
||||
|
||||
\item[Sequential encoding] \marginnote{\texttt{AtMostOne} sequential encoding}
|
||||
Introduces $n$ new variables $s_i$ such that:
|
||||
\begin{itemize}
|
||||
\item If $s_i = 1$ and $s_{i-1} = 0$, then $x_i = 1$.
|
||||
\item If $s_i = 1$ and $s_{i-1} = 1$, then $x_i = 0$.
|
||||
\end{itemize}
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostOne}([x_1, \dots, x_n]) &\iff \\
|
||||
& (x_1 \Rightarrow s_1) \\
|
||||
& \land \bigwedge_{1 < i < n} \left[ \big( (x_i \vee s_{i-1}) \Rightarrow s_i \big) \land (s_{i-1} \Rightarrow \lnot x_i) \right] \\
|
||||
& \land (s_{n-1} \Rightarrow \lnot x_n)
|
||||
\end{split}
|
||||
\]
|
||||
By expanding the implications, it becomes:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostOne}([x_1, \dots, x_n]) &\iff \\
|
||||
& (\lnot x_1 \vee s_1) \\
|
||||
& \land \bigwedge_{1 < i < n} \left[ (\lnot x_i \vee s_i) \land (\lnot s_{i-1} \vee s_i) \land (\lnot s_{i-1} \vee \lnot x_i) \right] \\
|
||||
& \land (\lnot s_{n-1} \vee \lnot x_n)
|
||||
\end{split}
|
||||
\]
|
||||
This encoding requires $O(n)$ auxiliary variables and $O(n)$ new clauses.
|
||||
|
||||
\item[Bitwise encoding] \marginnote{\texttt{AtMostOne} bitwise encoding}
|
||||
Introduces $m = \log_2n$ new variables $r_i$ such that
|
||||
if the variable $x_i$ is set to true, then $r_1, \dots, r_m$ contain the binary encoding of the index $i-1$.
|
||||
|
||||
Let $b_{i,1}, \dots, b_{i,m}$ be the $m$ bits of the binary representation of $i$, the encoding is the following:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostOne}([x_1, \dots, x_n]) &\iff \\
|
||||
& \bigwedge_{1 \leq i \leq n} \big( x_i \Rightarrow (r_1 = b_{i-1,1} \land \dots \land r_m = b_{i-1,m}) \big)
|
||||
\end{split}
|
||||
\]
|
||||
By expanding the implications, it becomes:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostOne}([x_1, \dots, x_n]) &\iff \\
|
||||
& \bigwedge_{1 \leq i \leq n} \bigwedge_{1 \leq j \leq m} \big( \lnot x_i \vee (r_j = b_{i-1, j}) \big)
|
||||
\end{split}
|
||||
\]
|
||||
This encoding requires $O(\log_2n)$ auxiliary variables and $O(n \log_2 n)$ new clauses.
|
||||
|
||||
\item[Heule encoding] \marginnote{\texttt{AtMostOne} Heule encoding}
|
||||
Defines the encoding recursively:
|
||||
\begin{itemize}
|
||||
\item When $n \leq 4$, apply the pairwise encoding (which requires 6 clauses):
|
||||
\[ \texttt{AtMostOne}([x_1, \dots, x_4]) \iff \bigwedge_{1 \leq i < j \leq n} \lnot (x_i \land x_j) \]
|
||||
\item When $n > 4$, introduce a new variable $y$:
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostOne}&([x_1, \dots, x_n]) \iff \\
|
||||
&\texttt{AtMostOne}([x_1, x_2, x_3, y]) \land \texttt{AtMostOne}([\lnot y, x_4, \dots, x_n])
|
||||
\end{split}
|
||||
\]
|
||||
\end{itemize}
|
||||
This encoding requires $O(n)$ auxiliary variables and $O(n)$ new clauses.
|
||||
\end{description}
|
||||
\end{description}
|
||||
|
||||
\item[$\mathbf{k \in \mathbb{N}}$ constraints] \marginnote{$k \in \mathbb{N}$ constraints}
|
||||
Constraints of the form:
|
||||
\[ \sum_{1 \leq i \leq n} x_i \bowtie k \text{ where } k \in \mathbb{N} \]
|
||||
|
||||
\begin{theorem}
|
||||
All the cardinality constraints can be expressed using \texttt{AtMostK} (i.e. $\leq$ relationship).
|
||||
\begin{proof}
|
||||
\[
|
||||
\begin{split}
|
||||
\sum_{1 \leq i \leq n} x_i = k &\iff \sum_{1 \leq i \leq n} (x_i \geq k ) \land \sum_{1 \leq i \leq n} (x_i \leq k) \\
|
||||
\sum_{1 \leq i \leq n} x_i \neq k &\iff \sum_{1 \leq i \leq n} (x_i < k) \vee \sum_{1 \leq i \leq n} (x_i > k) \\
|
||||
\sum_{1 \leq i \leq n} x_i \geq k &\iff \sum_{1 \leq i \leq n} (\lnot x_i \leq n-k) \\
|
||||
\sum_{1 \leq i \leq n} x_i > k &\iff \sum_{1 \leq i \leq n} (\lnot x_i \leq n-k-1) \\
|
||||
\sum_{1 \leq i \leq n} x_i < k &\iff \sum_{1 \leq i \leq n} (x_i \leq k-1)
|
||||
\end{split}
|
||||
\]
|
||||
\end{proof}
|
||||
\end{theorem}
|
||||
|
||||
\begin{description}
|
||||
\item[\texttt{AtMostK}] \marginnote{\texttt{AtMostK}}
|
||||
There are different encoding approaches:
|
||||
\begin{description}
|
||||
\item[Generalized pairwise encoding] \marginnote{\texttt{AtMostK} generalized pairwise encoding}
|
||||
Constrains the fact that any pair of $(k+1)$ variables cannot be all true:
|
||||
\[
|
||||
\texttt{AtMostK}([x_1, \dots, x_n], k) \iff \bigwedge_{\substack{ M \subseteq \{ 1, \dots, n \}\\\vert M \vert = k+1 }} \bigvee_{i \in M} \lnot x_i
|
||||
\]
|
||||
This encoding does not require auxiliary variables and introduces $O(n^{k+1})$ new clauses.
|
||||
|
||||
\item[Sequential encoding] \marginnote{\texttt{AtMostK} sequential encoding}
|
||||
Introduces $n \cdot k$ new variables $s_{i,j}$ such that:
|
||||
\begin{itemize}
|
||||
\item If $s_{i,j} = 1$ and $s_{i-1,j} = 0$, then $x_i$ is the $j$-th variable assigned to true.
|
||||
\item If $s_{i,j} = 1$ and $s_{i-1,j} = 1$, then $x_i = 0$ and there are $j$ variables assigned to true among $x_1, \dots, x_{i-1}$.
|
||||
\end{itemize}
|
||||
\[
|
||||
\begin{split}
|
||||
\texttt{AtMostK}&([x_1, \dots, x_n], k) \iff \\
|
||||
& (x_1 \Rightarrow s_{1,1}) \land \bigwedge_{2 \leq j \leq k} \lnot s_{1,j} \\
|
||||
& \land \bigwedge_{1 < i < n} \left[
|
||||
\begin{split}
|
||||
& \big( (x_i \vee s_{i-1,1}) \Rightarrow s_{i,1} \big) \\
|
||||
& \land \bigwedge_{2 \leq j \leq k} \Big( \big( (x_i \land s_{i-1, j-1}) \vee s_{i-1,j} \big) \Rightarrow s_{i,j} \Big) \\
|
||||
& \land (s_{i-1,k} \Rightarrow \lnot x_i)
|
||||
\end{split}
|
||||
\right] \\
|
||||
& \land (s_{n-1, k} \Rightarrow \lnot x_n)
|
||||
\end{split}
|
||||
\]
|
||||
This encoding requires $O(nk)$ auxiliary variables and $O(nk)$ new clauses.
|
||||
|
||||
\end{description}
|
||||
\end{description}
|
||||
|
||||
\item[Arc-consistency] \marginnote{Arc-consistency}
|
||||
Given a SAT encoding $E$ of a normal constraint $C$,
|
||||
$E$ is arc-consistent if:
|
||||
\begin{itemize}
|
||||
\item Whenever a partial assignment is inconsistent in $C$, unit resolution in $E$ causes a contradiction.
|
||||
\item Otherwise, unit resolution in $E$ discards arc-inconsistent values.
|
||||
\end{itemize}
|
||||
\end{description}
|
||||
Reference in New Issue
Block a user