mirror of
https://github.com/fverdugo/XM_40017.git
synced 2026-11-15 06:07:17 +01:00
build based on b3f45fc
This commit is contained in:
1 parent
5d8121e88a
commit
edccb6452f
20 files changed
+579
-162
No files matched your search
@@ -14,4 +14,4 @@ julia> DataFrame(a=[1,2],b=[3,4])</code></pre><p>You should get an error or a
|
||||
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
|
||||
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
|
||||
MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"</code></pre><p>Copy the contents of previous code block into a file called <code>Project.toml</code> and place it in an empty folder named <code>newproject</code>. It is important that the file is named <code>Project.toml</code>. You can create a new folder from the REPL with</p><pre><code class="language-julia hljs">julia> mkdir("newproject")</code></pre><p>To install all the packages registered in this file you need to activate the folder containing your <code>Project.toml</code> file</p><pre><code class="language-julia hljs">(@v1.8) pkg> activate newproject</code></pre><p>and then <em>instantiating</em> it</p><pre><code class="language-julia hljs">(newproject) pkg> instantiate</code></pre><p>The instantiate command will download and install all listed packages and their dependencies in just one click.</p><h3 id="Getting-help-in-package-mode"><a class="docs-heading-anchor" href="#Getting-help-in-package-mode">Getting help in package mode</a><a id="Getting-help-in-package-mode-1"></a><a class="docs-heading-anchor-permalink" href="#Getting-help-in-package-mode" title="Permalink"></a></h3><p>You can get help about a particular package operator by writing <code>help</code> in front of it</p><pre><code class="language-julia hljs">(@v1.8) pkg> help activate</code></pre><p>You can get an overview of all package commands by typing <code>help</code> alone</p><pre><code class="language-julia hljs">(@v1.8) pkg> help</code></pre><h3 id="Package-operations-in-Julia-code"><a class="docs-heading-anchor" href="#Package-operations-in-Julia-code">Package operations in Julia code</a><a id="Package-operations-in-Julia-code-1"></a><a class="docs-heading-anchor-permalink" href="#Package-operations-in-Julia-code" title="Permalink"></a></h3><p>In some situations it is required to use package commands in Julia code, e.g., to automatize installation and deployment of Julia applications. This can be done using the <code>Pkg</code> package. For instance</p><pre><code class="language-julia hljs">julia> using Pkg
|
||||
julia> Pkg.status()</code></pre><p>is equivalent to calling <code>status</code> in package mode.</p><pre><code class="language-julia hljs">(@v1.8) pkg> status</code></pre><h2 id="Conclusion"><a class="docs-heading-anchor" href="#Conclusion">Conclusion</a><a id="Conclusion-1"></a><a class="docs-heading-anchor-permalink" href="#Conclusion" title="Permalink"></a></h2><p>We have learned the basics of how to work with Julia. If you want to further dig into the topics we have covered here, you can take a look at the following links:</p><ul><li><a href="https://docs.julialang.org/en/v1/manual/getting-started/">Julia Manual</a></li><li><a href="https://pkgdocs.julialang.org/v1/getting-started/">Package manager</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../notebooks/julia_basics/">Julia Basics »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
julia> Pkg.status()</code></pre><p>is equivalent to calling <code>status</code> in package mode.</p><pre><code class="language-julia hljs">(@v1.8) pkg> status</code></pre><h2 id="Conclusion"><a class="docs-heading-anchor" href="#Conclusion">Conclusion</a><a id="Conclusion-1"></a><a class="docs-heading-anchor-permalink" href="#Conclusion" title="Permalink"></a></h2><p>We have learned the basics of how to work with Julia. If you want to further dig into the topics we have covered here, you can take a look at the following links:</p><ul><li><a href="https://docs.julialang.org/en/v1/manual/getting-started/">Julia Manual</a></li><li><a href="https://pkgdocs.julialang.org/v1/getting-started/">Package manager</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../notebooks/julia_basics/">Julia Basics »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Home · XM_40017</title><script data-outdated-warner src="assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="assets/documenter.js"></script><script src="siteinfo.js"></script><script src="../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="assets/themeswap.js"></script><link href="assets/favicon.ico" rel="icon" type="image/x-icon"/><script src="assets/iframeResizer.min.js"></script><link href="assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href><img src="assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href>XM_40017</a></span></div><form class="docs-search" action="search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li class="is-active"><a class="tocitem" href>Home</a><ul class="internal"><li><a class="tocitem" href="#What"><span>What</span></a></li><li><a class="tocitem" href="#How-to-use-this-page"><span>How to use this page</span></a></li><li><a class="tocitem" href="#How-to-run-the-notebooks-locally"><span>How to run the notebooks locally</span></a></li><li><a class="tocitem" href="#Authors"><span>Authors</span></a></li><li><a class="tocitem" href="#License"><span>License</span></a></li><li><a class="tocitem" href="#Acknowledgment"><span>Acknowledgment</span></a></li></ul></li><li><a class="tocitem" href="getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="notebooks/mpi_tutorial/">MPI</a></li><li><a class="tocitem" href="notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="notebooks/asp/">ASP</a></li><li><a class="tocitem" href="notebooks/solutions/">Solutions</a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Home</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Home</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/fverdugo/XM_40017/blob/main/docs/src/index.md#" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Programming-Large-Scale-Parallel-Systems-(XM_40017)"><a class="docs-heading-anchor" href="#Programming-Large-Scale-Parallel-Systems-(XM_40017)">Programming Large-Scale Parallel Systems (XM_40017)</a><a id="Programming-Large-Scale-Parallel-Systems-(XM_40017)-1"></a><a class="docs-heading-anchor-permalink" href="#Programming-Large-Scale-Parallel-Systems-(XM_40017)" title="Permalink"></a></h1><p>WeLine truncated
|
||||
julia> Pkg.add("IJulia")
|
||||
julia> using IJulia
|
||||
julia> notebook()</code></pre><ul><li>These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.</li></ul><h2 id="Authors"><a class="docs-heading-anchor" href="#Authors">Authors</a><a id="Authors-1"></a><a class="docs-heading-anchor-permalink" href="#Authors" title="Permalink"></a></h2><p>This material is created by <a href="https://github.com/fverdugo/">Francesc Verdugo</a> with the help of <a href="https://www.linkedin.com/in/gelieza/">Gelieza Kötterheinrich</a>. Part of the notebooks are based on the course slides by <a href="https://www.vuhpdc.net/henri-bal/">Henri Bal</a>.</p><h2 id="License"><a class="docs-heading-anchor" href="#License">License</a><a id="License-1"></a><a class="docs-heading-anchor-permalink" href="#License" title="Permalink"></a></h2><p>All material on this page that is original to this course may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p><h2 id="Acknowledgment"><a class="docs-heading-anchor" href="#Acknowledgment">Acknowledgment</a><a id="Acknowledgment-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgment" title="Permalink"></a></h2><p>This page was created with the support of the Faculty of Science of <a href="https://vu.nl">Vrije Universiteit Amsterdam</a> in the framework of the project "Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course" funded by the "Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning".</p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="getting_started_with_julia/">Getting started »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
julia> notebook()</code></pre><ul><li>These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.</li></ul><h2 id="Authors"><a class="docs-heading-anchor" href="#Authors">Authors</a><a id="Authors-1"></a><a class="docs-heading-anchor-permalink" href="#Authors" title="Permalink"></a></h2><p>This material is created by <a href="https://github.com/fverdugo/">Francesc Verdugo</a> with the help of <a href="https://www.linkedin.com/in/gelieza/">Gelieza Kötterheinrich</a>. Part of the notebooks are based on the course slides by <a href="https://www.vuhpdc.net/henri-bal/">Henri Bal</a>.</p><h2 id="License"><a class="docs-heading-anchor" href="#License">License</a><a id="License-1"></a><a class="docs-heading-anchor-permalink" href="#License" title="Permalink"></a></h2><p>All material on this page that is original to this course may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p><h2 id="Acknowledgment"><a class="docs-heading-anchor" href="#Acknowledgment">Acknowledgment</a><a id="Acknowledgment-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgment" title="Permalink"></a></h2><p>This page was created with the support of the Faculty of Science of <a href="https://vu.nl">Vrije Universiteit Amsterdam</a> in the framework of the project "Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course" funded by the "Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning".</p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="getting_started_with_julia/">Getting started »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -7782,19 +7782,81 @@ a.anchor-link {
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||||
<h2 id="TSP-Exercise:-Measure-search-overhead">TSP Exercise: Measure search overhead<a class="anchor-link" href="#TSP-Exercise:-Measure-search-overhead">¶</a></h2>
|
||||
<h3 id="Exercise:-Measure-search-overhead">Exercise: Measure search overhead<a class="anchor-link" href="#Exercise:-Measure-search-overhead">¶</a></h3><p>Modify the code of the serial and parallel algorithms so that the functions return the number of nodes in the search tree that they visit. You can then compare how many more nodes are visited by the parallel algorithm compared with the serial algorithm (known as <em>search overhead</em>). You can then use the third cell to gather some statistics about the search overhead using your altered version of the functions.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=f00557a0">
|
||||
</div>
|
||||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=22ccce39">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||||
<h2 id="TSP:-Exercise-x-(Measure-search-overhead)">TSP: Exercise x (Measure search overhead)<a class="anchor-link" href="#TSP:-Exercise-x-(Measure-search-overhead)">¶</a></h2><p>This is the solution of how the code can be altered to measure the search overhead:</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=a4d5ab70">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea">
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div>
|
||||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||||
<div class="cm-editor cm-s-jupyter">
|
||||
<div class="highlight hl-julia"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Distributed</span>
|
||||
|
||||
<span class="k">if</span><span class="w"> </span><span class="n">procs</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">workers</span><span class="p">()</span>
|
||||
<span class="w"> </span><span class="n">addprocs</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="nd">@everywhere</span><span class="w"> </span><span class="k">function</span><span class="w"> </span><span class="n">visited</span><span class="p">(</span><span class="n">city</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">hops</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">path</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">city</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">true</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">false</span>
|
||||
<span class="k">end</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=bcee99f0">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea">
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div>
|
||||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||||
<div class="cm-editor cm-s-jupyter">
|
||||
<div class="highlight hl-julia"><pre><span></span><span class="c">## TSP serial </span>
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">tsp_serial_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">num_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">length</span><span class="p">(</span><span class="n">connections</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">hops</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">num_cities</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">min_distance</span>
|
||||
<span class="w"> </span><span class="n">min_path</span><span class="w"> </span><span class="o">.=</span><span class="w"> </span><span class="n">path</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">current_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">else</span>
|
||||
<span class="w"> </span><span class="n">current_city</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">[</span><span class="n">hops</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="n">next_hops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hops</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">next_city</span><span class="p">,</span><span class="n">distance_increment</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">connections</span><span class="p">[</span><span class="n">current_city</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="n">visited</span><span class="p">(</span><span class="n">next_city</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="p">[</span><span class="n">next_hops</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">next_city</span>
|
||||
<span class="w"> </span><span class="n">next_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">distance_increment</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">next_distance</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">min_distance</span>
|
||||
<span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_serial_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">next_hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">next_distance</span><span class="p">,</span><span class="n">min_path</span><span class="p">,</span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">tsp_serial</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">city</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">num_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">length</span><span class="p">(</span><span class="n">connections</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="o">=</span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">num_cities</span><span class="p">)</span>
|
||||
@@ -7803,33 +7865,45 @@ a.anchor-link {
|
||||
<span class="w"> </span><span class="n">min_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">num_cities</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">typemax</span><span class="p">(</span><span class="kt">Int</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Collect search time </span>
|
||||
<span class="w"> </span><span class="n">search_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_serial_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="p">(;</span><span class="n">path</span><span class="o">=</span><span class="n">min_path</span><span class="p">,</span><span class="n">distance</span><span class="o">=</span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">search_time</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="c"># Count the number of nodes visited in recursive function and return</span>
|
||||
<span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_serial_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="w"> </span><span class="n">min_path</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="p">(;</span><span class="n">path</span><span class="o">=</span><span class="n">min_path</span><span class="p">,</span><span class="n">distance</span><span class="o">=</span><span class="n">min_distance</span><span class="p">,</span><span class="w"> </span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="k">end</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=30784da2">
|
||||
<div class="jp-Cell-outputWrapper">
|
||||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||||
</div>
|
||||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[14]:</div>
|
||||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||||
<pre>tsp_serial (generic function with 1 method)</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=327f5349">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea">
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div>
|
||||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||||
<div class="cm-editor cm-s-jupyter">
|
||||
<div class="highlight hl-julia"><pre><span></span><span class="c">## TSP distributed</span>
|
||||
<span class="nd">@everywhere</span><span class="w"> </span><span class="k">function</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">wait_time</span><span class="p">,</span><span class="w"> </span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="w"> </span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">)</span>
|
||||
<span class="nd">@everywhere</span><span class="w"> </span><span class="k">function</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="w"> </span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">,</span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">num_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">length</span><span class="p">(</span><span class="n">connections</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">hops</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">num_cities</span>
|
||||
<span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">min_distance</span>
|
||||
<span class="w"> </span><span class="n">take!</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Collect wait time to substract from overall search time </span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">ftr_result</span><span class="w"> </span><span class="o">!==</span><span class="w"> </span><span class="nb">nothing</span>
|
||||
<span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="nd">@spawnat</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">begin</span>
|
||||
<span class="w"> </span><span class="nd">@spawnat</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">begin</span>
|
||||
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">ftr_result</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">path</span><span class="w"> </span><span class="o">.=</span><span class="w"> </span><span class="n">path</span>
|
||||
<span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">min_distance_ref</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_distance</span>
|
||||
@@ -7843,23 +7917,21 @@ a.anchor-link {
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">next_city</span><span class="p">,</span><span class="n">distance_increment</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">connections</span><span class="p">[</span><span class="n">current_city</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="n">visited</span><span class="p">(</span><span class="n">next_city</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="p">[</span><span class="n">next_hops</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">next_city</span>
|
||||
<span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="n">next_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">distance_increment</span>
|
||||
<span class="w"> </span><span class="c"># Collect wait time because fetch may block</span>
|
||||
<span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">next_distance</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">min_distance</span>
|
||||
<span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">wait_time</span><span class="p">,</span><span class="w"> </span><span class="n">connections</span><span class="p">,</span><span class="n">next_hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">next_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">next_hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">next_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">,</span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">else</span>
|
||||
<span class="w"> </span><span class="c"># Collect communication time and add to wait time</span>
|
||||
<span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">jobs_chnl</span><span class="w"> </span><span class="o">!==</span><span class="w"> </span><span class="nb">nothing</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">jobs_chnl</span><span class="w"> </span><span class="o">!==</span><span class="w"> </span><span class="nb">nothing</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="n">path_copy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">copy</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="n">put!</span><span class="p">(</span><span class="n">jobs_chnl</span><span class="p">,(;</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="o">=</span><span class="n">path_copy</span><span class="p">,</span><span class="n">current_distance</span><span class="p">))</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="c"># Return wait time</span>
|
||||
<span class="w"> </span><span class="n">wait_time</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node_count</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">tsp_dist</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">city</span><span class="p">)</span>
|
||||
@@ -7867,19 +7939,23 @@ a.anchor-link {
|
||||
<span class="w"> </span><span class="n">num_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">length</span><span class="p">(</span><span class="n">connections</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="o">=</span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="n">num_cities</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">result_path</span><span class="o">=</span><span class="n">zeros</span><span class="p">(</span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">num_cities</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">search_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">hops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="p">[</span><span class="n">hops</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">city</span>
|
||||
<span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">typemax</span><span class="p">(</span><span class="kt">Int</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="w"> </span><span class="n">jobs_chnl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RemoteChannel</span><span class="p">(()</span><span class="o">-></span><span class="kt">Channel</span><span class="p">{</span><span class="kt">Any</span><span class="p">}(</span><span class="mi">10</span><span class="p">))</span>
|
||||
<span class="w"> </span><span class="n">min_dist_chnl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RemoteChannel</span><span class="p">(()</span><span class="o">-></span><span class="kt">Channel</span><span class="p">{</span><span class="kt">Int</span><span class="p">}(</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="w"> </span><span class="n">put!</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="w"> </span><span class="n">min_distance</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">ftr_result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nd">@spawnat</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">(;</span><span class="n">path</span><span class="o">=</span><span class="n">result_path</span><span class="p">,</span><span class="n">min_distance_ref</span><span class="o">=</span><span class="kt">Ref</span><span class="p">(</span><span class="n">min_distance</span><span class="p">))</span>
|
||||
<span class="w"> </span><span class="c"># Add another future to store number of visited nodes</span>
|
||||
<span class="w"> </span><span class="n">ftr_node_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nd">@spawnat</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">node_count_ref</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Ref</span><span class="p">(</span><span class="n">node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="nd">@async</span><span class="w"> </span><span class="k">begin</span>
|
||||
<span class="w"> </span><span class="c"># Collect search time from master process</span>
|
||||
<span class="w"> </span><span class="n">search_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">wait_time</span><span class="p">,</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="nb">nothing</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">ncount</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">ncount</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="nb">nothing</span><span class="p">,</span><span class="w"> </span><span class="n">ncount</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Update node counter</span>
|
||||
<span class="w"> </span><span class="n">node_count_ref</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">ftr_node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count_ref</span><span class="p">[]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">ncount</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">w</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">workers</span><span class="p">()</span>
|
||||
<span class="w"> </span><span class="n">put!</span><span class="p">(</span><span class="n">jobs_chnl</span><span class="p">,</span><span class="nb">nothing</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
@@ -7896,88 +7972,198 @@ a.anchor-link {
|
||||
<span class="w"> </span><span class="n">hops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">job</span><span class="o">.</span><span class="n">hops</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">job</span><span class="o">.</span><span class="n">path</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">job</span><span class="o">.</span><span class="n">current_distance</span>
|
||||
<span class="w"> </span><span class="n">ncount</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="n">min_distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">min_dist_chnl</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">current_distance</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">min_distance</span>
|
||||
<span class="w"> </span><span class="c"># Collect search time from worker processes </span>
|
||||
<span class="w"> </span><span class="n">search_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nd">@elapsed</span><span class="w"> </span><span class="n">wait_time</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">wait_time</span><span class="p">,</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="nb">nothing</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">ncount</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">tsp_dist_impl</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="n">hops</span><span class="p">,</span><span class="n">path</span><span class="p">,</span><span class="n">current_distance</span><span class="p">,</span><span class="n">min_dist_chnl</span><span class="p">,</span><span class="n">max_hops</span><span class="p">,</span><span class="nb">nothing</span><span class="p">,</span><span class="n">ftr_result</span><span class="p">,</span><span class="w"> </span><span class="n">ncount</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Update node counter</span>
|
||||
<span class="w"> </span><span class="nd">@spawnat</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">begin</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="n">node_count_ref</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">ftr_node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count_ref</span><span class="p">[]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">ncount</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">ftr_result</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="p">(;</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">min_distance_ref</span><span class="p">[],</span><span class="w"> </span><span class="n">search_time</span><span class="p">,</span><span class="w"> </span><span class="n">wait_time</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Fetch number of visited nodes for return</span>
|
||||
<span class="w"> </span><span class="n">node_count_ref</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fetch</span><span class="p">(</span><span class="n">ftr_node_count</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="p">(;</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">min_distance_ref</span><span class="p">[],</span><span class="w"> </span><span class="n">node_count</span><span class="o">=</span><span class="n">node_count_ref</span><span class="p">[])</span>
|
||||
<span class="k">end</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=694de934">
|
||||
<div class="jp-Cell-outputWrapper">
|
||||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||||
</div>
|
||||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[15]:</div>
|
||||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||||
<pre>tsp_dist (generic function with 1 method)</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=706242f2">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||||
</div>
|
||||
<div class="jp-InputArea jp-Cell-inputArea">
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||||
<div class="jp-InputPrompt jp-InputArea-prompt">In [16]:</div>
|
||||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||||
<div class="cm-editor cm-s-jupyter">
|
||||
<div class="highlight hl-julia"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Distributed</span>
|
||||
<span class="k">using</span><span class="w"> </span><span class="n">RandomMatrix</span>
|
||||
<span class="k">using</span><span class="w"> </span><span class="n">Plots</span>
|
||||
<span class="k">using</span><span class="w"> </span><span class="n">Statistics</span>
|
||||
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">generate_rand_connections</span><span class="p">(</span><span class="n">city_range</span><span class="p">,</span><span class="w"> </span><span class="n">distance_range</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># generate random connections matrix </span>
|
||||
<span class="w"> </span><span class="n">n_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="n">city_range</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">matrix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">randTriangular</span><span class="p">(</span><span class="n">distance_range</span><span class="p">,</span><span class="w"> </span><span class="n">n_cities</span><span class="p">;</span><span class="w"> </span><span class="n">Diag</span><span class="o">=</span><span class="nb">false</span><span class="p">)</span>
|
||||
|
||||
<span class="w"> </span><span class="n">connections</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Array</span><span class="p">{</span><span class="kt">Array</span><span class="p">{</span><span class="kt">Tuple</span><span class="p">{</span><span class="kt">Int64</span><span class="p">,</span><span class="kt">Int64</span><span class="p">},</span><span class="mi">1</span><span class="p">},</span><span class="mi">1</span><span class="p">}(</span><span class="nb">undef</span><span class="p">,</span><span class="w"> </span><span class="n">n_cities</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n_cities</span>
|
||||
<span class="w"> </span><span class="n">connections</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Array</span><span class="p">{</span><span class="kt">Tuple</span><span class="p">{</span><span class="kt">Int64</span><span class="p">,</span><span class="kt">Int64</span><span class="p">},</span><span class="mi">1</span><span class="p">}(</span><span class="nb">undef</span><span class="p">,</span><span class="w"> </span><span class="n">n_cities</span><span class="p">)</span>
|
||||
<span class="c"># Generate random matrices</span>
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">rand_symmetric_distance_table</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">threshold</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.2</span>
|
||||
<span class="w"> </span><span class="n">mincost</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
|
||||
<span class="w"> </span><span class="n">maxcost</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span>
|
||||
<span class="w"> </span><span class="n">infinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10000</span><span class="o">*</span><span class="n">maxcost</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fill</span><span class="p">(</span><span class="n">infinity</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">n</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">j</span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rand</span><span class="p">()</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">threshold</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand</span><span class="p">(</span><span class="n">mincost</span><span class="o">:</span><span class="n">maxcost</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">j</span><span class="p">,</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">j</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n_cities</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">i</span><span class="o">:</span><span class="n">n_cities</span>
|
||||
<span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="n">connections</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="p">,</span><span class="n">distance</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">connections</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="n">distance</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="p">,</span><span class="n">infinity</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="c"># Sort to get ascending distance weights</span>
|
||||
<span class="k">function</span><span class="w"> </span><span class="n">sort_neighbors</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">C</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">map</span><span class="p">(</span><span class="mi">1</span><span class="o">:</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="n">i</span>
|
||||
<span class="w"> </span><span class="n">Ci</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="o">:</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="n">cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sortperm</span><span class="p">(</span><span class="n">Ci</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">distances</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Ci</span><span class="p">[</span><span class="n">cities</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="n">collect</span><span class="p">(</span><span class="n">zip</span><span class="p">(</span><span class="n">cities</span><span class="p">,</span><span class="n">distances</span><span class="p">))[</span><span class="mi">2</span><span class="o">:</span><span class="k">end</span><span class="p">]</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="n">n_cities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">]</span>
|
||||
<span class="n">n_rep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span>
|
||||
<span class="n">city</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<span class="n">node_count_serial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Union</span><span class="p">{</span><span class="kt">Missing</span><span class="p">,</span><span class="kt">Int64</span><span class="p">},</span><span class="n">length</span><span class="p">(</span><span class="n">n_cities</span><span class="p">),</span><span class="w"> </span><span class="n">n_rep</span><span class="p">)</span>
|
||||
<span class="n">node_count_dist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Union</span><span class="p">{</span><span class="kt">Missing</span><span class="p">,</span><span class="kt">Int64</span><span class="p">},</span><span class="n">length</span><span class="p">(</span><span class="n">n_cities</span><span class="p">),</span><span class="w"> </span><span class="n">n_rep</span><span class="p">)</span>
|
||||
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">enumerate</span><span class="p">(</span><span class="n">n_cities</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="nd">@show</span><span class="w"> </span><span class="n">n</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n_rep</span>
|
||||
<span class="w"> </span><span class="c"># Generate random connections matrix</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="p">,</span><span class="w"> </span><span class="n">inf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rand_symmetric_distance_table</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">C</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sort_neighbors</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Run serial algorithm</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">,</span><span class="w"> </span><span class="n">ncount_serial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_serial</span><span class="p">(</span><span class="n">C</span><span class="p">,</span><span class="w"> </span><span class="n">city</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Check if graph is connected </span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">inf</span>
|
||||
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"The input graph size </span><span class="si">$n</span><span class="s">, it </span><span class="si">$j</span><span class="s"> is not connected"</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count_serial</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">missing</span>
|
||||
<span class="w"> </span><span class="n">node_count_dist</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">missing</span>
|
||||
<span class="w"> </span><span class="k">else</span>
|
||||
<span class="w"> </span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">,</span><span class="w"> </span><span class="n">ncount_dist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_dist</span><span class="p">(</span><span class="n">C</span><span class="p">,</span><span class="w"> </span><span class="n">city</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">node_count_serial</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ncount_serial</span>
|
||||
<span class="w"> </span><span class="n">node_count_dist</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ncount_dist</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">connections</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="c"># Run once so compile times are not measured</span>
|
||||
<span class="n">distance_range</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="mi">100</span>
|
||||
<span class="n">connections</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">generate_rand_connections</span><span class="p">(</span><span class="mi">4</span><span class="o">:</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">distance_range</span><span class="p">)</span>
|
||||
<span class="n">tsp_dist</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">tsp_serial</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># Measure runtimes of serial and parallel algorithm</span>
|
||||
<span class="n">n_it</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span>
|
||||
<span class="n">city_ranges</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">4</span><span class="o">:</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="o">:</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="o">:</span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="o">:</span><span class="mi">10</span><span class="p">]</span>
|
||||
<span class="n">search_overhead</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeros</span><span class="p">(</span><span class="kt">Float64</span><span class="p">,</span><span class="w"> </span><span class="n">length</span><span class="p">(</span><span class="n">city_ranges</span><span class="p">),</span><span class="w"> </span><span class="n">n_it</span><span class="w"> </span><span class="p">)</span>
|
||||
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">enumerate</span><span class="p">(</span><span class="n">city_ranges</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n_it</span>
|
||||
<span class="w"> </span><span class="n">connections</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">generate_rand_connections</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">distance_range</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="nd">@show</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">k</span>
|
||||
<span class="w"> </span><span class="n">path_dist</span><span class="p">,</span><span class="w"> </span><span class="n">distance_dist</span><span class="p">,</span><span class="w"> </span><span class="n">search_time_dist</span><span class="p">,</span><span class="w"> </span><span class="n">wait_time_dist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_dist</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="n">path_serial</span><span class="p">,</span><span class="w"> </span><span class="n">distance_serial</span><span class="p">,</span><span class="w"> </span><span class="n">search_time_serial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tsp_serial</span><span class="p">(</span><span class="n">connections</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="w"> </span><span class="c"># Compute search overhead as difference between distributed program and serial program</span>
|
||||
<span class="w"> </span><span class="c"># (without time spent communicating or waiting)</span>
|
||||
<span class="w"> </span><span class="n">search_overhead</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">search_time_dist</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">wait_time_dist</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">search_time_serial</span>
|
||||
<span class="w"> </span><span class="k">end</span>
|
||||
<span class="k">end</span>
|
||||
|
||||
<span class="n">min_search_oh</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">minimum</span><span class="p">(</span><span class="n">search_overhead</span><span class="p">,</span><span class="w"> </span><span class="n">dims</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">city_sizes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">4</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">10</span><span class="p">]</span>
|
||||
<span class="n">plot</span><span class="p">(</span><span class="n">city_sizes</span><span class="p">,</span><span class="w"> </span><span class="n">min_search_oh</span><span class="p">,</span><span class="w"> </span><span class="n">yaxis</span><span class="o">=</span><span class="ss">:log</span><span class="p">,</span><span class="w"> </span><span class="n">seriestype</span><span class="o">=</span><span class="ss">:scatter</span><span class="p">,</span><span class="n">legend</span><span class="o">=</span><span class="nb">false</span><span class="p">)</span>
|
||||
<span class="n">plot!</span><span class="p">(</span><span class="n">city_sizes</span><span class="p">,</span><span class="w"> </span><span class="n">min_search_oh</span><span class="p">,</span><span class="w"> </span><span class="n">yaxis</span><span class="o">=</span><span class="ss">:log</span><span class="p">,</span><span class="w"> </span><span class="n">legend</span><span class="o">=</span><span class="nb">false</span><span class="p">)</span>
|
||||
<span class="c"># Calculate average and confidence interval</span>
|
||||
<span class="n">search_overhead_perc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">node_count_dist</span><span class="w"> </span><span class="o">.-</span><span class="w"> </span><span class="n">node_count_serial</span><span class="p">)</span><span class="o">./</span><span class="n">node_count_serial</span>
|
||||
<span class="n">avg_search_overhead</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">mean</span><span class="p">(</span><span class="n">skipmissing</span><span class="p">(</span><span class="n">search_overhead_perc</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="o">:</span><span class="p">]))</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">axes</span><span class="p">(</span><span class="n">search_overhead_perc</span><span class="p">,</span><span class="mi">1</span><span class="p">)]</span>
|
||||
<span class="n">conf_int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">1.96</span><span class="o">*</span><span class="n">std</span><span class="p">(</span><span class="n">skipmissing</span><span class="p">(</span><span class="n">search_overhead_perc</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="o">:</span><span class="p">]))</span><span class="o">/</span>
|
||||
<span class="w"> </span><span class="n">sqrt</span><span class="p">(</span><span class="n">count</span><span class="p">(</span><span class="o">!</span><span class="n">ismissing</span><span class="p">,</span><span class="n">search_overhead_perc</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="o">:</span><span class="p">]))</span><span class="w"> </span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">axes</span><span class="p">(</span><span class="n">search_overhead_perc</span><span class="p">,</span><span class="mi">1</span><span class="p">)]</span>
|
||||
|
||||
<span class="c"># Plot</span>
|
||||
<span class="n">plot</span><span class="p">(</span><span class="n">n_cities</span><span class="p">,</span><span class="w"> </span><span class="n">avg_search_overhead</span><span class="p">,</span><span class="w"> </span><span class="n">ribbon</span><span class="o">=</span><span class="n">conf_int</span><span class="p">,</span><span class="w"> </span><span class="n">markershape</span><span class="o">=</span><span class="ss">:circle</span><span class="p">,</span><span class="w"> </span><span class="n">legend</span><span class="o">=</span><span class="nb">false</span><span class="p">)</span>
|
||||
<span class="n">title!</span><span class="p">(</span><span class="s">"Average search overhead (%) and 95%-CI </span><span class="se">\n</span><span class="s">in parallel algorithm"</span><span class="p">)</span>
|
||||
<span class="n">ylabel!</span><span class="p">(</span><span class="s">"Average </span><span class="si">% e</span><span class="s">xtra nodes visited </span><span class="se">\n</span><span class="s"> in parallel algorithm"</span><span class="p">)</span>
|
||||
<span class="n">xlabel!</span><span class="p">(</span><span class="s">"Number of cities"</span><span class="p">)</span>
|
||||
<span class="n">ylabel!</span><span class="p">(</span><span class="s">"Search overhead (s)"</span><span class="p">)</span>
|
||||
<span class="n">title!</span><span class="p">(</span><span class="s">"Minimum search overhead for different problem sizes"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jp-Cell-outputWrapper">
|
||||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||||
</div>
|
||||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||||
<div class="jp-OutputArea-child">
|
||||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||||
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
||||
<pre>n = 4
|
||||
n = 6
|
||||
n = 8
|
||||
n = 10
|
||||
search_overhead_perc = [0.75 0.16666666666666666 0.3333333333333333 0.2727272727272727 0.14285714285714285 0.07692307692307693 0.0 0.16666666666666666 0.4 0.16666666666666666; 0.01092896174863388 0.005154639175257732 0.031578947368421054 0.05384615384615385 0.4672897196261682 0.10434782608695652 0.09917355371900827 0.06666666666666667 -0.0056179775280898875 0.2736842105263158; 0.0 -0.009295120061967466 -0.0032278889606197547 0.01906318082788671 0.028241335044929396 0.0011111111111111111 -0.008201892744479496 0.004958047292143402 -0.005873715124816446 -0.009497336113041464; 3.87551835057939e-5 -0.014818818265230451 7.133685261806249e-5 -0.03200184183262346 -0.01696773663002659 -0.004075168167420009 6.629541235746487e-5 -0.0033114074608037486 -0.016359150396910535 -0.0025293711126468557]
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[16]:</div>
|
||||
<div class="jp-RenderedHTMLCommon jp-RenderedHTML jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/html" tabindex="0">
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg height="400" viewbox="0 0 2400 1600" width="600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<clippath id="clip120">
|
||||
<rect height="1600" width="2400" x="0" y="0"></rect>
|
||||
</clippath>
|
||||
</defs>
|
||||
<path clip-path="url(#clip120)" d="M0 1600 L2400 1600 L2400 0 L0 0 Z" fill="#ffffff" fill-opacity="1" fill-rule="evenodd"></path>
|
||||
<defs>
|
||||
<clippath id="clip121">
|
||||
<rect height="1600" width="1681" x="480" y="0"></rect>
|
||||
</clippath>
|
||||
</defs>
|
||||
<path clip-path="url(#clip120)" d="M266.9 1423.18 L2352.76 1423.18 L2352.76 183.952 L266.9 183.952 Z" fill="#ffffff" fill-opacity="1" fill-rule="evenodd"></path>
|
||||
<defs>
|
||||
<clippath id="clip122">
|
||||
<rect height="1240" width="2087" x="266" y="183"></rect>
|
||||
</clippath>
|
||||
</defs>
|
||||
<polyline clip-path="url(#clip122)" points="325.934,1423.18 325.934,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="653.899,1423.18 653.899,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="981.863,1423.18 981.863,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="1309.83,1423.18 1309.83,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="1637.79,1423.18 1637.79,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="1965.76,1423.18 1965.76,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="2293.72,1423.18 2293.72,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,1423.18 2352.76,1423.18 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="325.934,1423.18 325.934,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="653.899,1423.18 653.899,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="981.863,1423.18 981.863,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="1309.83,1423.18 1309.83,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="1637.79,1423.18 1637.79,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="1965.76,1423.18 1965.76,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="2293.72,1423.18 2293.72,1404.28 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<path clip-path="url(#clip120)" d="M328.943 1455.09 L317.138 1473.54 L328.943 1473.54 L328.943 1455.09 M327.716 1451.02 L333.596 1451.02 L333.596 1473.54 L338.526 1473.54 L338.526 1477.43 L333.596 1477.43 L333.596 1485.58 L328.943 1485.58 L328.943 1477.43 L313.341 1477.43 L313.341 1472.92 L327.716 1451.02 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M644.176 1451.02 L662.533 1451.02 L662.533 1454.96 L648.459 1454.96 L648.459 1463.43 Q649.477 1463.08 650.496 1462.92 Q651.514 1462.73 652.533 1462.73 Q658.32 1462.73 661.699 1465.9 Q665.079 1469.08 665.079 1474.49 Q665.079 1480.07 661.607 1483.17 Q658.135 1486.25 651.815 1486.25 Q649.639 1486.25 647.371 1485.88 Q645.125 1485.51 642.718 1484.77 L642.718 1480.07 Q644.801 1481.2 647.024 1481.76 Q649.246 1482.32 651.723 1482.32 Q655.727 1482.32 658.065 1480.21 Q660.403 1478.1 660.403 1474.49 Q660.403 1470.88 658.065 1468.77 Q655.727 1466.67 651.723 1466.67 Q649.848 1466.67 647.973 1467.08 Q646.121 1467.5 644.176 1468.38 L644.176 1451.02 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M982.268 1466.44 Q979.12 1466.44 977.268 1468.59 Q975.44 1470.74 975.44 1474.49 Q975.44 1478.22 977.268 1480.39 Q979.12 1482.55 982.268 1482.55 Q985.417 1482.55 987.245 1480.39 Q989.097 1478.22 989.097 1474.49 Q989.097 1470.74 987.245 1468.59 Q985.417 1466.44 982.268 1466.44 M991.551 1451.78 L991.551 1456.04 Q989.791 1455.21 987.986 1454.77 Q986.204 1454.33 984.444 1454.33 Q979.815 1454.33 977.361 1457.45 Q974.93 1460.58 974.583 1466.9 Q975.949 1464.89 978.009 1463.82 Q980.069 1462.73 982.546 1462.73 Q987.754 1462.73 990.764 1465.9 Q993.796 1469.05 993.796 1474.49 Q993.796 1479.82 990.648 1483.03 Q987.5 1486.25 982.268 1486.25 Q976.273 1486.25 973.102 1481.67 Q969.93 1477.06 969.93 1468.33 Q969.93 1460.14 973.819 1455.28 Q977.708 1450.39 984.259 1450.39 Q986.018 1450.39 987.801 1450.74 Q989.606 1451.09 991.551 1451.78 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M1298.72 1451.02 L1320.94 1451.02 L1320.94 1453.01 L1308.39 1485.58 L1303.51 1485.58 L1315.31 1454.96 L1298.72 1454.96 L1298.72 1451.02 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M1637.79 1469.17 Q1634.46 1469.17 1632.54 1470.95 Q1630.64 1472.73 1630.64 1475.86 Q1630.64 1478.98 1632.54 1480.77 Q1634.46 1482.55 1637.79 1482.55 Q1641.13 1482.55 1643.05 1480.77 Q1644.97 1478.96 1644.97 1475.86 Q1644.97 1472.73 1643.05 1470.95 Q1641.15 1469.17 1637.79 1469.17 M1633.12 1467.18 Q1630.11 1466.44 1628.42 1464.38 Q1626.75 1462.32 1626.75 1459.35 Q1626.75 1455.21 1629.69 1452.8 Q1632.65 1450.39 1637.79 1450.39 Q1642.95 1450.39 1645.89 1452.8 Q1648.83 1455.21 1648.83 1459.35 Q1648.83 1462.32 1647.14 1464.38 Q1645.48 1466.44 1642.49 1467.18 Q1645.87 1467.96 1647.75 1470.26 Q1649.64 1472.55 1649.64 1475.86 Q1649.64 1480.88 1646.57 1483.57 Q1643.51 1486.25 1637.79 1486.25 Q1632.08 1486.25 1629 1483.57 Q1625.94 1480.88 1625.94 1475.86 Q1625.94 1472.55 1627.84 1470.26 Q1629.74 1467.96 1633.12 1467.18 M1631.4 1459.79 Q1631.4 1462.48 1633.07 1463.98 Q1634.76 1465.49 1637.79 1465.49 Q1640.8 1465.49 1642.49 1463.98 Q1644.2 1462.48 1644.2 1459.79 Q1644.2 1457.11 1642.49 1455.6 Q1640.8 1454.1 1637.79 1454.1 Q1634.76 1454.1 1633.07 1455.6 Q1631.4 1457.11 1631.4 1459.79 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M1956.06 1484.86 L1956.06 1480.6 Q1957.82 1481.44 1959.62 1481.88 Q1961.43 1482.32 1963.16 1482.32 Q1967.79 1482.32 1970.23 1479.21 Q1972.68 1476.09 1973.03 1469.75 Q1971.68 1471.74 1969.62 1472.8 Q1967.56 1473.87 1965.06 1473.87 Q1959.88 1473.87 1956.85 1470.74 Q1953.84 1467.59 1953.84 1462.15 Q1953.84 1456.83 1956.98 1453.61 Q1960.13 1450.39 1965.36 1450.39 Q1971.36 1450.39 1974.51 1455 Q1977.68 1459.58 1977.68 1468.33 Q1977.68 1476.51 1973.79 1481.39 Q1969.92 1486.25 1963.37 1486.25 Q1961.61 1486.25 1959.81 1485.9 Q1958 1485.56 1956.06 1484.86 M1965.36 1470.21 Q1968.51 1470.21 1970.34 1468.06 Q1972.19 1465.9 1972.19 1462.15 Q1972.19 1458.43 1970.34 1456.27 Q1968.51 1454.1 1965.36 1454.1 Q1962.22 1454.1 1960.36 1456.27 Q1958.54 1458.43 1958.54 1462.15 Q1958.54 1465.9 1960.36 1468.06 Q1962.22 1470.21 1965.36 1470.21 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M2268.41 1481.64 L2276.05 1481.64 L2276.05 1455.28 L2267.74 1456.95 L2267.74 1452.69 L2276 1451.02 L2280.68 1451.02 L2280.68 1481.64 L2288.32 1481.64 L2288.32 1485.58 L2268.41 1485.58 L2268.41 1481.64 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M2307.76 1454.1 Q2304.15 1454.1 2302.32 1457.66 Q2300.52 1461.2 2300.52 1468.33 Q2300.52 1475.44 2302.32 1479.01 Q2304.15 1482.55 2307.76 1482.55 Q2311.4 1482.55 2313.2 1479.01 Q2315.03 1475.44 2315.03 1468.33 Q2315.03 1461.2 2313.2 1457.66 Q2311.4 1454.1 2307.76 1454.1 M2307.76 1450.39Line truncated
|
||||
<polyline clip-path="url(#clip122)" points="266.9,1045.62 2352.76,1045.62 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="266.9,749.362 2352.76,749.362 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip122)" points="266.9,453.103 2352.76,453.103 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,1423.18 266.9,183.952 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,1341.88 285.798,1341.88 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,1045.62 285.798,1045.62 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,749.362 285.798,749.362 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<polyline clip-path="url(#clip120)" points="266.9,453.103 285.798,453.103 " style="stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<path clip-path="url(#clip120)" d="M173.725 1327.68 Q170.113 1327.68 168.285 1331.24 Q166.479 1334.78 166.479 1341.91 Q166.479 1349.02 168.285 1352.59 Q170.113 1356.13 173.725 1356.13 Q177.359 1356.13 179.164 1352.59 Q180.993 1349.02 180.993 1341.91 Q180.993 1334.78 179.164 1331.24 Q177.359 1327.68 173.725 1327.68 M173.725 1323.97 Q179.535 1323.97 182.59 1328.58 Q185.669 1333.16 185.669 1341.91 Q185.669 1350.64 182.59 1355.25 Q179.535 1359.83 173.725 1359.83 Q167.914 1359.83 164.836 1355.25 Q161.78 1350.64 161.78 1341.91 Q161.78 1333.16 164.836 1328.58 Q167.914 1323.97 173.725 1323.97 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M193.886 1353.28 L198.771 1353.28 L198.771 1359.16 L193.886 1359.16 L193.886 1353.28 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M218.956 1327.68 Q215.345 1327.68 213.516 1331.24 Q211.71 1334.78 211.71 1341.91 Q211.71 1349.02 213.516 1352.59 Q215.345 1356.13 218.956 1356.13 Q222.59 1356.13 224.396 1352.59 Q226.224 1349.02 226.224 1341.91 Q226.224 1334.78 224.396 1331.24 Q222.59 1327.68 218.956 1327.68 M218.956 1323.97 Q224.766 1323.97 227.821 1328.58 Q230.9 1333.16 230.9 1341.91 Q230.9 1350.64 227.821 1355.25 Q224.766 1359.83 218.956 1359.83 Q213.146 1359.83 210.067 1355.25 Q207.011 1350.64 207.011 1341.91 Q207.011 1333.16 210.067 1328.58 Q213.146 1323.97 218.956 1323.97 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M174.951 1031.42 Q171.34 1031.42 169.512 1034.98 Q167.706 1038.53 167.706 1045.66 Q167.706 1052.76 169.512 1056.33 Q171.34 1059.87 174.951 1059.87 Q178.586 1059.87 180.391 1056.33 Q182.22 1052.76 182.22 1045.66 Q182.22 1038.53 180.391 1034.98 Q178.586 1031.42 174.951 1031.42 M174.951 1027.72 Q180.762 1027.72 183.817 1032.32 Q186.896 1036.91 186.896 1045.66 Q186.896 1054.38 183.817 1058.99 Q180.762 1063.57 174.951 1063.57 Q169.141 1063.57 166.063 1058.99 Q163.007 1054.38 163.007 1045.66 Q163.007 1036.91 166.063 1032.32 Q169.141 1027.72 174.951 1027.72 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M195.113 1057.02 L199.998 1057.02 L199.998 1062.9 L195.113 1062.9 L195.113 1057.02 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M210.993 1058.97 L218.632 1058.97 L218.632 1032.6 L210.322 1034.27 L210.322 1030.01 L218.585 1028.34 L223.261 1028.34 L223.261 1058.97 L230.9 1058.97 L230.9 1062.9 L210.993 1062.9 L210.993 1058.97 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M175.322 735.16 Q171.711 735.16 169.882 738.725 Q168.076 742.267 168.076 749.396 Q168.076 756.503 169.882 760.068 Q171.711 763.609 175.322 763.609 Q178.956 763.609 180.762 760.068 Q182.59 756.503 182.59 749.396 Q182.59 742.267 180.762 738.725 Q178.956 735.16 175.322 735.16 M175.322 731.457 Q181.132 731.457 184.187 736.063 Q187.266 740.646 187.266 749.396 Q187.266 758.123 184.187 762.73 Q181.132 767.313 175.322 767.313 Q169.512 767.313 166.433 762.73 Q163.377 758.123 163.377 749.396 Q163.377 740.646 166.433 736.063 Q169.512 731.457 175.322 731.457 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M195.484 760.762 L200.368 760.762 L200.368 766.642 L195.484 766.642 L195.484 760.762 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M214.581 762.707 L230.9 762.707 L230.9 766.642 L208.956 766.642 L208.956 762.707 Q211.618 759.952 216.201 755.322 Q220.808 750.67 221.988 749.327 Q224.234 746.804 225.113 745.068 Q226.016 743.308 226.016 741.619 Q226.016 738.864 224.071 737.128 Q222.15 735.392 219.048 735.392 Q216.849 735.392 214.396 736.156 Q211.965 736.92 209.187 738.471 L209.187 733.748 Q212.011 732.614 214.465 732.035 Q216.919 731.457 218.956 731.457 Q224.326 731.457 227.521 734.142 Q230.715 736.827 230.715 741.318 Q230.715 743.447 229.905 745.369 Q229.118 747.267 227.011 749.859 Q226.433 750.531 223.331 753.748 Q220.229 756.943 214.581 762.707 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M174.373 438.902 Q170.762 438.902 168.933 442.466 Q167.127 446.008 167.127 453.138 Q167.127 460.244 168.933 463.809 Q170.762 467.351 174.373 467.351 Q178.007 467.351 179.812 463.809 Q181.641 460.244 181.641 453.138 Q181.641 446.008 179.812 442.466 Q178.007 438.902 174.373 438.902 M174.373 435.198 Q180.183 435.198 183.238 439.804 Q186.317 444.388 186.317 453.138 Q186.317 461.865 183.238 466.471 Q180.183 471.054 174.373 471.054 Q168.563 471.054 165.484 466.471 Q162.428 461.865 162.428 453.138 Q162.428 444.388 165.484 439.804 Q168.563 435.198 174.373 435.198 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"></path><path clip-path="url(#clip120)" d="M194.535 464.503 L199.419 464.503 L199.419 470.383 L194.535 470.383 L194.535 464.503 Z" fill="#000000" fill-opacity="1" fill-rule="nonzero"><Line truncated
|
||||
<polyline clip-path="url(#clip122)" points="325.934,608.39 981.863,1013.91 1637.79,1336.76 2293.72,1368.51 " style="stroke:#009af9; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none"></polyline>
|
||||
<circle clip-path="url(#clip122)" cx="325.934" cy="608.39" fill="#009af9" fill-opacity="1" fill-rule="evenodd" r="14.4" stroke="#000000" stroke-opacity="1" stroke-width="3.2"></circle>
|
||||
<circle clip-path="url(#clip122)" cx="981.863" cy="1013.91" fill="#009af9" fill-opacity="1" fill-rule="evenodd" r="14.4" stroke="#000000" stroke-opacity="1" stroke-width="3.2"></circle>
|
||||
<circle clip-path="url(#clip122)" cx="1637.79" cy="1336.76" fill="#009af9" fill-opacity="1" fill-rule="evenodd" r="14.4" stroke="#000000" stroke-opacity="1" stroke-width="3.2"></circle>
|
||||
<circle clip-path="url(#clip122)" cx="2293.72" cy="1368.51" fill="#009af9" fill-opacity="1" fill-rule="evenodd" r="14.4" stroke="#000000" stroke-opacity="1" stroke-width="3.2"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=47d88e7a">
|
||||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||||
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../jacobi_method/">« Jacobi</a><a class="docs-footer-nextpage" href="../solutions/">Solutions »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../jacobi_method/">« Jacobi</a><a class="docs-footer-nextpage" href="../solutions/">Solutions »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../matrix_matrix/">« Matrix Multiplication</a><a class="docs-footer-nextpage" href="../asp/">ASP »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../matrix_matrix/">« Matrix Multiplication</a><a class="docs-footer-nextpage" href="../asp/">ASP »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_basics/">« Julia Basics</a><a class="docs-footer-nextpage" href="../julia_distributed/">Remote calls and remote channels »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_basics/">« Julia Basics</a><a class="docs-footer-nextpage" href="../julia_distributed/">Remote calls and remote channels »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../getting_started_with_julia/">« Getting started</a><a class="docs-footer-nextpage" href="../julia_async/">Tasks and channels »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../getting_started_with_julia/">« Getting started</a><a class="docs-footer-nextpage" href="../julia_async/">Tasks and channels »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_async/">« Tasks and channels</a><a class="docs-footer-nextpage" href="../mpi_tutorial/">MPI »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_async/">« Tasks and channels</a><a class="docs-footer-nextpage" href="../mpi_tutorial/">MPI »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../mpi_tutorial/">« MPI</a><a class="docs-footer-nextpage" href="../jacobi_method/">Jacobi »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../mpi_tutorial/">« MPI</a><a class="docs-footer-nextpage" href="../jacobi_method/">Jacobi »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_distributed/">« Remote calls and remote channels</a><a class="docs-footer-nextpage" href="../matrix_matrix/">Matrix Multiplication »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_distributed/">« Remote calls and remote channels</a><a class="docs-footer-nextpage" href="../matrix_matrix/">Matrix Multiplication »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
+305
-74
@@ -296,17 +296,85 @@
|
||||
"id": "19641daf",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## TSP Exercise: Measure search overhead"
|
||||
"### Exercise: Measure search overhead\n",
|
||||
"Modify the code of the serial and parallel algorithms so that the functions return the number of nodes in the search tree that they visit. You can then compare how many more nodes are visited by the parallel algorithm compared with the serial algorithm (known as _search overhead_). You can then use the third cell to gather some statistics about the search overhead using your altered version of the functions. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "22ccce39",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## TSP: Exercise x (Measure search overhead)\n",
|
||||
"This is the solution of how the code can be altered to measure the search overhead:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "f00557a0",
|
||||
"execution_count": 13,
|
||||
"id": "a4d5ab70",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"using Distributed\n",
|
||||
"\n",
|
||||
"if procs() == workers()\n",
|
||||
" addprocs(4)\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"@everywhere function visited(city,hops,path)\n",
|
||||
" for i = 1:hops\n",
|
||||
" if path[i] == city\n",
|
||||
" return true\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" return false\n",
|
||||
"end"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"id": "bcee99f0",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tsp_serial (generic function with 1 method)"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"## TSP serial \n",
|
||||
"function tsp_serial_impl(connections,hops,path,current_distance, min_path, min_distance, node_count)\n",
|
||||
" num_cities = length(connections)\n",
|
||||
" if hops == num_cities\n",
|
||||
" if current_distance < min_distance\n",
|
||||
" min_path .= path\n",
|
||||
" return min_path, current_distance, node_count\n",
|
||||
" end\n",
|
||||
" else\n",
|
||||
" current_city = path[hops]\n",
|
||||
" next_hops = hops + 1\n",
|
||||
" for (next_city,distance_increment) in connections[current_city]\n",
|
||||
" if !visited(next_city,hops,path)\n",
|
||||
" node_count += 1\n",
|
||||
" path[next_hops] = next_city\n",
|
||||
" next_distance = current_distance + distance_increment\n",
|
||||
" if next_distance < min_distance\n",
|
||||
" min_path, min_distance, node_count = tsp_serial_impl(connections,next_hops,path,next_distance,min_path,min_distance, node_count)\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" end \n",
|
||||
" end\n",
|
||||
" return min_path, min_distance, node_count\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"function tsp_serial(connections,city)\n",
|
||||
" num_cities = length(connections)\n",
|
||||
" path=zeros(Int,num_cities)\n",
|
||||
@@ -315,29 +383,40 @@
|
||||
" min_path = zeros(Int, num_cities)\n",
|
||||
" current_distance = 0\n",
|
||||
" min_distance = typemax(Int)\n",
|
||||
" # Collect search time \n",
|
||||
" search_time = @elapsed min_path, min_distance = tsp_serial_impl(connections,hops,path,current_distance, min_path, min_distance)\n",
|
||||
" (;path=min_path,distance=min_distance, search_time)\n",
|
||||
" node_count = 1\n",
|
||||
" # Count the number of nodes visited in recursive function and return\n",
|
||||
" min_path, min_distance, node_count = tsp_serial_impl(connections,hops,path,current_distance, min_path, min_distance, node_count)\n",
|
||||
" (;path=min_path,distance=min_distance, node_count)\n",
|
||||
"end"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "30784da2",
|
||||
"execution_count": 15,
|
||||
"id": "327f5349",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tsp_dist (generic function with 1 method)"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"## TSP distributed\n",
|
||||
"@everywhere function tsp_dist_impl(wait_time, connections,hops,path,current_distance,min_dist_chnl, max_hops,jobs_chnl,ftr_result)\n",
|
||||
"@everywhere function tsp_dist_impl(connections,hops,path,current_distance,min_dist_chnl, max_hops,jobs_chnl,ftr_result,node_count)\n",
|
||||
" num_cities = length(connections)\n",
|
||||
" if hops == num_cities\n",
|
||||
" min_distance = fetch(min_dist_chnl)\n",
|
||||
" if current_distance < min_distance\n",
|
||||
" take!(min_dist_chnl)\n",
|
||||
" # Collect wait time to substract from overall search time \n",
|
||||
" if ftr_result !== nothing\n",
|
||||
" wait_time += @elapsed @spawnat 1 begin\n",
|
||||
" @spawnat 1 begin\n",
|
||||
" result = fetch(ftr_result)\n",
|
||||
" result.path .= path\n",
|
||||
" result.min_distance_ref[] = current_distance\n",
|
||||
@@ -351,23 +430,21 @@
|
||||
" for (next_city,distance_increment) in connections[current_city]\n",
|
||||
" if !visited(next_city,hops,path)\n",
|
||||
" path[next_hops] = next_city\n",
|
||||
" node_count += 1\n",
|
||||
" next_distance = current_distance + distance_increment\n",
|
||||
" # Collect wait time because fetch may block\n",
|
||||
" wait_time += @elapsed min_distance = fetch(min_dist_chnl)\n",
|
||||
" min_distance = fetch(min_dist_chnl)\n",
|
||||
" if next_distance < min_distance\n",
|
||||
" tsp_dist_impl(wait_time, connections,next_hops,path,next_distance,min_dist_chnl,max_hops,jobs_chnl,ftr_result)\n",
|
||||
" node_count = tsp_dist_impl(connections,next_hops,path,next_distance,min_dist_chnl,max_hops,jobs_chnl,ftr_result,node_count)\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" end \n",
|
||||
" else\n",
|
||||
" # Collect communication time and add to wait time\n",
|
||||
" wait_time += @elapsed if jobs_chnl !== nothing \n",
|
||||
" if jobs_chnl !== nothing \n",
|
||||
" path_copy = copy(path) \n",
|
||||
" put!(jobs_chnl,(;hops,path=path_copy,current_distance))\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" # Return wait time\n",
|
||||
" wait_time\n",
|
||||
" return node_count\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"function tsp_dist(connections,city)\n",
|
||||
@@ -375,19 +452,23 @@
|
||||
" num_cities = length(connections)\n",
|
||||
" path=zeros(Int,num_cities)\n",
|
||||
" result_path=zeros(Int, num_cities)\n",
|
||||
" wait_time = 0\n",
|
||||
" search_time = 0\n",
|
||||
" hops = 1\n",
|
||||
" path[hops] = city\n",
|
||||
" current_distance = 0\n",
|
||||
" min_distance = typemax(Int)\n",
|
||||
" node_count = 1\n",
|
||||
" jobs_chnl = RemoteChannel(()->Channel{Any}(10))\n",
|
||||
" min_dist_chnl = RemoteChannel(()->Channel{Int}(1))\n",
|
||||
" put!(min_dist_chnl, min_distance)\n",
|
||||
" ftr_result = @spawnat 1 (;path=result_path,min_distance_ref=Ref(min_distance))\n",
|
||||
" # Add another future to store number of visited nodes\n",
|
||||
" ftr_node_count = @spawnat 1 node_count_ref = Ref(node_count)\n",
|
||||
" @async begin\n",
|
||||
" # Collect search time from master process\n",
|
||||
" search_time += @elapsed wait_time += tsp_dist_impl(wait_time,connections,hops,path,current_distance,min_dist_chnl,max_hops,jobs_chnl,nothing)\n",
|
||||
" ncount = 0\n",
|
||||
" ncount += tsp_dist_impl(connections,hops,path,current_distance,min_dist_chnl,max_hops,jobs_chnl,nothing, ncount)\n",
|
||||
" # Update node counter\n",
|
||||
" node_count_ref = fetch(ftr_node_count)\n",
|
||||
" node_count_ref[] += ncount \n",
|
||||
" for w in workers()\n",
|
||||
" put!(jobs_chnl,nothing)\n",
|
||||
" end\n",
|
||||
@@ -404,79 +485,229 @@
|
||||
" hops = job.hops\n",
|
||||
" path = job.path \n",
|
||||
" current_distance = job.current_distance\n",
|
||||
" ncount = 0\n",
|
||||
" min_distance = fetch(min_dist_chnl)\n",
|
||||
" if current_distance < min_distance\n",
|
||||
" # Collect search time from worker processes \n",
|
||||
" search_time += @elapsed wait_time += tsp_dist_impl(wait_time,connections,hops,path,current_distance,min_dist_chnl,max_hops,nothing,ftr_result)\n",
|
||||
" ncount += tsp_dist_impl(connections,hops,path,current_distance,min_dist_chnl,max_hops,nothing,ftr_result, ncount)\n",
|
||||
" # Update node counter\n",
|
||||
" @spawnat 1 begin \n",
|
||||
" node_count_ref = fetch(ftr_node_count)\n",
|
||||
" node_count_ref[] += ncount \n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" end \n",
|
||||
" result = fetch(ftr_result)\n",
|
||||
" (;path = result.path, distance = result.min_distance_ref[], search_time, wait_time)\n",
|
||||
"end\n"
|
||||
" # Fetch number of visited nodes for return\n",
|
||||
" node_count_ref = fetch(ftr_node_count)\n",
|
||||
" (;path = result.path, distance = result.min_distance_ref[], node_count=node_count_ref[])\n",
|
||||
"end"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "694de934",
|
||||
"execution_count": 16,
|
||||
"id": "706242f2",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"n = 4\n",
|
||||
"n = 6\n",
|
||||
"n = 8\n",
|
||||
"n = 10\n",
|
||||
"search_overhead_perc = [0.75 0.16666666666666666 0.3333333333333333 0.2727272727272727 0.14285714285714285 0.07692307692307693 0.0 0.16666666666666666 0.4 0.16666666666666666; 0.01092896174863388 0.005154639175257732 0.031578947368421054 0.05384615384615385 0.4672897196261682 0.10434782608695652 0.09917355371900827 0.06666666666666667 -0.0056179775280898875 0.2736842105263158; 0.0 -0.009295120061967466 -0.0032278889606197547 0.01906318082788671 0.028241335044929396 0.0011111111111111111 -0.008201892744479496 0.004958047292143402 -0.005873715124816446 -0.009497336113041464; 3.87551835057939e-5 -0.014818818265230451 7.133685261806249e-5 -0.03200184183262346 -0.01696773663002659 -0.004075168167420009 6.629541235746487e-5 -0.0033114074608037486 -0.016359150396910535 -0.0025293711126468557]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdZ0AUx9sA8Nm7o/feQcBCURTsAipgxd6wobHFEkuMGqNRE3vXRI3dxIqKir0DiopYsYHA0at0uKMf3O28HybZd/9LVUEUnt8nbpjbm12OfXY6hTFGAAAAQHPFa+wCAAAAAI0JAiEAAIBmDQIhAACAZg0CIQAAgGYNAiEAAIBmDQIhAACAZg0CIWjWYmNjz58/LxQKG7sgnyUwMPD8+fMSiaSxC4KePXt2/vz53NzcumR+8+bN+fPnKyoqPv9z7927d/v27c8/Tn159+7d+fPn09LSGrsgoE4gENYziUQyYcIELy+vo0ePNnZZQO3u3Lnj5eV17dq1xi7IZ1m+fLmXl1dhYWFjFwTt2bPHy8srJiam1pxFRUWenp5Hjx6Vk5NjEo8dO2ZnZ6etrd2tW7eAgIDK7xoxYkTHjh3Ly8s56e/evRs4cGBwcPBnlr++nDx50svL6/nz57XmvHr16oABA4yMjAwMDHr06PH3339Xntu9atUqr6qEh4ezs0VHRw8ePFhXV9fCwmLFihWVnzAuXbqkra0dGBj4safz4MGDGTNm2NnZ6enp6enpOTk5LVy48NWrV0yGvLy8ESNGeHt7f+yRvxYY1CtfX19yYU1NTaVSaWMXB9Tir7/+Qght27atsQvyWTp37owQys7ObuyC4IkTJyKEnjx5UmvOFStWIISePXvGpJw+fRohNHz48CNHjnTv3l1OTo79W4zxxYsXEUJXr16tfLTS0lITE5MuXbrQNP35Z/H5lixZghC6ePFizdmWL1+OEJKTk+vSpUufPn00NDQQQhMmTOCcRY8ePaq8ewcGBjJ58vPzTUxMTE1N9+/fv2jRIoqi5syZwz5IcXGxubn5kCFDPupEioqKRo8eTT7O0NDQxcXFxcXF2NgYIURR1NKlS0m21NRUhJC6uvpHHfzrAYGwng0YMAAhZGdnhxC6e/duYxcH1AICYf2qYyAUi8WqqqouLi7sREdHx5YtW8pkMoxxTk6OsrLyuHHjmN8WFxdbWFjUcB9fs2YNQujWrVufdwb1oy6B0N/fHyGkoaEREhJCUjIyMjp16oQQIvVCBgmEERERef+roqKCybNv3z6EUEBAAHnp7e0tEAjy8vKYDMuXL1dSUoqPj6/7WUilUg8PD4RQmzZtAgICmPBM0/TTp0/79+/fp08fkvKtB0JoGq1PaWlp/v7+rVu33rJlC0Lo2LFjn3M0qVSamJgoFApLS0trzllSUiIUCrOzs9mJhYWFUVFRSUlJNE3X8N4PHz5ER0eXlZXV/BEY45SUlKioKLFYXMfyEyKRSCgUfvjwoXJzFiM9PT0qKionJ6eG4+Tk5ERFRX348KHWTywtLRUKhVlZWezEioqKhISE2NjYGs4UY5yWliYUCmsoapUKCwuFQmFycnLNl7ouSDmFQmGtf5Hi4mKhUFj5okkkEqFQWHPvlFQqTUpKioqKKi4uri6PTCZLS0uLiooSiUQ1HKqsrCw6OjojI6Pm0nKcPHmyqKiI3ZJG03RkZKSbmxuPx0MI6ejoODo6vn//nsmwYcOGrKysP//8s7pjTp48maKogwcP1rEMUqk0NTVVKBQWFBTUmjkrK0soFBYVFVWXoaKiIjo6Oi0tDdd50cpDhw4hhBYtWtS9e3eSYmBgQJ7Mtm7dWjm/hoaG1v8SCATMb8PDw/l8fu/evclLDw8PqVTKdH7HxMTs3Llz2bJllpaWdSweQuivv/4KDAw0NzcPDg728PCgKIqkUxTVtWvXW7du/frrr3U/2letkQNx07J+/XqE0MaNGysqKgwNDRUVFZknspycHD09PRsbm8rtpVevXtXS0vr++++ZlNzc3B9++IG0kyCEFBUVJ02axHnet7a2NjMzy83N9fb2lpeXRwh5enpijDMzM2fOnGlqasr8iXV0dFatWsV+eCQePHjQtm1bkkdZWfmnn34KDw/X0tLy8vJiZysrK1u9erWBgQHJyefzBw4cGB0dXevV2L17N2lCIRQUFNzc3NhnQdP0/v37ra2tmTzdunV7/Pgx+yBv3rwZO3aspqYmk8fKyuqff/7hfJadnZ2+vr5IJJoyZYqCggJCyN3dnfwqMTFx4sSJKioq5O08Hq9Hjx7MMzhTI7x582arVq1IHjU1tS1bttR6ghjjyMhIT09P5n6kr6+/fv165k+cnp6uo6Pj4OBQub3u3LlzWlpa8+bNY1KysrJmzpyppqZGDqWkpDR16lT2Ez3G2MTEpFWrVllZWWPHjiVdayNHjsT/1QjT0tKWLl3KnGnbtm1fvHjB+VyRSLRgwQItLS3mjzJu3Lj09HR2nrNnz7q7uzNddzwez9XV9fnz55xDlZeX//zzz8zHOTg4hISE1LFG2LlzZ4qisrKymBSJRMLj8ebOncukeHh4WFlZkZ+joqIUFBTWrFlT82GdnJwEAkGtNeNjx4717NmT+avx+Xx3d/e3b9+y8zx79oz8V4aFhTGBSl5efubMmWVlZeycNE1v2LCB+Yq2bNny5s2bdakRtm7dGiF0//59ztGUlJQQQpGRkUwiqRGSKFsd8s1nvmlnzpxBrApi3759W7ZsWVpaWvOVYZPJZGZmZgih06dP15r5W68RQiCsNzRNt2zZksfjJScnY4x/+uknhNC+ffuYDEOGDEFVtZcOHz4cIXTz5k3yMjc318bGhkSF33//fcuWLaR1ws7OrrCwkHmXjo6OioqKs7Ozqanp9OnTV65c+fvvv2OMnz9/rqCgMGLEiBUrVuzatWvp0qUkGk2bNo39oU+fPlVUVBQIBNOmTTtw4MDq1asNDQ3J4yQJqER5eXmfPn0QQjY2NsuXL9+xY8eYMWMoitLV1U1ISKjhahw4cAAhZGpqunz58v3792/evHnatGna2tpxcXFMntmzZyOEDA0NFy9e/Mcff8yYMUNOTk5BQeHRo0dMnn379mlqak6ePHnNmjW7du2aPXu2qqoqQmjv3r3sjzMxMREIBG5ubkZGRtOmTVu5cuWKFSswxhEREXp6egghFxeXTZs2/fHHH3PnzjUzM2P+LiQQDhgwQCAQDBs2bO3atTNnziSh9Pjx4zWcIMY4KipKW1sbITR48ODdu3f/9ttv5PnD29ubydO3b1+E0MOHDznvJU3o9+7dIy8zMzNbtmyJEHJ2dl6zZs3mzZt79eqFEOrQoUNJSQnzLhUVFS0trc6dO5ubm3///fcrVqxYv349/i8QDh48WE9Pb/bs2WvXrnVzc0MI6erq5ubmMm8XiUQODg4Ioc6dO//2229bt27t378/uXfn5+cz2YYOHdqqVau5c+du27Zt8+bNw4cPpyhKWVk5PDycfQpTpkwhzyUbN27866+/BgwYoKqqSkpScyAUiUR8Pr9169acdDMzs969e5OfpVKpsbFxv379mMtYl/v43LlzEUJ+fn41Z3Nzc7O1tZ0/f/727ds3btw4aNAgchNnfzkfP36MEOrevbu2trarq+uKFSsWL15MvksLFy5kH4308xkZGa1evXrfvn1jxoyRk5NzcXGpNRBaWFgghCo/rOjq6iKEzpw5w6SQQLhr164VK1asWLHi2LFjmZmZnHetW7cOIRQTE0Neki7YxMREjPG5c+fYd5g6evv2LXkgk0gktWaGQAj+9eDBA4QQ02geFhZG7jhMhgsXLiCEJk6cyH5XTk6OgoKCsbExU42YNGkSQmjp0qXsFvkff/wRIbRq1SrmjTo6Ogih9u3bFxQUsA8oEok4T8SFhYX29vYURQmFQiaxY8eOCCF21SolJYU81bID4aZNm0i1g/3PQFqfRo0aVcPVcHZ2RghxOiTKysqY41y6dAkh5OTkJBKJmAz379/n8Xj29vbMuaemprIjAcY4OjpaQ0NDT0+PXSQTExOEkK2tLftoNE07OTkhhMgjAkMqlTKXiARChJCvry+TgZStS5cuNZwgxtjd3R0h9OuvvzIpWVlZJBZeu3aNpJw6dQohNH36dPYb09LS+Hy+hYUF6Q/DGI8ZMwYh9Ntvv7H/6ORBYcOGDcwbSfWrU6dOxcXF7AOS8GNlZcXU7WiaJg9Y7CeGmTNnIoQWLFjAfC7GeNmyZQihxYsXMymxsbGcKixp5Gf32AUFBSGEWrRowa6zzpkzh1zMmgPhzZs3EULjx4/npC9evJiiqGPHjuXm5q5cuRL911VW9/s4GarNCVSVxcbGclLI14DdKkMCIUJo2bJlzNWIiYmRk5NTUVFhvnsRERF8Pl9bWzs1NZV5L+mtrDUQkmB58uRJdiLTpM9uk6g8WEZJSWnz5s3sN75//14gEAwePDg9Pf3Ro0c6Ojrdu3fHGBcWFpqamo4YMaLma1LZyZMnyZetLpkhEIJ/kQdkdjWiffv2CCGmyUUikejq6iopKbGfvnft2oUQ+uWXX8jLrKwsgUBgamrKacksKipSVFRs2bIlk0ICYZUj6Cojn7J//37yMjIyEiHUunVr9g0R//dsywRCmqaNjY35fD4nstI03aZNGzk5uaKiouo+sUuXLjwer/JzK4NUWTgNoRjjoUOHIoTevHlTw+mQZwX2ozQJhOfOnWNnCwkJQQixw2pl5A7o4eHBTqRpWk9PT01NrYYyJCYmIoR0dHTY1XSM8Z49exBCzH2npKREU1NTXV2dHbpIFzITnlNTU3k8nrW1NafZXCQSCQSCtm3bMikkEFZuVCCBkHNLJXNC5s+fzxxNQUFBX1+f07JXWlqqpqZmbGxcw8lijHV1dfX09JiX06ZNq1wvz8jIUFRUrDUQ7t+/nxN6iaKiosGDB5MbPY/HW7BgAU3TnPv4o0ePNm/e/Oeff1Y56OPOnTvsi193UqlUWVmZaYnF/wVCQ0NDzuUiVXxOxWvlypXsPMXFxeTfs+ZAuHHjRoSQo6Mj+yNISxLnqff777/fsGHD7duLine truncated
|
||||
"image/svg+xml": [
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
|
||||
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip070\">\n",
|
||||
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<path clip-path=\"url(#clip070)\" d=\"M0 1600 L2400 1600 L2400 0 L0 0 Z\" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip071\">\n",
|
||||
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<path clip-path=\"url(#clip070)\" d=\"M266.9 1423.18 L2352.76 1423.18 L2352.76 183.952 L266.9 183.952 Z\" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip072\">\n",
|
||||
" <rect x=\"266\" y=\"183\" width=\"2087\" height=\"1240\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"325.934,1423.18 325.934,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"653.899,1423.18 653.899,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"981.863,1423.18 981.863,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1309.83,1423.18 1309.83,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1637.79,1423.18 1637.79,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1965.76,1423.18 1965.76,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"2293.72,1423.18 2293.72,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1423.18 2352.76,1423.18 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"325.934,1423.18 325.934,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"653.899,1423.18 653.899,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"981.863,1423.18 981.863,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1309.83,1423.18 1309.83,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1637.79,1423.18 1637.79,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1965.76,1423.18 1965.76,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"2293.72,1423.18 2293.72,1404.28 \"/>\n",
|
||||
"<path clip-path=\"url(#clip070)\" d=\"M328.943 1455.09 L317.138 1473.54 L328.943 1473.54 L328.943 1455.09 M327.716 1451.02 L333.596 1451.02 L333.596 1473.54 L338.526 1473.54 L338.526 1477.43 L333.596 1477.43 L333.596 1485.58 L328.943 1485.58 L328.943 1477.43 L313.341 1477.43 L313.341 1472.92 L327.716 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M644.176 1451.02 L662.533 1451.02 L662.533 1454.96 L648.459 1454.96 L648.459 1463.43 Q649.477 1463.08 650.496 1462.92 Q651.514 1462.73 652.533 1462.73 Q658.32 1462.73 661.699 1465.9 Q665.079 1469.08 665.079 1474.49 Q665.079 1480.07 661.607 1483.17 Q658.135 1486.25 651.815 1486.25 Q649.639 1486.25 647.371 1485.88 Q645.125 1485.51 642.718 1484.77 L642.718 1480.07 Q644.801 1481.2 647.024 1481.76 Q649.246 1482.32 651.723 1482.32 Q655.727 1482.32 658.065 1480.21 Q660.403 1478.1 660.403 1474.49 Q660.403 1470.88 658.065 1468.77 Q655.727 1466.67 651.723 1466.67 Q649.848 1466.67 647.973 1467.08 Q646.121 1467.5 644.176 1468.38 L644.176 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M982.268 1466.44 Q979.12 1466.44 977.268 1468.59 Q975.44 1470.74 975.44 1474.49 Q975.44 1478.22 977.268 1480.39 Q979.12 1482.55 982.268 1482.55 Q985.417 1482.55 987.245 1480.39 Q989.097 1478.22 989.097 1474.49 Q989.097 1470.74 987.245 1468.59 Q985.417 1466.44 982.268 1466.44 M991.551 1451.78 L991.551 1456.04 Q989.791 1455.21 987.986 1454.77 Q986.204 1454.33 984.444 1454.33 Q979.815 1454.33 977.361 1457.45 Q974.93 1460.58 974.583 1466.9 Q975.949 1464.89 978.009 1463.82 Q980.069 1462.73 982.546 1462.73 Q987.754 1462.73 990.764 1465.9 Q993.796 1469.05 993.796 1474.49 Q993.796 1479.82 990.648 1483.03 Q987.5 1486.25 982.268 1486.25 Q976.273 1486.25 973.102 1481.67 Q969.93 1477.06 969.93 1468.33 Q969.93 1460.14 973.819 1455.28 Q977.708 1450.39 984.259 1450.39 Q986.018 1450.39 987.801 1450.74 Q989.606 1451.09 991.551 1451.78 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M1298.72 1451.02 L1320.94 1451.02 L1320.94 1453.01 L1308.39 1485.58 L1303.51 1485.58 L1315.31 1454.96 L1298.72 1454.96 L1298.72 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M1637.79 1469.17 Q1634.46 1469.17 1632.54 1470.95 Q1630.64 1472.73 1630.64 1475.86 Q1630.64 1478.98 1632.54 1480.77 Q1634.46 1482.55 1637.79 1482.55 Q1641.13 1482.55 1643.05 1480.77 Q1644.97 1478.96 1644.97 1475.86 Q1644.97 1472.73 1643.05 1470.95 Q1641.15 1469.17 1637.79 1469.17 M1633.12 1467.18 Q1630.11 1466.44 1628.42 1464.38 Q1626.75 1462.32 1626.75 1459.35 Q1626.75 1455.21 1629.69 1452.8 Q1632.65 1450.39 1637.79 1450.39 Q1642.95 1450.39 1645.89 1452.8 Q1648.83 1455.21 1648.83 1459.35 Q1648.83 1462.32 1647.14 1464.38 Q1645.48 1466.44 1642.49 1467.18 Q1645.87 1467.96 1647.75 1470.26 Q1649.64 1472.55 1649.64 1475.86 Q1649.64 1480.88 1646.57 1483.57 Q1643.51 1486.25 1637.79 1486.25 Q1632.08 1486.25 1629 1483.57 Q1625.94 1480.88 1625.94 1475.86 Q1625.94 1472.55 1627.84 1470.26 Q1629.74 1467.96 1633.12 1467.18 M1631.4 1459.79 Q1631.4 1462.48 1633.07 1463.98 Q1634.76 1465.49 1637.79 1465.49 Q1640.8 1465.49 1642.49 1463.98 Q1644.2 1462.48 1644.2 1459.79 Q1644.2 1457.11 1642.49 1455.6 Q1640.8 1454.1 1637.79 1454.1 Q1634.76 1454.1 1633.07 1455.6 Q1631.4 1457.11 1631.4 1459.79 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M1956.06 1484.86 L1956.06 1480.6 Q1957.82 1481.44 1959.62 1481.88 Q1961.43 1482.32 1963.16 1482.32 Q1967.79 1482.32 1970.23 1479.21 Q1972.68 1476.09 1973.03 1469.75 Q1971.68 1471.74 1969.62 1472.8 Q1967.56 1473.87 1965.06 1473.87 Q1959.88 1473.87 1956.85 1470.74 Q1953.84 1467.59 1953.84 1462.15 Q1953.84 1456.83 1956.98 1453.61 Q1960.13 1450.39 1965.36 1450.39 Q1971.36 1450.39 1974.51 1455 Q1977.68 1459.58 1977.68 1468.33 Q1977.68 1476.51 1973.79 1481.39 Q1969.92 1486.25 1963.37 1486.25 Q1961.61 1486.25 1959.81 1485.9 Q1958 1485.56 1956.06 1484.86 M1965.36 1470.21 Q1968.51 1470.21 1970.34 1468.06 Q1972.19 1465.9 1972.19 1462.15 Q1972.19 1458.43 1970.34 1456.27 Q1968.51 1454.1 1965.36 1454.1 Q1962.22 1454.1 1960.36 1456.27 Q1958.54 1458.43 1958.54 1462.15 Q1958.54 1465.9 1960.36 1468.06 Q1962.22 1470.21 1965.36 1470.21 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M2268.41 1481.64 L2276.05 1481.64 L2276.05 1455.28 L2267.74 1456.95 L2267.74 1452.69 L2276 1451.02 L2280.68 1451.02 L2280.68 1481.64 L2288.32 1481.64 L2288.32 1485.58 L2268.41 1485.58 L2268.41 1481.64 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M2307.76 1454.1 Q2304.15 1454.1 2302.32 1457.66 Q2300.52 1461.2 2300.52 1468.33 Q2300.52 1475.44 2302.32 1479.01 Q2304.15 1482.55 2307.76 1482.55 Q2311.4 1482.55 2313.2 1479.01 Q2315.03 1475.44 2315.03 1468.33 Q2315.03 1461.2 2313.2 1457.66 Line truncated
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,1045.62 2352.76,1045.62 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,749.362 2352.76,749.362 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,453.103 2352.76,453.103 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1423.18 266.9,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1341.88 285.798,1341.88 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1045.62 285.798,1045.62 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,749.362 285.798,749.362 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip070)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,453.103 285.798,453.103 \"/>\n",
|
||||
"<path clip-path=\"url(#clip070)\" d=\"M173.725 1327.68 Q170.113 1327.68 168.285 1331.24 Q166.479 1334.78 166.479 1341.91 Q166.479 1349.02 168.285 1352.59 Q170.113 1356.13 173.725 1356.13 Q177.359 1356.13 179.164 1352.59 Q180.993 1349.02 180.993 1341.91 Q180.993 1334.78 179.164 1331.24 Q177.359 1327.68 173.725 1327.68 M173.725 1323.97 Q179.535 1323.97 182.59 1328.58 Q185.669 1333.16 185.669 1341.91 Q185.669 1350.64 182.59 1355.25 Q179.535 1359.83 173.725 1359.83 Q167.914 1359.83 164.836 1355.25 Q161.78 1350.64 161.78 1341.91 Q161.78 1333.16 164.836 1328.58 Q167.914 1323.97 173.725 1323.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M193.886 1353.28 L198.771 1353.28 L198.771 1359.16 L193.886 1359.16 L193.886 1353.28 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M218.956 1327.68 Q215.345 1327.68 213.516 1331.24 Q211.71 1334.78 211.71 1341.91 Q211.71 1349.02 213.516 1352.59 Q215.345 1356.13 218.956 1356.13 Q222.59 1356.13 224.396 1352.59 Q226.224 1349.02 226.224 1341.91 Q226.224 1334.78 224.396 1331.24 Q222.59 1327.68 218.956 1327.68 M218.956 1323.97 Q224.766 1323.97 227.821 1328.58 Q230.9 1333.16 230.9 1341.91 Q230.9 1350.64 227.821 1355.25 Q224.766 1359.83 218.956 1359.83 Q213.146 1359.83 210.067 1355.25 Q207.011 1350.64 207.011 1341.91 Q207.011 1333.16 210.067 1328.58 Q213.146 1323.97 218.956 1323.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M174.951 1031.42 Q171.34 1031.42 169.512 1034.98 Q167.706 1038.53 167.706 1045.66 Q167.706 1052.76 169.512 1056.33 Q171.34 1059.87 174.951 1059.87 Q178.586 1059.87 180.391 1056.33 Q182.22 1052.76 182.22 1045.66 Q182.22 1038.53 180.391 1034.98 Q178.586 1031.42 174.951 1031.42 M174.951 1027.72 Q180.762 1027.72 183.817 1032.32 Q186.896 1036.91 186.896 1045.66 Q186.896 1054.38 183.817 1058.99 Q180.762 1063.57 174.951 1063.57 Q169.141 1063.57 166.063 1058.99 Q163.007 1054.38 163.007 1045.66 Q163.007 1036.91 166.063 1032.32 Q169.141 1027.72 174.951 1027.72 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M195.113 1057.02 L199.998 1057.02 L199.998 1062.9 L195.113 1062.9 L195.113 1057.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M210.993 1058.97 L218.632 1058.97 L218.632 1032.6 L210.322 1034.27 L210.322 1030.01 L218.585 1028.34 L223.261 1028.34 L223.261 1058.97 L230.9 1058.97 L230.9 1062.9 L210.993 1062.9 L210.993 1058.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M175.322 735.16 Q171.711 735.16 169.882 738.725 Q168.076 742.267 168.076 749.396 Q168.076 756.503 169.882 760.068 Q171.711 763.609 175.322 763.609 Q178.956 763.609 180.762 760.068 Q182.59 756.503 182.59 749.396 Q182.59 742.267 180.762 738.725 Q178.956 735.16 175.322 735.16 M175.322 731.457 Q181.132 731.457 184.187 736.063 Q187.266 740.646 187.266 749.396 Q187.266 758.123 184.187 762.73 Q181.132 767.313 175.322 767.313 Q169.512 767.313 166.433 762.73 Q163.377 758.123 163.377 749.396 Q163.377 740.646 166.433 736.063 Q169.512 731.457 175.322 731.457 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M195.484 760.762 L200.368 760.762 L200.368 766.642 L195.484 766.642 L195.484 760.762 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M214.581 762.707 L230.9 762.707 L230.9 766.642 L208.956 766.642 L208.956 762.707 Q211.618 759.952 216.201 755.322 Q220.808 750.67 221.988 749.327 Q224.234 746.804 225.113 745.068 Q226.016 743.308 226.016 741.619 Q226.016 738.864 224.071 737.128 Q222.15 735.392 219.048 735.392 Q216.849 735.392 214.396 736.156 Q211.965 736.92 209.187 738.471 L209.187 733.748 Q212.011 732.614 214.465 732.035 Q216.919 731.457 218.956 731.457 Q224.326 731.457 227.521 734.142 Q230.715 736.827 230.715 741.318 Q230.715 743.447 229.905 745.369 Q229.118 747.267 227.011 749.859 Q226.433 750.531 223.331 753.748 Q220.229 756.943 214.581 762.707 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M174.373 438.902 Q170.762 438.902 168.933 442.466 Q167.127 446.008 167.127 453.138 Q167.127 460.244 168.933 463.809 Q170.762 467.351 174.373 467.351 Q178.007 467.351 179.812 463.809 Q181.641 460.244 181.641 453.138 Q181.641 446.008 179.812 442.466 Q178.007 438.902 174.373 438.902 M174.373 435.198 Q180.183 435.198 183.238 439.804 Q186.317 444.388 186.317 453.138 Q186.317 461.865 183.238 466.471 Q180.183 471.054 174.373 471.054 Q168.563 471.054 165.484 466.471 Q162.428 461.865 162.428 453.138 Q162.428 444.388 165.484 439.804 Q168.563 435.198 174.373 435.198 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip070)\" d=\"M194.535 464.503 L199.419 464.503 L199.419 470.383 L194.535 470.383 L194.535 464Line truncated
|
||||
"<polyline clip-path=\"url(#clip072)\" style=\"stroke:#009af9; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"325.934,608.39 981.863,1013.91 1637.79,1336.76 2293.72,1368.51 \"/>\n",
|
||||
"<circle clip-path=\"url(#clip072)\" cx=\"325.934\" cy=\"608.39\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip072)\" cx=\"981.863\" cy=\"1013.91\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip072)\" cx=\"1637.79\" cy=\"1336.76\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip072)\" cx=\"2293.72\" cy=\"1368.51\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"</svg>\n"
|
||||
],
|
||||
"text/html": [
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
|
||||
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip120\">\n",
|
||||
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<path clip-path=\"url(#clip120)\" d=\"M0 1600 L2400 1600 L2400 0 L0 0 Z\" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip121\">\n",
|
||||
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<path clip-path=\"url(#clip120)\" d=\"M266.9 1423.18 L2352.76 1423.18 L2352.76 183.952 L266.9 183.952 Z\" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
|
||||
"<defs>\n",
|
||||
" <clipPath id=\"clip122\">\n",
|
||||
" <rect x=\"266\" y=\"183\" width=\"2087\" height=\"1240\"/>\n",
|
||||
" </clipPath>\n",
|
||||
"</defs>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"325.934,1423.18 325.934,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"653.899,1423.18 653.899,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"981.863,1423.18 981.863,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1309.83,1423.18 1309.83,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1637.79,1423.18 1637.79,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"1965.76,1423.18 1965.76,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"2293.72,1423.18 2293.72,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1423.18 2352.76,1423.18 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"325.934,1423.18 325.934,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"653.899,1423.18 653.899,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"981.863,1423.18 981.863,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1309.83,1423.18 1309.83,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1637.79,1423.18 1637.79,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"1965.76,1423.18 1965.76,1404.28 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"2293.72,1423.18 2293.72,1404.28 \"/>\n",
|
||||
"<path clip-path=\"url(#clip120)\" d=\"M328.943 1455.09 L317.138 1473.54 L328.943 1473.54 L328.943 1455.09 M327.716 1451.02 L333.596 1451.02 L333.596 1473.54 L338.526 1473.54 L338.526 1477.43 L333.596 1477.43 L333.596 1485.58 L328.943 1485.58 L328.943 1477.43 L313.341 1477.43 L313.341 1472.92 L327.716 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M644.176 1451.02 L662.533 1451.02 L662.533 1454.96 L648.459 1454.96 L648.459 1463.43 Q649.477 1463.08 650.496 1462.92 Q651.514 1462.73 652.533 1462.73 Q658.32 1462.73 661.699 1465.9 Q665.079 1469.08 665.079 1474.49 Q665.079 1480.07 661.607 1483.17 Q658.135 1486.25 651.815 1486.25 Q649.639 1486.25 647.371 1485.88 Q645.125 1485.51 642.718 1484.77 L642.718 1480.07 Q644.801 1481.2 647.024 1481.76 Q649.246 1482.32 651.723 1482.32 Q655.727 1482.32 658.065 1480.21 Q660.403 1478.1 660.403 1474.49 Q660.403 1470.88 658.065 1468.77 Q655.727 1466.67 651.723 1466.67 Q649.848 1466.67 647.973 1467.08 Q646.121 1467.5 644.176 1468.38 L644.176 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M982.268 1466.44 Q979.12 1466.44 977.268 1468.59 Q975.44 1470.74 975.44 1474.49 Q975.44 1478.22 977.268 1480.39 Q979.12 1482.55 982.268 1482.55 Q985.417 1482.55 987.245 1480.39 Q989.097 1478.22 989.097 1474.49 Q989.097 1470.74 987.245 1468.59 Q985.417 1466.44 982.268 1466.44 M991.551 1451.78 L991.551 1456.04 Q989.791 1455.21 987.986 1454.77 Q986.204 1454.33 984.444 1454.33 Q979.815 1454.33 977.361 1457.45 Q974.93 1460.58 974.583 1466.9 Q975.949 1464.89 978.009 1463.82 Q980.069 1462.73 982.546 1462.73 Q987.754 1462.73 990.764 1465.9 Q993.796 1469.05 993.796 1474.49 Q993.796 1479.82 990.648 1483.03 Q987.5 1486.25 982.268 1486.25 Q976.273 1486.25 973.102 1481.67 Q969.93 1477.06 969.93 1468.33 Q969.93 1460.14 973.819 1455.28 Q977.708 1450.39 984.259 1450.39 Q986.018 1450.39 987.801 1450.74 Q989.606 1451.09 991.551 1451.78 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M1298.72 1451.02 L1320.94 1451.02 L1320.94 1453.01 L1308.39 1485.58 L1303.51 1485.58 L1315.31 1454.96 L1298.72 1454.96 L1298.72 1451.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M1637.79 1469.17 Q1634.46 1469.17 1632.54 1470.95 Q1630.64 1472.73 1630.64 1475.86 Q1630.64 1478.98 1632.54 1480.77 Q1634.46 1482.55 1637.79 1482.55 Q1641.13 1482.55 1643.05 1480.77 Q1644.97 1478.96 1644.97 1475.86 Q1644.97 1472.73 1643.05 1470.95 Q1641.15 1469.17 1637.79 1469.17 M1633.12 1467.18 Q1630.11 1466.44 1628.42 1464.38 Q1626.75 1462.32 1626.75 1459.35 Q1626.75 1455.21 1629.69 1452.8 Q1632.65 1450.39 1637.79 1450.39 Q1642.95 1450.39 1645.89 1452.8 Q1648.83 1455.21 1648.83 1459.35 Q1648.83 1462.32 1647.14 1464.38 Q1645.48 1466.44 1642.49 1467.18 Q1645.87 1467.96 1647.75 1470.26 Q1649.64 1472.55 1649.64 1475.86 Q1649.64 1480.88 1646.57 1483.57 Q1643.51 1486.25 1637.79 1486.25 Q1632.08 1486.25 1629 1483.57 Q1625.94 1480.88 1625.94 1475.86 Q1625.94 1472.55 1627.84 1470.26 Q1629.74 1467.96 1633.12 1467.18 M1631.4 1459.79 Q1631.4 1462.48 1633.07 1463.98 Q1634.76 1465.49 1637.79 1465.49 Q1640.8 1465.49 1642.49 1463.98 Q1644.2 1462.48 1644.2 1459.79 Q1644.2 1457.11 1642.49 1455.6 Q1640.8 1454.1 1637.79 1454.1 Q1634.76 1454.1 1633.07 1455.6 Q1631.4 1457.11 1631.4 1459.79 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M1956.06 1484.86 L1956.06 1480.6 Q1957.82 1481.44 1959.62 1481.88 Q1961.43 1482.32 1963.16 1482.32 Q1967.79 1482.32 1970.23 1479.21 Q1972.68 1476.09 1973.03 1469.75 Q1971.68 1471.74 1969.62 1472.8 Q1967.56 1473.87 1965.06 1473.87 Q1959.88 1473.87 1956.85 1470.74 Q1953.84 1467.59 1953.84 1462.15 Q1953.84 1456.83 1956.98 1453.61 Q1960.13 1450.39 1965.36 1450.39 Q1971.36 1450.39 1974.51 1455 Q1977.68 1459.58 1977.68 1468.33 Q1977.68 1476.51 1973.79 1481.39 Q1969.92 1486.25 1963.37 1486.25 Q1961.61 1486.25 1959.81 1485.9 Q1958 1485.56 1956.06 1484.86 M1965.36 1470.21 Q1968.51 1470.21 1970.34 1468.06 Q1972.19 1465.9 1972.19 1462.15 Q1972.19 1458.43 1970.34 1456.27 Q1968.51 1454.1 1965.36 1454.1 Q1962.22 1454.1 1960.36 1456.27 Q1958.54 1458.43 1958.54 1462.15 Q1958.54 1465.9 1960.36 1468.06 Q1962.22 1470.21 1965.36 1470.21 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M2268.41 1481.64 L2276.05 1481.64 L2276.05 1455.28 L2267.74 1456.95 L2267.74 1452.69 L2276 1451.02 L2280.68 1451.02 L2280.68 1481.64 L2288.32 1481.64 L2288.32 1485.58 L2268.41 1485.58 L2268.41 1481.64 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M2307.76 1454.1 Q2304.15 1454.1 2302.32 1457.66 Q2300.52 1461.2 2300.52 1468.33 Q2300.52 1475.44 2302.32 1479.01 Q2304.15 1482.55 2307.76 1482.55 Q2311.4 1482.55 2313.2 1479.01 Q2315.03 1475.44 2315.03 1468.33 Q2315.03 1461.2 2313.2 1457.66 Line truncated
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,1045.62 2352.76,1045.62 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,749.362 2352.76,749.362 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"266.9,453.103 2352.76,453.103 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1423.18 266.9,183.952 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1341.88 285.798,1341.88 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,1045.62 285.798,1045.62 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,749.362 285.798,749.362 \"/>\n",
|
||||
"<polyline clip-path=\"url(#clip120)\" style=\"stroke:#000000; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"266.9,453.103 285.798,453.103 \"/>\n",
|
||||
"<path clip-path=\"url(#clip120)\" d=\"M173.725 1327.68 Q170.113 1327.68 168.285 1331.24 Q166.479 1334.78 166.479 1341.91 Q166.479 1349.02 168.285 1352.59 Q170.113 1356.13 173.725 1356.13 Q177.359 1356.13 179.164 1352.59 Q180.993 1349.02 180.993 1341.91 Q180.993 1334.78 179.164 1331.24 Q177.359 1327.68 173.725 1327.68 M173.725 1323.97 Q179.535 1323.97 182.59 1328.58 Q185.669 1333.16 185.669 1341.91 Q185.669 1350.64 182.59 1355.25 Q179.535 1359.83 173.725 1359.83 Q167.914 1359.83 164.836 1355.25 Q161.78 1350.64 161.78 1341.91 Q161.78 1333.16 164.836 1328.58 Q167.914 1323.97 173.725 1323.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M193.886 1353.28 L198.771 1353.28 L198.771 1359.16 L193.886 1359.16 L193.886 1353.28 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M218.956 1327.68 Q215.345 1327.68 213.516 1331.24 Q211.71 1334.78 211.71 1341.91 Q211.71 1349.02 213.516 1352.59 Q215.345 1356.13 218.956 1356.13 Q222.59 1356.13 224.396 1352.59 Q226.224 1349.02 226.224 1341.91 Q226.224 1334.78 224.396 1331.24 Q222.59 1327.68 218.956 1327.68 M218.956 1323.97 Q224.766 1323.97 227.821 1328.58 Q230.9 1333.16 230.9 1341.91 Q230.9 1350.64 227.821 1355.25 Q224.766 1359.83 218.956 1359.83 Q213.146 1359.83 210.067 1355.25 Q207.011 1350.64 207.011 1341.91 Q207.011 1333.16 210.067 1328.58 Q213.146 1323.97 218.956 1323.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M174.951 1031.42 Q171.34 1031.42 169.512 1034.98 Q167.706 1038.53 167.706 1045.66 Q167.706 1052.76 169.512 1056.33 Q171.34 1059.87 174.951 1059.87 Q178.586 1059.87 180.391 1056.33 Q182.22 1052.76 182.22 1045.66 Q182.22 1038.53 180.391 1034.98 Q178.586 1031.42 174.951 1031.42 M174.951 1027.72 Q180.762 1027.72 183.817 1032.32 Q186.896 1036.91 186.896 1045.66 Q186.896 1054.38 183.817 1058.99 Q180.762 1063.57 174.951 1063.57 Q169.141 1063.57 166.063 1058.99 Q163.007 1054.38 163.007 1045.66 Q163.007 1036.91 166.063 1032.32 Q169.141 1027.72 174.951 1027.72 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M195.113 1057.02 L199.998 1057.02 L199.998 1062.9 L195.113 1062.9 L195.113 1057.02 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M210.993 1058.97 L218.632 1058.97 L218.632 1032.6 L210.322 1034.27 L210.322 1030.01 L218.585 1028.34 L223.261 1028.34 L223.261 1058.97 L230.9 1058.97 L230.9 1062.9 L210.993 1062.9 L210.993 1058.97 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M175.322 735.16 Q171.711 735.16 169.882 738.725 Q168.076 742.267 168.076 749.396 Q168.076 756.503 169.882 760.068 Q171.711 763.609 175.322 763.609 Q178.956 763.609 180.762 760.068 Q182.59 756.503 182.59 749.396 Q182.59 742.267 180.762 738.725 Q178.956 735.16 175.322 735.16 M175.322 731.457 Q181.132 731.457 184.187 736.063 Q187.266 740.646 187.266 749.396 Q187.266 758.123 184.187 762.73 Q181.132 767.313 175.322 767.313 Q169.512 767.313 166.433 762.73 Q163.377 758.123 163.377 749.396 Q163.377 740.646 166.433 736.063 Q169.512 731.457 175.322 731.457 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M195.484 760.762 L200.368 760.762 L200.368 766.642 L195.484 766.642 L195.484 760.762 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M214.581 762.707 L230.9 762.707 L230.9 766.642 L208.956 766.642 L208.956 762.707 Q211.618 759.952 216.201 755.322 Q220.808 750.67 221.988 749.327 Q224.234 746.804 225.113 745.068 Q226.016 743.308 226.016 741.619 Q226.016 738.864 224.071 737.128 Q222.15 735.392 219.048 735.392 Q216.849 735.392 214.396 736.156 Q211.965 736.92 209.187 738.471 L209.187 733.748 Q212.011 732.614 214.465 732.035 Q216.919 731.457 218.956 731.457 Q224.326 731.457 227.521 734.142 Q230.715 736.827 230.715 741.318 Q230.715 743.447 229.905 745.369 Q229.118 747.267 227.011 749.859 Q226.433 750.531 223.331 753.748 Q220.229 756.943 214.581 762.707 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M174.373 438.902 Q170.762 438.902 168.933 442.466 Q167.127 446.008 167.127 453.138 Q167.127 460.244 168.933 463.809 Q170.762 467.351 174.373 467.351 Q178.007 467.351 179.812 463.809 Q181.641 460.244 181.641 453.138 Q181.641 446.008 179.812 442.466 Q178.007 438.902 174.373 438.902 M174.373 435.198 Q180.183 435.198 183.238 439.804 Q186.317 444.388 186.317 453.138 Q186.317 461.865 183.238 466.471 Q180.183 471.054 174.373 471.054 Q168.563 471.054 165.484 466.471 Q162.428 461.865 162.428 453.138 Q162.428 444.388 165.484 439.804 Q168.563 435.198 174.373 435.198 Z\" fill=\"#000000\" fill-rule=\"nonzero\" fill-opacity=\"1\" /><path clip-path=\"url(#clip120)\" d=\"M194.535 464.503 L199.419 464.503 L199.419 470.383 L194.535 470.383 L194.535 464Line truncated
|
||||
"<polyline clip-path=\"url(#clip122)\" style=\"stroke:#009af9; stroke-linecap:round; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"325.934,608.39 981.863,1013.91 1637.79,1336.76 2293.72,1368.51 \"/>\n",
|
||||
"<circle clip-path=\"url(#clip122)\" cx=\"325.934\" cy=\"608.39\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip122)\" cx=\"981.863\" cy=\"1013.91\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip122)\" cx=\"1637.79\" cy=\"1336.76\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"<circle clip-path=\"url(#clip122)\" cx=\"2293.72\" cy=\"1368.51\" r=\"14.4\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
|
||||
"</svg>\n"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"using Distributed\n",
|
||||
"using RandomMatrix\n",
|
||||
"using Plots\n",
|
||||
"using Statistics\n",
|
||||
"\n",
|
||||
"function generate_rand_connections(city_range, distance_range)\n",
|
||||
" # generate random connections matrix \n",
|
||||
" n_cities = rand(city_range)\n",
|
||||
" matrix = randTriangular(distance_range, n_cities; Diag=false)\n",
|
||||
"\n",
|
||||
" connections = Array{Array{Tuple{Int64,Int64},1},1}(undef, n_cities)\n",
|
||||
" for i in 1:n_cities\n",
|
||||
" connections[i] = Array{Tuple{Int64,Int64},1}(undef, n_cities)\n",
|
||||
"# Generate random matrices\n",
|
||||
"function rand_symmetric_distance_table(n)\n",
|
||||
" threshold = 0.2\n",
|
||||
" mincost = 3\n",
|
||||
" maxcost = 10\n",
|
||||
" infinity = 10000*maxcost\n",
|
||||
" C = fill(infinity,n,n)\n",
|
||||
" for j in 1:n\n",
|
||||
" for i in 1:j\n",
|
||||
" if rand() > threshold\n",
|
||||
" C[i,j] = rand(mincost:maxcost)\n",
|
||||
" C[j,i] = C[i,j]\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" C[j,j] = 0\n",
|
||||
" end\n",
|
||||
" for i in 1:n_cities\n",
|
||||
" for j in i:n_cities\n",
|
||||
" distance = matrix[i,j]\n",
|
||||
" connections[i][j] = (j,distance)\n",
|
||||
" connections[j][i] = (i,distance)\n",
|
||||
" C,infinity\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"# Sort to get ascending distance weights\n",
|
||||
"function sort_neighbors(C)\n",
|
||||
" n = size(C,1)\n",
|
||||
" map(1:n) do i\n",
|
||||
" Ci = C[i,:]\n",
|
||||
" cities = sortperm(Ci)\n",
|
||||
" distances = Ci[cities]\n",
|
||||
" collect(zip(cities,distances))[2:end]\n",
|
||||
" end\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"n_cities = [4, 6, 8, 10]\n",
|
||||
"n_rep = 10\n",
|
||||
"city = 1\n",
|
||||
"node_count_serial = zeros(Union{Missing,Int64},length(n_cities), n_rep)\n",
|
||||
"node_count_dist = zeros(Union{Missing,Int64},length(n_cities), n_rep)\n",
|
||||
"for (i, n) in enumerate(n_cities)\n",
|
||||
" @show n\n",
|
||||
" for j in 1:n_rep\n",
|
||||
" # Generate random connections matrix\n",
|
||||
" C, inf = rand_symmetric_distance_table(n)\n",
|
||||
" C = sort_neighbors(C)\n",
|
||||
" # Run serial algorithm\n",
|
||||
" path, distance, ncount_serial = tsp_serial(C, city)\n",
|
||||
" # Check if graph is connected \n",
|
||||
" if distance >= inf\n",
|
||||
" println(\"The input graph size $n, it $j is not connected\")\n",
|
||||
" node_count_serial[i,j] = missing\n",
|
||||
" node_count_dist[i,j] = missing\n",
|
||||
" else\n",
|
||||
" path, distance, ncount_dist = tsp_dist(C, city)\n",
|
||||
" node_count_serial[i,j] = ncount_serial\n",
|
||||
" node_count_dist[i,j] = ncount_dist\n",
|
||||
" end\n",
|
||||
" end\n",
|
||||
" return connections\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"# Run once so compile times are not measured\n",
|
||||
"distance_range = 1:100\n",
|
||||
"connections = generate_rand_connections(4:4, distance_range)\n",
|
||||
"tsp_dist(connections,1)\n",
|
||||
"tsp_serial(connections,1)\n",
|
||||
"# Calculate average and confidence interval\n",
|
||||
"search_overhead_perc = (node_count_dist .- node_count_serial)./node_count_serial\n",
|
||||
"avg_search_overhead = [mean(skipmissing(search_overhead_perc[i,:])) for i in axes(search_overhead_perc,1)]\n",
|
||||
"conf_int = [1.96*std(skipmissing(search_overhead_perc[i,:]))/\n",
|
||||
" sqrt(count(!ismissing,search_overhead_perc[i,:])) \n",
|
||||
" for i in axes(search_overhead_perc,1)]\n",
|
||||
"\n",
|
||||
"# Measure runtimes of serial and parallel algorithm\n",
|
||||
"n_it = 5\n",
|
||||
"city_ranges = [4:4, 6:6, 8:8, 10:10]\n",
|
||||
"search_overhead = zeros(Float64, length(city_ranges), n_it )\n",
|
||||
"for (i, n) in enumerate(city_ranges)\n",
|
||||
" for k in 1:n_it\n",
|
||||
" connections = generate_rand_connections(n, distance_range)\n",
|
||||
" @show n, k\n",
|
||||
" path_dist, distance_dist, search_time_dist, wait_time_dist = tsp_dist(connections,1)\n",
|
||||
" path_serial, distance_serial, search_time_serial = tsp_serial(connections,1)\n",
|
||||
" # Compute search overhead as difference between distributed program and serial program\n",
|
||||
" # (without time spent communicating or waiting)\n",
|
||||
" search_overhead[i, k] = search_time_dist - wait_time_dist - search_time_serial\n",
|
||||
" end\n",
|
||||
"end\n",
|
||||
"\n",
|
||||
"min_search_oh = minimum(search_overhead, dims=2)\n",
|
||||
"city_sizes = [4,6,8,10]\n",
|
||||
"plot(city_sizes, min_search_oh, yaxis=:log, seriestype=:scatter,legend=false)\n",
|
||||
"plot!(city_sizes, min_search_oh, yaxis=:log, legend=false)\n",
|
||||
"\n",
|
||||
"xlabel!(\"Number of cities\")\n",
|
||||
"ylabel!(\"Search overhead (s)\")\n",
|
||||
"title!(\"Minimum search overhead for different problem sizes\")"
|
||||
"# Plot\n",
|
||||
"plot(n_cities, avg_search_overhead, ribbon=conf_int, markershape=:circle, legend=false)\n",
|
||||
"title!(\"Average search overhead (%) and 95%-CI \\nin parallel algorithm\")\n",
|
||||
"ylabel!(\"Average % extra nodes visited \\n in parallel algorithm\")\n",
|
||||
"xlabel!(\"Number of cities\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../asp/">« ASP</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../asp/">« ASP</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -18,4 +18,4 @@
|
||||
var myIframe = document.getElementById("notebook");
|
||||
iFrameResize({log:true}, myIframe);
|
||||
});
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
</script></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
||||
@@ -1,2 +1,2 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · XM_40017</title><script data-outdated-warner src="../assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/search/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/><script src="../assets/iframeResizer.min.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">XM_40017</a></span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="../notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="../notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="../notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="../notebooks/mpi_tutorial/">MPI</a></li><li><a class="tocitem" href="../notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="../notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="../notebooks/asp/">ASP</a></li><li><a class="tocitem" href="../notebooks/solutions/">Solutions</a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Wednesday 23 August 2023 07:04">Wednesday 23 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div>Line truncated
|
||||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · XM_40017</title><script data-outdated-warner src="../assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/search/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/><script src="../assets/iframeResizer.min.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">XM_40017</a></span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="../notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="../notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="../notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="../notebooks/mpi_tutorial/">MPI</a></li><li><a class="tocitem" href="../notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="../notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="../notebooks/asp/">ASP</a></li><li><a class="tocitem" href="../notebooks/solutions/">Solutions</a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 24 August 2023 14:59">Thursday 24 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></Line truncated
|
||||
Reference in new issue
Block a user