Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2ed977e

Browse files
committed
added vac search
1 parent 2fc2a65 commit 2ed977e

File tree

5 files changed

+7866
-9
lines changed

5 files changed

+7866
-9
lines changed

iterative_lengthening_search.html

Lines changed: 130 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7514,11 +7514,15 @@
75147514
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
75157515
</div>
75167516
<div class="jp-InputArea jp-Cell-inputArea">
7517-
<div class="jp-InputPrompt jp-InputArea-prompt">In [127]:</div>
7517+
<div class="jp-InputPrompt jp-InputArea-prompt">In [36]:</div>
75187518
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
75197519
<div class="cm-editor cm-s-jupyter">
75207520
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">search_2</span> <span class="kn">import</span> <span class="o">*</span>
75217521

7522+
<span class="c1"># My implementation of iterative lengthening search from problem 3.17.</span>
7523+
<span class="c1"># I don't really see the point in this algorithm - just use uniform-cost search?</span>
7524+
<span class="c1"># Maybe it is for people who want partial solutions???</span>
7525+
75227526
<span class="k">def</span> <span class="nf">best_first_limited_cost_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">cost_limit</span><span class="p">):</span>
75237527
<span class="n">node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span><span class="n">problem</span><span class="o">.</span><span class="n">initial</span><span class="p">)</span>
75247528
<span class="n">frontier</span> <span class="o">=</span> <span class="n">PriorityQueue</span><span class="p">([</span><span class="n">node</span><span class="p">],</span> <span class="n">key</span><span class="o">=</span><span class="n">f</span><span class="p">)</span>
@@ -7537,7 +7541,8 @@
75377541
<span class="k">if</span> <span class="n">lowest_path_cost</span> <span class="o">==</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">child</span><span class="o">.</span><span class="n">path_cost</span> <span class="o">&lt;</span> <span class="n">lowest_path_cost</span><span class="p">:</span>
75387542
<span class="n">lowest_path_cost</span> <span class="o">=</span> <span class="n">child</span><span class="o">.</span><span class="n">path_cost</span>
75397543
<span class="n">result</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span><span class="s1">'cost_limit_reached'</span><span class="p">,</span>
7540-
<span class="n">path_cost</span> <span class="o">=</span> <span class="n">lowest_path_cost</span><span class="p">)</span>
7544+
<span class="n">path_cost</span> <span class="o">=</span> <span class="n">lowest_path_cost</span><span class="p">,</span>
7545+
<span class="n">parent</span> <span class="o">=</span> <span class="n">node</span><span class="p">)</span>
75417546
<span class="k">elif</span> <span class="n">s</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">reached</span> <span class="ow">or</span> <span class="n">child</span><span class="o">.</span><span class="n">path_cost</span> <span class="o">&lt;</span> <span class="n">reached</span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="o">.</span><span class="n">path_cost</span><span class="p">:</span>
75427547
<span class="n">reached</span><span class="p">[</span><span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">child</span>
75437548
<span class="n">frontier</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
@@ -7549,6 +7554,7 @@
75497554
<span class="k">while</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s1">'cost_limit_reached'</span><span class="p">):</span>
75507555
<span class="n">n</span> <span class="o">=</span> <span class="n">best_first_limited_cost_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">g</span><span class="p">,</span> <span class="n">n</span><span class="o">.</span><span class="n">path_cost</span><span class="p">)</span>
75517556
<span class="n">iteration</span> <span class="o">=</span> <span class="n">iteration</span> <span class="o">+</span> <span class="mi">1</span>
7557+
<span class="nb">print</span><span class="p">(</span><span class="n">path_states</span><span class="p">(</span><span class="n">n</span><span class="p">))</span>
75527558
<span class="nb">print</span><span class="p">(</span><span class="n">iteration</span><span class="p">)</span>
75537559
<span class="k">return</span> <span class="n">n</span>
75547560
</pre></div>
@@ -7561,7 +7567,7 @@
75617567
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
75627568
</div>
75637569
<div class="jp-InputArea jp-Cell-inputArea">
7564-
<div class="jp-InputPrompt jp-InputArea-prompt">In [134]:</div>
7570+
<div class="jp-InputPrompt jp-InputArea-prompt">In [37]:</div>
75657571
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
75667572
<div class="cm-editor cm-s-jupyter">
75677573
<div class="highlight hl-ipython3"><pre><span></span><span class="n">romania</span> <span class="o">=</span> <span class="n">Map</span><span class="p">(</span>
@@ -7575,8 +7581,6 @@
75757581
<span class="s1">'M'</span><span class="p">:</span> <span class="p">(</span><span class="mi">160</span><span class="p">,</span> <span class="mi">343</span><span class="p">),</span> <span class="s1">'N'</span><span class="p">:</span> <span class="p">(</span><span class="mi">407</span><span class="p">,</span> <span class="mi">561</span><span class="p">),</span> <span class="s1">'O'</span><span class="p">:</span> <span class="p">(</span><span class="mi">117</span><span class="p">,</span> <span class="mi">580</span><span class="p">),</span> <span class="s1">'P'</span><span class="p">:</span> <span class="p">(</span><span class="mi">311</span><span class="p">,</span> <span class="mi">372</span><span class="p">),</span> <span class="s1">'R'</span><span class="p">:</span> <span class="p">(</span><span class="mi">227</span><span class="p">,</span> <span class="mi">412</span><span class="p">),</span>
75767582
<span class="s1">'S'</span><span class="p">:</span> <span class="p">(</span><span class="mi">187</span><span class="p">,</span> <span class="mi">463</span><span class="p">),</span> <span class="s1">'T'</span><span class="p">:</span> <span class="p">(</span> <span class="mi">83</span><span class="p">,</span> <span class="mi">414</span><span class="p">),</span> <span class="s1">'U'</span><span class="p">:</span> <span class="p">(</span><span class="mi">471</span><span class="p">,</span> <span class="mi">363</span><span class="p">),</span> <span class="s1">'V'</span><span class="p">:</span> <span class="p">(</span><span class="mi">535</span><span class="p">,</span> <span class="mi">473</span><span class="p">),</span> <span class="s1">'Z'</span><span class="p">:</span> <span class="p">(</span><span class="mi">92</span><span class="p">,</span> <span class="mi">539</span><span class="p">)})</span>
75777583

7578-
7579-
<span class="n">r0</span> <span class="o">=</span> <span class="n">RouteProblem</span><span class="p">(</span><span class="s1">'A'</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">,</span> <span class="nb">map</span><span class="o">=</span><span class="n">romania</span><span class="p">)</span>
75807584
<span class="n">r1</span> <span class="o">=</span> <span class="n">RouteProblem</span><span class="p">(</span><span class="s1">'A'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">,</span> <span class="nb">map</span><span class="o">=</span><span class="n">romania</span><span class="p">)</span>
75817585
<span class="n">r2</span> <span class="o">=</span> <span class="n">RouteProblem</span><span class="p">(</span><span class="s1">'N'</span><span class="p">,</span> <span class="s1">'L'</span><span class="p">,</span> <span class="nb">map</span><span class="o">=</span><span class="n">romania</span><span class="p">)</span>
75827586
<span class="n">r3</span> <span class="o">=</span> <span class="n">RouteProblem</span><span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'T'</span><span class="p">,</span> <span class="nb">map</span><span class="o">=</span><span class="n">romania</span><span class="p">)</span>
@@ -7591,12 +7595,13 @@
75917595
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
75927596
</div>
75937597
<div class="jp-InputArea jp-Cell-inputArea">
7594-
<div class="jp-InputPrompt jp-InputArea-prompt">In [135]:</div>
7598+
<div class="jp-InputPrompt jp-InputArea-prompt">In [38]:</div>
75957599
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
75967600
<div class="cm-editor cm-s-jupyter">
75977601
<div class="highlight hl-ipython3"><pre><span></span><span class="n">path_states</span><span class="p">(</span><span class="n">iterative_lengthening_search</span><span class="p">(</span><span class="n">r1</span><span class="p">))</span>
75987602
<span class="n">path_states</span><span class="p">(</span><span class="n">iterative_lengthening_search</span><span class="p">(</span><span class="n">r2</span><span class="p">))</span>
75997603
<span class="n">path_states</span><span class="p">(</span><span class="n">iterative_lengthening_search</span><span class="p">(</span><span class="n">r3</span><span class="p">))</span>
7604+
<span class="n">path_states</span><span class="p">(</span><span class="n">iterative_lengthening_search</span><span class="p">(</span><span class="n">r4</span><span class="p">))</span>
76007605
</pre></div>
76017606
</div>
76027607
</div>
@@ -7609,16 +7614,132 @@
76097614
<div class="jp-OutputArea-child">
76107615
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
76117616
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
7612-
<pre>23
7617+
<pre>['A', 'cost_limit_reached']
7618+
['A', 'cost_limit_reached']
7619+
['A', 'Z', 'cost_limit_reached']
7620+
['A', 'Z', 'cost_limit_reached']
7621+
['A', 'Z', 'O', 'cost_limit_reached']
7622+
['A', 'S', 'cost_limit_reached']
7623+
['A', 'T', 'cost_limit_reached']
7624+
['A', 'T', 'cost_limit_reached']
7625+
['A', 'S', 'cost_limit_reached']
7626+
['A', 'S', 'cost_limit_reached']
7627+
['A', 'S', 'cost_limit_reached']
7628+
['A', 'Z', 'O', 'cost_limit_reached']
7629+
['A', 'T', 'L', 'cost_limit_reached']
7630+
['A', 'S', 'R', 'cost_limit_reached']
7631+
['A', 'S', 'R', 'cost_limit_reached']
7632+
['A', 'S', 'F', 'cost_limit_reached']
7633+
['A', 'T', 'L', 'cost_limit_reached']
7634+
['A', 'S', 'R', 'cost_limit_reached']
7635+
['A', 'T', 'L', 'M', 'cost_limit_reached']
7636+
['A', 'T', 'L', 'M', 'cost_limit_reached']
7637+
['A', 'S', 'R', 'P', 'cost_limit_reached']
7638+
['A', 'S', 'R', 'P', 'cost_limit_reached']
7639+
['A', 'S', 'R', 'P', 'B']
7640+
23
7641+
['N', 'I', 'cost_limit_reached']
7642+
['N', 'I', 'cost_limit_reached']
7643+
['N', 'I', 'V', 'cost_limit_reached']
7644+
['N', 'I', 'V', 'cost_limit_reached']
7645+
['N', 'I', 'V', 'U', 'cost_limit_reached']
7646+
['N', 'I', 'V', 'U', 'cost_limit_reached']
7647+
['N', 'I', 'V', 'U', 'cost_limit_reached']
7648+
['N', 'I', 'V', 'U', 'B', 'cost_limit_reached']
7649+
['N', 'I', 'V', 'U', 'B', 'cost_limit_reached']
7650+
['N', 'I', 'V', 'U', 'H', 'cost_limit_reached']
7651+
['N', 'I', 'V', 'U', 'B', 'cost_limit_reached']
7652+
['N', 'I', 'V', 'U', 'H', 'cost_limit_reached']
7653+
['N', 'I', 'V', 'U', 'B', 'G', 'cost_limit_reached']
7654+
['N', 'I', 'V', 'U', 'H', 'E', 'cost_limit_reached']
7655+
['N', 'I', 'V', 'U', 'B', 'P', 'cost_limit_reached']
7656+
['N', 'I', 'V', 'U', 'B', 'P', 'cost_limit_reached']
7657+
['N', 'I', 'V', 'U', 'B', 'cost_limit_reached']
7658+
['N', 'I', 'V', 'U', 'B', 'P', 'cost_limit_reached']
7659+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7660+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7661+
['N', 'I', 'V', 'U', 'B', 'F', 'cost_limit_reached']
7662+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7663+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7664+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7665+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7666+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7667+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7668+
['N', 'I', 'V', 'U', 'B', 'F', 'cost_limit_reached']
7669+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7670+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'D', 'cost_limit_reached']
7671+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'D', 'cost_limit_reached']
7672+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'S', 'A', 'cost_limit_reached']
7673+
['N', 'I', 'V', 'U', 'B', 'P', 'R', 'S', 'O', 'cost_limit_reached']
7674+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'D', 'M', 'cost_limit_reached']
7675+
['N', 'I', 'V', 'U', 'B', 'P', 'C', 'D', 'M', 'L']
76137676
35
7677+
['E', 'H', 'cost_limit_reached']
7678+
['E', 'H', 'cost_limit_reached']
7679+
['E', 'H', 'U', 'cost_limit_reached']
7680+
['E', 'H', 'U', 'cost_limit_reached']
7681+
['E', 'H', 'U', 'cost_limit_reached']
7682+
['E', 'H', 'U', 'B', 'cost_limit_reached']
7683+
['E', 'H', 'U', 'B', 'cost_limit_reached']
7684+
['E', 'H', 'U', 'B', 'cost_limit_reached']
7685+
['E', 'H', 'U', 'V', 'cost_limit_reached']
7686+
['E', 'H', 'U', 'B', 'G', 'cost_limit_reached']
7687+
['E', 'H', 'U', 'B', 'P', 'cost_limit_reached']
7688+
['E', 'H', 'U', 'V', 'cost_limit_reached']
7689+
['E', 'H', 'U', 'B', 'P', 'cost_limit_reached']
7690+
['E', 'H', 'U', 'B', 'cost_limit_reached']
7691+
['E', 'H', 'U', 'V', 'I', 'cost_limit_reached']
7692+
['E', 'H', 'U', 'B', 'P', 'cost_limit_reached']
7693+
['E', 'H', 'U', 'V', 'I', 'cost_limit_reached']
7694+
['E', 'H', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7695+
['E', 'H', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7696+
['E', 'H', 'U', 'B', 'F', 'cost_limit_reached']
7697+
['E', 'H', 'U', 'V', 'I', 'N', 'cost_limit_reached']
7698+
['E', 'H', 'U', 'B', 'P', 'R', 'cost_limit_reached']
7699+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7700+
['E', 'H', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7701+
['E', 'H', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7702+
['E', 'H', 'U', 'B', 'P', 'C', 'cost_limit_reached']
7703+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7704+
['E', 'H', 'U', 'B', 'F', 'cost_limit_reached']
7705+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'cost_limit_reached']
7706+
['E', 'H', 'U', 'B', 'P', 'C', 'D', 'cost_limit_reached']
7707+
['E', 'H', 'U', 'B', 'P', 'C', 'D', 'cost_limit_reached']
7708+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'A', 'cost_limit_reached']
7709+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'O', 'cost_limit_reached']
7710+
['E', 'H', 'U', 'B', 'P', 'C', 'D', 'M', 'cost_limit_reached']
7711+
['E', 'H', 'U', 'B', 'P', 'C', 'D', 'M', 'cost_limit_reached']
7712+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'A', 'cost_limit_reached']
7713+
['E', 'H', 'U', 'B', 'P', 'R', 'S', 'A', 'T']
76147714
37
7715+
['O', 'Z', 'cost_limit_reached']
7716+
['O', 'Z', 'cost_limit_reached']
7717+
['O', 'cost_limit_reached']
7718+
['O', 'Z', 'A', 'cost_limit_reached']
7719+
['O', 'S', 'cost_limit_reached']
7720+
['O', 'S', 'cost_limit_reached']
7721+
['O', 'Z', 'A', 'cost_limit_reached']
7722+
['O', 'Z', 'A', 'cost_limit_reached']
7723+
['O', 'S', 'cost_limit_reached']
7724+
['O', 'S', 'cost_limit_reached']
7725+
['O', 'S', 'R', 'cost_limit_reached']
7726+
['O', 'S', 'R', 'cost_limit_reached']
7727+
['O', 'S', 'F', 'cost_limit_reached']
7728+
['O', 'Z', 'A', 'T', 'cost_limit_reached']
7729+
['O', 'S', 'R', 'cost_limit_reached']
7730+
['O', 'Z', 'A', 'T', 'cost_limit_reached']
7731+
['O', 'S', 'R', 'P', 'cost_limit_reached']
7732+
['O', 'S', 'R', 'P', 'cost_limit_reached']
7733+
['O', 'Z', 'A', 'T', 'L', 'cost_limit_reached']
7734+
['O', 'Z', 'A', 'T', 'L', 'M']
7735+
20
76157736
</pre>
76167737
</div>
76177738
</div>
76187739
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
7619-
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[135]:</div>
7740+
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[38]:</div>
76207741
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
7621-
<pre>['E', 'H', 'U', 'B', 'P', 'R', 'S', 'A', 'T']</pre>
7742+
<pre>['O', 'Z', 'A', 'T', 'L', 'M']</pre>
76227743
</div>
76237744
</div>
76247745
</div>

vacuum_search_agent.ipynb

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"id": "8538faa5-d001-4cd1-aca7-713308a31db2",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"from search_2 import *\n",
11+
"\n",
12+
"class VacuumSearch(Problem):\n",
13+
" def __init__(self, initial=(0,0), goal=None, dirt=[], **kwds):\n",
14+
" Problem.__init__(self, initial=initial, goal=goal, dirt=dirt, **kwds)\n",
15+
" self.dirt = dirt\n",
16+
" \n",
17+
" directions = [(-1, 0), (+1, 0), (0, +1), (0, -1)]\n",
18+
"\n",
19+
" def action_cost(self, s, action, s1):\n",
20+
" if s == s1:\n",
21+
" # we have sucked up some dirt\n",
22+
" return -100\n",
23+
" return 1\n",
24+
" \n",
25+
" def is_goal(self, state):\n",
26+
" return self.dirt == []\n",
27+
"\n",
28+
" def result(self, state, action):\n",
29+
" return action if action not in self.dirt else state\n",
30+
" \n",
31+
" def actions(self, state):\n",
32+
" if state in self.dirt:\n",
33+
" self.dirt.remove(state)\n",
34+
" return set(state)\n",
35+
" x, y = state\n",
36+
" S = {(x + dx, y + dy) for (dx, dy) in self.directions}\n",
37+
" Z = {x for x in S if x[0] in range(3) and x[1] in range(3)}\n",
38+
" return Z\n",
39+
"\n",
40+
"v = VacuumSearch(dirt=[(0,2), (1,2), (2,2)])\n",
41+
"print(path_states(uniform_cost_search(v)))"
42+
]
43+
},
44+
{
45+
"cell_type": "code",
46+
"execution_count": null,
47+
"id": "dab5c21d-7f22-4cb2-938d-6a32d3aa4b93",
48+
"metadata": {},
49+
"outputs": [],
50+
"source": []
51+
},
52+
{
53+
"cell_type": "code",
54+
"execution_count": null,
55+
"id": "5d4efa04-60c9-4f4d-a100-9bd48aeaa5af",
56+
"metadata": {},
57+
"outputs": [],
58+
"source": []
59+
}
60+
],
61+
"metadata": {
62+
"kernelspec": {
63+
"display_name": "Python 3 (ipykernel)",
64+
"language": "python",
65+
"name": "python3"
66+
},
67+
"language_info": {
68+
"codemirror_mode": {
69+
"name": "ipython",
70+
"version": 3
71+
},
72+
"file_extension": ".py",
73+
"mimetype": "text/x-python",
74+
"name": "python",
75+
"nbconvert_exporter": "python",
76+
"pygments_lexer": "ipython3",
77+
"version": "3.11.2"
78+
}
79+
},
80+
"nbformat": 4,
81+
"nbformat_minor": 5
82+
}

0 commit comments

Comments
 (0)