|
7514 | 7514 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7515 | 7515 | </div>
|
7516 | 7516 | <div class="jp-InputArea jp-Cell-inputArea">
|
7517 |
| -<div class="jp-InputPrompt jp-InputArea-prompt">In [233]:</div> |
| 7517 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> |
7518 | 7518 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7519 | 7519 | <div class="cm-editor cm-s-jupyter">
|
7520 | 7520 | <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>
|
|
7550 | 7550 | <span class="k">def</span> <span class="nf">astar_misplaced_tiles</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">astar_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h1</span><span class="p">)</span>
|
7551 | 7551 | <span class="k">def</span> <span class="nf">recursive_best_first_misplaced_tiles</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">recursive_best_first_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h1</span><span class="p">)</span>
|
7552 | 7552 | <span class="k">def</span> <span class="nf">astar_manhatten</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">astar_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h2</span><span class="p">)</span>
|
| 7553 | +<span class="k">def</span> <span class="nf">astar_manhatten_with_weight</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">astar_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h3</span><span class="p">)</span> |
7553 | 7554 | <span class="k">def</span> <span class="nf">recursive_best_first_manhatten</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">recursive_best_first_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h2</span><span class="p">)</span>
|
| 7555 | +<span class="k">def</span> <span class="nf">recursive_best_first_manhatten_with_weight</span><span class="p">(</span><span class="n">problem</span><span class="p">):</span> <span class="k">return</span> <span class="n">recursive_best_first_search</span><span class="p">(</span><span class="n">problem</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="n">problem</span><span class="o">.</span><span class="n">h3</span><span class="p">)</span> |
7554 | 7556 |
|
7555 | 7557 |
|
7556 | 7558 | <span class="n">e1</span> <span class="o">=</span> <span class="n">EightPuzzle</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
|
|
7559 | 7561 | <span class="n">e4</span> <span class="o">=</span> <span class="n">EightPuzzle</span><span class="p">((</span><span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
7560 | 7562 | <span class="n">e5</span> <span class="o">=</span> <span class="n">EightPuzzle</span><span class="p">((</span><span class="mi">8</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
7561 | 7563 |
|
7562 |
| - |
7563 | 7564 | <span class="n">report</span><span class="p">([</span><span class="n">breadth_first_search</span><span class="p">,</span>
|
7564 | 7565 | <span class="n">uniform_cost_search</span><span class="p">,</span>
|
7565 | 7566 | <span class="n">recursive_best_first_manhatten</span><span class="p">,</span>
|
7566 |
| - <span class="n">astar_manhatten</span><span class="p">],</span> <span class="p">[</span><span class="n">e1</span><span class="p">,</span> <span class="n">e2</span><span class="p">,</span> <span class="n">e3</span><span class="p">,</span> <span class="n">e4</span><span class="p">,</span> <span class="n">e5</span><span class="p">])</span> |
7567 |
| - |
| 7567 | + <span class="n">recursive_best_first_manhatten_with_weight</span><span class="p">,</span> |
| 7568 | + <span class="n">astar_manhatten</span><span class="p">,</span> |
| 7569 | + <span class="n">astar_manhatten_with_weight</span><span class="p">],</span> <span class="p">[</span><span class="n">e1</span><span class="p">,</span> <span class="n">e2</span><span class="p">,</span> <span class="n">e3</span><span class="p">,</span> <span class="n">e4</span><span class="p">,</span> <span class="n">e5</span><span class="p">])</span> |
7568 | 7570 | </pre></div>
|
7569 | 7571 | </div>
|
7570 | 7572 | </div>
|
|
7601 | 7603 | 326,744 nodes | 126,504 goal | 27 cost | 126,530 actions | EightPuzzle((8, 6, 7, 2, 5, 4, 3, 0, 1),
|
7602 | 7604 | 4,151,698 nodes |1,554,027 goal | 103 cost |1,554,125 actions | TOTAL
|
7603 | 7605 |
|
| 7606 | +recursive_best_first_manhatten_with_weight: |
| 7607 | + 15 nodes | 6 goal | 5 cost | 10 actions | EightPuzzle((1, 4, 2, 0, 7, 5, 3, 6, 8), |
| 7608 | +2,409,806 nodes | 901,511 goal | 24 cost | 901,534 actions | EightPuzzle((1, 2, 3, 4, 5, 6, 7, 8, 0), |
| 7609 | +20,658,284 nodes |7,566,616 goal | 25 cost |7,566,640 actions | EightPuzzle((4, 0, 2, 5, 1, 3, 7, 8, 6), |
| 7610 | + 588,906 nodes | 211,503 goal | 30 cost | 211,532 actions | EightPuzzle((7, 2, 4, 5, 0, 6, 8, 3, 1), |
| 7611 | + 597,734 nodes | 233,773 goal | 33 cost | 233,805 actions | EightPuzzle((8, 6, 7, 2, 5, 4, 3, 0, 1), |
| 7612 | +24,254,745 nodes |8,913,409 goal | 117 cost |8,913,521 actions | TOTAL |
| 7613 | + |
7604 | 7614 | astar_manhatten:
|
7605 | 7615 | 15 nodes | 6 goal | 5 cost | 10 actions | EightPuzzle((1, 4, 2, 0, 7, 5, 3, 6, 8),
|
7606 | 7616 | 3,614 nodes | 1,349 goal | 22 cost | 1,370 actions | EightPuzzle((1, 2, 3, 4, 5, 6, 7, 8, 0),
|
|
7609 | 7619 | 11,669 nodes | 4,417 goal | 27 cost | 4,443 actions | EightPuzzle((8, 6, 7, 2, 5, 4, 3, 0, 1),
|
7610 | 7620 | 31,503 nodes | 11,868 goal | 103 cost | 11,966 actions | TOTAL
|
7611 | 7621 |
|
| 7622 | +astar_manhatten_with_weight: |
| 7623 | + 15 nodes | 6 goal | 5 cost | 10 actions | EightPuzzle((1, 4, 2, 0, 7, 5, 3, 6, 8), |
| 7624 | + 1,720 nodes | 633 goal | 24 cost | 656 actions | EightPuzzle((1, 2, 3, 4, 5, 6, 7, 8, 0), |
| 7625 | + 1,908 nodes | 709 goal | 25 cost | 733 actions | EightPuzzle((4, 0, 2, 5, 1, 3, 7, 8, 6), |
| 7626 | + 1,312 nodes | 489 goal | 30 cost | 518 actions | EightPuzzle((7, 2, 4, 5, 0, 6, 8, 3, 1), |
| 7627 | + 2,519 nodes | 935 goal | 29 cost | 963 actions | EightPuzzle((8, 6, 7, 2, 5, 4, 3, 0, 1), |
| 7628 | + 7,474 nodes | 2,772 goal | 113 cost | 2,880 actions | TOTAL |
| 7629 | + |
7612 | 7630 | </pre>
|
7613 | 7631 | </div>
|
7614 | 7632 | </div>
|
|
7621 | 7639 | </div>
|
7622 | 7640 | <div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
7623 | 7641 | </div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
7624 |
| -<p>We can see that A* expands significantly less nodes than RBFS. This is because A* maintains a queue which prevents it from needlessly re-expanding nodes. However, we should look at the time taken for each algorithm.</p> |
| 7642 | +<p>We can see that A* expands significantly less nodes than RBFS. This is because A* maintains a queue which prevents it from needlessly re-expanding nodes. AIMA asks us to consider what will happen if we add a random constant to the heuristic in RBFS. To get a larger view of what happens to both A* and RBFS when we weight the heuristic I will apply a weighting to both. From the above results we can see that the situation with RBFS is not clear cut. Sometimes we exapnd significantly more nodes and sometimes we expand significantly less. With A* we get the usual success story.</p> |
| 7643 | +<p>However, we should look at the time taken for each of the algorithms.</p> |
7625 | 7644 | </div>
|
7626 | 7645 | </div>
|
7627 | 7646 | </div>
|
|
7630 | 7649 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7631 | 7650 | </div>
|
7632 | 7651 | <div class="jp-InputArea jp-Cell-inputArea">
|
7633 |
| -<div class="jp-InputPrompt jp-InputArea-prompt">In [234]:</div> |
| 7652 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div> |
7634 | 7653 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7635 | 7654 | <div class="cm-editor cm-s-jupyter">
|
7636 | 7655 | <div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">time</span>
|
|
7641 | 7660 | <span class="nb">print</span><span class="p">(</span><span class="s2">"Time taken to execute RBFS: "</span><span class="p">,</span> <span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span>
|
7642 | 7661 | <span class="nb">print</span><span class="p">(</span><span class="s2">"Execution time per node: "</span><span class="p">,</span> <span class="p">(</span><span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">746</span><span class="p">,</span><span class="mi">166</span><span class="p">)</span>
|
7643 | 7662 |
|
| 7663 | +<span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> |
| 7664 | +<span class="n">recursive_best_first_manhatten_with_weight</span><span class="p">(</span><span class="n">e4</span><span class="p">)</span> |
| 7665 | +<span class="n">t1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> |
| 7666 | +<span class="nb">print</span><span class="p">(</span><span class="s2">"Time taken to execute weighted-RBFS: "</span><span class="p">,</span> <span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> |
| 7667 | +<span class="nb">print</span><span class="p">(</span><span class="s2">"Execution time per node: "</span><span class="p">,</span> <span class="p">(</span><span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">588</span><span class="p">,</span><span class="mi">906</span><span class="p">)</span> |
| 7668 | + |
7644 | 7669 | <span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
7645 | 7670 | <span class="n">astar_manhatten</span><span class="p">(</span><span class="n">e4</span><span class="p">)</span>
|
7646 | 7671 | <span class="n">t1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
7647 | 7672 | <span class="nb">print</span><span class="p">(</span><span class="s2">"Time taken to execute A*: "</span><span class="p">,</span> <span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span>
|
7648 | 7673 | <span class="nb">print</span><span class="p">(</span><span class="s2">"Execution time per node: "</span><span class="p">,</span> <span class="p">(</span><span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">10</span><span class="p">,</span><span class="mi">832</span><span class="p">)</span>
|
| 7674 | + |
| 7675 | +<span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> |
| 7676 | +<span class="n">astar_manhatten_with_weight</span><span class="p">(</span><span class="n">e4</span><span class="p">)</span> |
| 7677 | +<span class="n">t1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> |
| 7678 | +<span class="nb">print</span><span class="p">(</span><span class="s2">"Time taken to execute weighted-A*: "</span><span class="p">,</span> <span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> |
| 7679 | +<span class="nb">print</span><span class="p">(</span><span class="s2">"Execution time per node: "</span><span class="p">,</span> <span class="p">(</span><span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1</span><span class="p">,</span><span class="mi">312</span><span class="p">)</span> |
7649 | 7680 | </pre></div>
|
7650 | 7681 | </div>
|
7651 | 7682 | </div>
|
|
7658 | 7689 | <div class="jp-OutputArea-child">
|
7659 | 7690 | <div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
7660 | 7691 | <div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
7661 |
| -<pre>Time taken to execute RBFS: 7.054435729980469 |
7662 |
| -Execution time per node: 0.009456348163512693 166 |
7663 |
| -Time taken to execute A*: 0.09963512420654297 |
7664 |
| -Execution time per node: 0.009963512420654297 832 |
| 7692 | +<pre>Time taken to execute RBFS: 7.069175720214844 |
| 7693 | +Execution time per node: 0.009476106863558771 166 |
| 7694 | +Time taken to execute weighted-RBFS: 5.464362859725952 |
| 7695 | +Execution time per node: 0.009293134115180192 906 |
| 7696 | +Time taken to execute A*: 0.08570456504821777 |
| 7697 | +Execution time per node: 0.008570456504821777 832 |
| 7698 | +Time taken to execute weighted-A*: 0.008708953857421875 |
| 7699 | +Execution time per node: 0.008708953857421875 312 |
7665 | 7700 | </pre>
|
7666 | 7701 | </div>
|
7667 | 7702 | </div>
|
|
0 commit comments