|
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 [127]:</div> |
| 7517 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [36]:</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>
|
7521 | 7521 |
|
| 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 | + |
7522 | 7526 | <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>
|
7523 | 7527 | <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>
|
7524 | 7528 | <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 | 7541 | <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"><</span> <span class="n">lowest_path_cost</span><span class="p">:</span>
|
7538 | 7542 | <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>
|
7539 | 7543 | <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> |
7541 | 7546 | <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"><</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>
|
7542 | 7547 | <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>
|
7543 | 7548 | <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 | 7554 | <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>
|
7550 | 7555 | <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>
|
7551 | 7556 | <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> |
7552 | 7558 | <span class="nb">print</span><span class="p">(</span><span class="n">iteration</span><span class="p">)</span>
|
7553 | 7559 | <span class="k">return</span> <span class="n">n</span>
|
7554 | 7560 | </pre></div>
|
|
7561 | 7567 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7562 | 7568 | </div>
|
7563 | 7569 | <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> |
7565 | 7571 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7566 | 7572 | <div class="cm-editor cm-s-jupyter">
|
7567 | 7573 | <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 | 7581 | <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>
|
7576 | 7582 | <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>
|
7577 | 7583 |
|
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> |
7580 | 7584 | <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>
|
7581 | 7585 | <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>
|
7582 | 7586 | <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 | 7595 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7592 | 7596 | </div>
|
7593 | 7597 | <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> |
7595 | 7599 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7596 | 7600 | <div class="cm-editor cm-s-jupyter">
|
7597 | 7601 | <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>
|
7598 | 7602 | <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>
|
7599 | 7603 | <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> |
7600 | 7605 | </pre></div>
|
7601 | 7606 | </div>
|
7602 | 7607 | </div>
|
|
7609 | 7614 | <div class="jp-OutputArea-child">
|
7610 | 7615 | <div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
7611 | 7616 | <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'] |
7613 | 7676 | 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'] |
7614 | 7714 | 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 |
7615 | 7736 | </pre>
|
7616 | 7737 | </div>
|
7617 | 7738 | </div>
|
7618 | 7739 | <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> |
7620 | 7741 | <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> |
7622 | 7743 | </div>
|
7623 | 7744 | </div>
|
7624 | 7745 | </div>
|
|
0 commit comments