<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simulation Helpdesk</title>
	<atom:link href="https://simulationhelpdesk.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://simulationhelpdesk.com</link>
	<description>Platform for simulation modeling experts and users to learn earn and collaborate.</description>
	<lastBuildDate>Tue, 22 Nov 2022 05:40:25 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://simulationhelpdesk.com/wp-content/uploads/2022/07/cropped-SIMULATION-LOGO_FA_VERTICAL_FOR-WEB-32x32.png</url>
	<title>Simulation Helpdesk</title>
	<link>https://simulationhelpdesk.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Disease spread simulation with the abm_framework in Python</title>
		<link>https://simulationhelpdesk.com/disease-spread-simulation-with-the-abm_framework-in-python/</link>
					<comments>https://simulationhelpdesk.com/disease-spread-simulation-with-the-abm_framework-in-python/#respond</comments>
		
		<dc:creator><![CDATA[Linnart Felkl]]></dc:creator>
		<pubDate>Tue, 22 Nov 2022 05:40:25 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[abm]]></category>
		<category><![CDATA[agent-based modeling]]></category>
		<category><![CDATA[agent-based simulation]]></category>
		<category><![CDATA[disease spread]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[simulation]]></category>
		<guid isPermaLink="false">https://simulationhelpdesk.com/?p=6440</guid>

					<description><![CDATA[<p>This article was first posted in its original version in October 2022 on SCDA. Read the original version <a data-mce-href="https://www.supplychaindataanalytics.com/agent-based-sir-model-python-example/" href="https://www.supplychaindataanalytics.com/agent-based-sir-model-python-example/">here</a>. In this article I demonstrate the application of agent-based modeling in Python. I show readers how to apply agent-based simulation to disease spread simulation. I use the abm_framework for implementing an exemplary simulation experiment.</p>]]></description>
										<content:encoded><![CDATA[<p>This article was originally posted on SCDA by Linnart Felkl, in October 2022. <strong><a data-mce-href="https://www.supplychaindataanalytics.com/agent-based-sir-model-python-example/" href="https://www.supplychaindataanalytics.com/agent-based-sir-model-python-example/">Here</a> </strong>is the original version.</p>
<p style="margin: 0px 0px 1.5em;font-family: Roboto, serif;font-size: 17px" data-mce-style="margin: 0px 0px 1.5em; font-family: Roboto, serif; font-size: 17px;">In this article I implement a SIR model in Python, using a library that I developed for agent-based modeling in Python. In other words, I use an existing framework to implement an agent-based SIR model.</p>
<h2 style="font-family: Poppins, sans-serif;line-height: 1.1;margin-top: 20px;margin-bottom: 10px;font-size: 30px;clear: both" data-mce-style="font-family: Poppins, sans-serif; line-height: 1.1; margin-top: 20px; margin-bottom: 10px; font-size: 30px; clear: both;">Introducing agent-based SIR model</h2>
<p style="margin: 0px 0px 1.5em;font-family: Roboto, serif;font-size: 17px" data-mce-style="margin: 0px 0px 1.5em; font-family: Roboto, serif; font-size: 17px;">SIR stands for <strong>susceptible</strong>, <strong>infected</strong>, and <strong>recovered</strong>. As illustrated in below figure, in a SIR model, agents can experience the following state transitions: From susceptible to infected, from infected to recovered, and from recovered to susceptible.</p>
<div class="wp-block-image" style="margin: 20px 0px;font-family: Roboto, serif;font-size: 17px" data-mce-style="margin: 20px 0px; font-family: Roboto, serif; font-size: 17px;">
<figure class="aligncenter size-full" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img fetchpriority="high" decoding="async" width="628" height="221" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-26.png?resize=628%2C221&amp;ssl=1" alt="general sir model" class="wp-image-8897 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-26.png?resize=628%2C221&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">The state transitions illustrated in above figure are usually implemented with a random distribution and some specified probability. Furthermore, you do no have to allow for all state transitions. In this article I, for example, will not allow agents to fall back from their recovered state to a susceptible state. Below is the SIR model implemented in this article.</p>
<div class="google-auto-placed ap_container" style="width: 866.625px;height: auto;clear: both;text-align: center" data-mce-style="width: 866.625px; height: auto; clear: both; text-align: center;">
<p></p>
<div id="aswift_2_host" title="Advertisement" aria-label="Advertisement" style="border: none;height: 280px;width: 867px;margin: 0px;padding: 0px;background-color: transparent;overflow: visible" data-mce-style="border: none; height: 280px; width: 867px; margin: 0px; padding: 0px; background-color: transparent; overflow: visible;"></div>
<p></p>
</div>
<div class="wp-block-image" style="margin: 20px 0px;font-family: Roboto, serif;font-size: 17px;font-style: normal;font-weight: 400;letter-spacing: normal;text-align: start;text-indent: 0px;text-transform: none" data-mce-style="margin: 20px 0px; font-family: Roboto, serif; font-size: 17px; font-style: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none;">
<figure class="aligncenter size-full" style="margin: 0px auto;clear: both;text-align: center" data-mce-style="margin: 0px auto; clear: both; text-align: center;"><img decoding="async" width="640" height="220" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-22.png?resize=640%2C220&amp;ssl=1" alt="sir model used for this article´s agent-based sir model" class="wp-image-8888 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" data-recalc-dims="1" data-lazy-loaded="1" style="height: auto;max-width: 100%;border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-22.png?resize=640%2C220&amp;ssl=1" data-mce-style="height: auto; max-width: 100%; border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">In the same way you could also formulate a SIR model in which you allow for fall back from recovered state to infected state, not just the susceptible state.</p>
<h2 style="font-family: Poppins, sans-serif;line-height: 1.1;margin-top: 20px;margin-bottom: 10px;font-size: 30px;clear: both" data-mce-style="font-family: Poppins, sans-serif; line-height: 1.1; margin-top: 20px; margin-bottom: 10px; font-size: 30px; clear: both;">Agent-based modeling framework in Python</h2>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">I created a framework for agent-based modeling. The framework is meant to be expanded and upgraded over time. It currently supports a setup that allows agents, simulation environment and populations to be placed in a grid-based model. Simulation results can be written into a SQLite database in standardized format, and visualizations and animations are generated based on the data stored in that database. The framework comes in the form of several Python files (modules) that can be editted to add custom functionality.</p>
<div class="wp-block-image" style="margin: 20px 0px" data-mce-style="margin: 20px 0px;">
<figure class="aligncenter size-full" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img decoding="async" width="640" height="390" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-23.png?resize=640%2C390&amp;ssl=1" alt="framework for agent-based sir model" class="wp-image-8890 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-23.png?resize=640%2C390&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">If you want to check out the framework you can follow it on <strong>GitHub</strong>. Here is the link:</p>
<ul style="margin: 0px 0px 15px 15px;padding-left: 0px" data-mce-style="margin: 0px 0px 15px 15px; padding-left: 0px;">
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><a href="https://github.com/LinnartSF/abm_framework" style="background-color: transparent" data-mce-href="https://github.com/LinnartSF/abm_framework" data-mce-style="background-color: transparent;"><em>Github repo: abm_framework</em></a></li>
</ul>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">The special thing to note here is that the framework supports grid-based agent-based modeling. Agents interact in a 2D grid. This 2D grid facilitates the simulation environment. One or several agents can be located in the same cell, depending on model settings. Agents can interact with other agents within a specified neighbourhood. In this article ineractions refer to disease transfer, resulting in disease spread.</p>
<div class="wp-block-image" style="margin: 20px 0px" data-mce-style="margin: 20px 0px;">
<figure class="aligncenter size-full" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img loading="lazy" decoding="async" width="640" height="425" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-24.png?resize=640%2C425&amp;ssl=1" alt="grid for this article´s agent-based sir model" class="wp-image-8892 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-24.png?resize=640%2C425&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Agents have attributes and functionality, represented by inner dynamics, variables and states. The inner workings of an agent affects its actions, decisions and interactions with other agents. Those interactions can be influenced by the interaction environment, too.</p>
<div class="wp-block-image" style="margin: 20px 0px" data-mce-style="margin: 20px 0px;">
<figure class="aligncenter size-full" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img loading="lazy" decoding="async" width="640" height="343" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-25.png?resize=640%2C343&amp;ssl=1" alt="" class="wp-image-8893 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/image-25.png?resize=640%2C343&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
</div>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">I will now proceed by documenting relevant ABM model implementation in Python.</p>
<h2 style="font-family: Poppins, sans-serif;line-height: 1.1;margin-top: 20px;margin-bottom: 10px;font-size: 30px;clear: both" data-mce-style="font-family: Poppins, sans-serif; line-height: 1.1; margin-top: 20px; margin-bottom: 10px; font-size: 30px; clear: both;">Implementing the agent-based SIR model in Python</h2>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">In below code I make use of the agent-based modeling framework. I set up a simulation run that lasts for 300 iterations. The probability of susceptible agents being infected is 7%, for every encounter with an infected agent. For every iteration an infected agent, on the other hand, has a 3% probability of recovering.</p>
<pre class="wp-block-code language-python"><code lang="python" class="language-python" style="font-family: inherit;font-size: inherit;padding: 0px;background-color: inherit;border-radius: 0px;background-image: none;line-height: inherit;font-weight: inherit;font-style: inherit;letter-spacing: inherit;border: none" data-mce-style="font-family: inherit; font-size: inherit; padding: 0px; background-color: inherit; border-radius: 0px; background-image: none; line-height: inherit; font-weight: inherit; font-style: inherit; letter-spacing: inherit; border: none;">__author__ <span class="token operator">=</span> <span class="token string">"Linnart Felkl"</span>
__email__ <span class="token operator">=</span> <span class="token string">"LinnartSF@gmail.com"</span>

<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">"__main__"</span><span class="token punctuation">:</span>

    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"demo starts"</span><span class="token punctuation">)</span>

    <span class="token keyword">import</span> sys
    <span class="token keyword">from</span> pathlib <span class="token keyword">import</span> Path
    <span class="token builtin">file</span> <span class="token operator">=</span> Path<span class="token punctuation">(</span>__file__<span class="token punctuation">)</span><span class="token punctuation">.</span>resolve<span class="token punctuation">(</span><span class="token punctuation">)</span>
    parent<span class="token punctuation">,</span> root <span class="token operator">=</span> <span class="token builtin">file</span><span class="token punctuation">.</span>parent<span class="token punctuation">,</span> <span class="token builtin">file</span><span class="token punctuation">.</span>parents<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>
    sys<span class="token punctuation">.</span>path<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token builtin">str</span><span class="token punctuation">(</span>root<span class="token punctuation">)</span><span class="token punctuation">)</span>

    <span class="token comment"># remove the current file's directory from sys.path, unless already removed</span>
    <span class="token keyword">try</span><span class="token punctuation">:</span>
        sys<span class="token punctuation">.</span>path<span class="token punctuation">.</span>remove<span class="token punctuation">(</span><span class="token builtin">str</span><span class="token punctuation">(</span>parent<span class="token punctuation">)</span><span class="token punctuation">)</span>
    <span class="token keyword">except</span> ValueError<span class="token punctuation">:</span>
        <span class="token keyword">pass</span>

    <span class="token keyword">import</span> data
    <span class="token keyword">import</span> stats
    <span class="token keyword">import</span> config
    <span class="token keyword">import</span> framework
    <span class="token keyword">import</span> random
    <span class="token keyword">import</span> animation

    <span class="token comment"># setup database manager and connection</span>
    db <span class="token operator">=</span> data<span class="token punctuation">.</span>Database<span class="token punctuation">(</span><span class="token string">"sqlite3"</span><span class="token punctuation">,</span> config<span class="token punctuation">.</span>path_databasefile<span class="token punctuation">)</span>
    db_manager <span class="token operator">=</span> data<span class="token punctuation">.</span>Manager<span class="token punctuation">(</span>db<span class="token punctuation">)</span>

    <span class="token comment"># create an empty environment</span>
    env <span class="token operator">=</span> framework<span class="token punctuation">.</span>Environment<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> db_manager<span class="token punctuation">)</span> <span class="token comment"># Environment constructor implicitly resets environment table in database</span>

    <span class="token comment"># create initial population of healthy humans</span>
    pops <span class="token operator">=</span> framework<span class="token punctuation">.</span>Populations<span class="token punctuation">(</span>amount <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> env <span class="token operator">=</span> env<span class="token punctuation">,</span> db_manager <span class="token operator">=</span> db_manager<span class="token punctuation">,</span> attributes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"infected"</span><span class="token punctuation">,</span><span class="token string">"recovered"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> datatypes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"INTEGER"</span><span class="token punctuation">,</span><span class="token string">"INTEGER"</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    pops<span class="token punctuation">.</span>add_population<span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">"humans"</span><span class="token punctuation">,</span> 
                        size <span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">,</span> 
                        attributes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"infected"</span><span class="token punctuation">,</span><span class="token string">"recovered"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> 
                        datatypes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"INTEGER"</span><span class="token punctuation">,</span><span class="token string">"INTEGER"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> 
                        initialvals <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>
                        <span class="token punctuation">)</span>

    <span class="token comment"># randomly infect 5%</span>
    pop <span class="token operator">=</span> pops<span class="token punctuation">.</span>Populations<span class="token punctuation">[</span><span class="token string">"humans"</span><span class="token punctuation">]</span>
    sampleagents <span class="token operator">=</span> pop<span class="token punctuation">.</span>get_agents<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">(</span><span class="token number">0.05</span><span class="token operator">*</span>pop<span class="token punctuation">.</span>Size<span class="token punctuation">)</span><span class="token punctuation">)</span>
    <span class="token keyword">for</span> agent <span class="token keyword">in</span> sampleagents<span class="token punctuation">:</span> agent<span class="token punctuation">.</span>Attributes<span class="token punctuation">[</span><span class="token string">"infected"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span>

    _prob_infection <span class="token operator">=</span> <span class="token number">0.07</span>
    _prob_recovery <span class="token operator">=</span> <span class="token number">0.03</span>
    
    <span class="token comment"># setup simulation</span>
    sim <span class="token operator">=</span> framework<span class="token punctuation">.</span>Simulation<span class="token punctuation">(</span><span class="token number">300</span><span class="token punctuation">)</span>

    <span class="token comment"># make sure that environment and agents tables in database are setup at this time</span>
    pops<span class="token punctuation">.</span>write_env_to_db<span class="token punctuation">(</span>sim<span class="token punctuation">.</span>Iteration<span class="token punctuation">)</span>
    pops<span class="token punctuation">.</span>write_agents_to_db<span class="token punctuation">(</span>sim<span class="token punctuation">.</span>Iteration<span class="token punctuation">)</span>

    <span class="token comment"># execute simulation run, store every 10th run into the database</span>
    <span class="token keyword">while</span> sim<span class="token punctuation">.</span>run<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>

        <span class="token comment"># look at every agent</span>
        <span class="token keyword">for</span> agent <span class="token keyword">in</span> pop<span class="token punctuation">.</span>get_agents<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
            <span class="token keyword">if</span> agent<span class="token punctuation">.</span>get_attr_value<span class="token punctuation">(</span><span class="token string">"infected"</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span>
                
                neighbours <span class="token operator">=</span> env<span class="token punctuation">.</span>get_neighbourhood<span class="token punctuation">(</span>agent<span class="token punctuation">)</span>
                <span class="token keyword">for</span> neighbour <span class="token keyword">in</span> neighbours<span class="token punctuation">:</span>
                    <span class="token keyword">if</span> neighbour<span class="token punctuation">.</span>get_attr_value<span class="token punctuation">(</span><span class="token string">"infected"</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token keyword">and</span> neighbour<span class="token punctuation">.</span>get_attr_value<span class="token punctuation">(</span><span class="token string">"recovered"</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span>
                        
                        <span class="token comment"># this neighbour is not resistant and not infected; infect with specified probability</span>
                        <span class="token keyword">if</span> random<span class="token punctuation">.</span>uniform<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> _prob_infection<span class="token punctuation">:</span> neighbour<span class="token punctuation">.</span>set_attr_value<span class="token punctuation">(</span><span class="token string">"infected"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span>
            
                <span class="token comment"># the infected agent recovers with a specified probability</span>
                <span class="token keyword">if</span> random<span class="token punctuation">.</span>uniform<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> _prob_recovery<span class="token punctuation">:</span> 
                    agent<span class="token punctuation">.</span>set_attr_value<span class="token punctuation">(</span><span class="token string">"recovered"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span>
                    agent<span class="token punctuation">.</span>set_attr_value<span class="token punctuation">(</span><span class="token string">"infected"</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span>
                
        <span class="token comment"># update results in database, for agents and for environment</span>
        pops<span class="token punctuation">.</span>write_agents_to_db<span class="token punctuation">(</span>sim<span class="token punctuation">.</span>Iteration<span class="token punctuation">)</span>
        pops<span class="token punctuation">.</span>write_env_to_db<span class="token punctuation">(</span>sim<span class="token punctuation">.</span>Iteration<span class="token punctuation">)</span>
        pops<span class="token punctuation">.</span>write_density_to_db<span class="token punctuation">(</span>sim<span class="token punctuation">.</span>Iteration<span class="token punctuation">)</span>

    <span class="token comment"># get dataframes with simulation results </span>
    humans_df <span class="token operator">=</span> db_manager<span class="token punctuation">.</span>get_populationdf<span class="token punctuation">(</span>pop <span class="token operator">=</span> <span class="token string">"humans"</span><span class="token punctuation">)</span>
    env_df <span class="token operator">=</span> db_manager<span class="token punctuation">.</span>get_environmentdf<span class="token punctuation">(</span><span class="token punctuation">)</span>
    density_df <span class="token operator">=</span> db_manager<span class="token punctuation">.</span>get_densitydf<span class="token punctuation">(</span><span class="token punctuation">)</span>
    
    <span class="token comment"># visualize simulation data</span>
    stats<span class="token punctuation">.</span>set_fontsizes<span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">12</span><span class="token punctuation">)</span>

    stats<span class="token punctuation">.</span>plot_agentattr_lines<span class="token punctuation">(</span><span class="token string">"infected"</span><span class="token punctuation">,</span> humans_df<span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"infection_curves"</span><span class="token punctuation">)</span>
    
    stats<span class="token punctuation">.</span>plot_agentattr_lines<span class="token punctuation">(</span><span class="token string">"recovered"</span><span class="token punctuation">,</span> humans_df<span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"recovery_curves"</span><span class="token punctuation">)</span>

    stats<span class="token punctuation">.</span>plot_grid_occupation<span class="token punctuation">(</span>env_df<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"humans"</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"human_locations"</span><span class="token punctuation">)</span>

    stats<span class="token punctuation">.</span>plot_density_markersize<span class="token punctuation">(</span>density_df<span class="token punctuation">,</span> <span class="token string">"infected"</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token string">"red"</span><span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"infection_density"</span><span class="token punctuation">)</span>

    stats<span class="token punctuation">.</span>plot_density_markersize<span class="token punctuation">(</span>density_df<span class="token punctuation">,</span> <span class="token string">"recovered"</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token string">"green"</span><span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"recovery_density"</span><span class="token punctuation">)</span>

    stats<span class="token punctuation">.</span>plot_avgattr_lines<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">"infected"</span><span class="token punctuation">,</span><span class="token string">"recovered"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> humans_df<span class="token punctuation">)</span>
    stats<span class="token punctuation">.</span>save_plot<span class="token punctuation">(</span><span class="token string">"avginfectedavgrecovered"</span><span class="token punctuation">)</span>

    <span class="token comment"># create and save animations</span>
    animation<span class="token punctuation">.</span>animate_density<span class="token punctuation">(</span>
        df <span class="token operator">=</span> density_df<span class="token punctuation">,</span>
        filename <span class="token operator">=</span> <span class="token string">"infectionanimation"</span><span class="token punctuation">,</span>
        attr <span class="token operator">=</span> <span class="token string">"infected"</span><span class="token punctuation">,</span>
        defaultsize <span class="token operator">=</span> <span class="token number">50</span><span class="token punctuation">,</span>
        color <span class="token operator">=</span> <span class="token string">"red"</span><span class="token punctuation">,</span>
        tpf <span class="token operator">=</span> <span class="token number">0.05</span>
    <span class="token punctuation">)</span>

    animation<span class="token punctuation">.</span>animate_density<span class="token punctuation">(</span>
        df <span class="token operator">=</span> density_df<span class="token punctuation">,</span>
        filename <span class="token operator">=</span> <span class="token string">"recoveryanimation"</span><span class="token punctuation">,</span>
        attr <span class="token operator">=</span> <span class="token string">"recovered"</span><span class="token punctuation">,</span>
        defaultsize <span class="token operator">=</span> <span class="token number">50</span><span class="token punctuation">,</span>
        color <span class="token operator">=</span> <span class="token string">"green"</span><span class="token punctuation">,</span>
        tpf <span class="token operator">=</span> <span class="token number">0.05</span>
    <span class="token punctuation">)</span>

    <span class="token comment"># end program</span>
    db<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"demo ends"</span><span class="token punctuation">)</span></code></pre>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Above agent-based SIR model implementation generates results that are stored in a SQLite database. This database is then lateron used for visualizations. These visualizations can be implemented in a separate script, by another analyst, and at a different point in time. I.e. model execution and data visualization are two separate activities that are decoupled by the database.</p>
<h2 style="font-family: Poppins, sans-serif;line-height: 1.1;margin-top: 20px;margin-bottom: 10px;font-size: 30px;clear: both" data-mce-style="font-family: Poppins, sans-serif; line-height: 1.1; margin-top: 20px; margin-bottom: 10px; font-size: 30px; clear: both;">Agent-based SIR model simulation results</h2>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">I can now finally review the results that were generated by the grid-based agent-based SIR model. Below is a visualization of agent locations throughout this simulation run.</p>
<div class="wp-block-image is-style-default" style="margin: 20px 0px" data-mce-style="margin: 20px 0px;">
<figure class="aligncenter size-full is-resized" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img loading="lazy" decoding="async" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/human_locations.png?resize=640%2C480&amp;ssl=1" alt="" class="wp-image-8894 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" width="640" height="480" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/human_locations.png?resize=640%2C480&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Below animation shows which agents were infected throughout time. The animation furthermore shows agent locations. In this simple example the agent locations are static.</p>
<figure class="wp-block-video aligncenter" style="margin: 0px 0px 20px;clear: both;text-align: center" data-mce-style="margin: 0px 0px 20px; clear: both; text-align: center;"><video autoplay="autoplay" controls="controls" loop="loop" muted="" src="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/infectionspread-1.mp4" style="vertical-align: baseline;width: 866.625px" data-mce-src="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/infectionspread-1.mp4" data-mce-style="vertical-align: baseline; width: 866.625px;"></video></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Next, an animation of agent recovery throughout simulation time.</p>
<figure class="wp-block-video aligncenter" style="margin: 0px 0px 20px;clear: both;text-align: center" data-mce-style="margin: 0px 0px 20px; clear: both; text-align: center;"><video autoplay="autoplay" controls="controls" loop="loop" muted="" src="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/recoveryspread.mp4" style="vertical-align: baseline;width: 866.625px" data-mce-src="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/recoveryspread.mp4" data-mce-style="vertical-align: baseline; width: 866.625px;"></video></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Below chart visualizes the mean likelihood of an agent being infected or recovered, at the given simulation time.</p>
<div class="wp-block-image" style="margin: 20px 0px" data-mce-style="margin: 20px 0px;">
<figure class="aligncenter size-full is-resized" style="margin-top: 0px;margin-bottom: 0px;clear: both;text-align: center" data-mce-style="margin-top: 0px; margin-bottom: 0px; clear: both; text-align: center;"><img loading="lazy" decoding="async" src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/avginfectedavgrecovered.png?resize=640%2C480&amp;ssl=1" alt="" class="wp-image-8920 jetpack-lazy-image jetpack-lazy-image--handled aligncenter" width="640" height="480" data-recalc-dims="1" data-lazy-loaded="1" style="border: 0px;vertical-align: bottom" data-mce-src="https://i0.wp.com/www.supplychaindataanalytics.com/wp-content/uploads/2022/10/avginfectedavgrecovered.png?resize=640%2C480&amp;ssl=1" data-mce-style="border: 0px; vertical-align: bottom;"></figure>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Agent recovery ensures that not all agents are infected. However, agents in this model have static locations. In another simulation run we could allow for dynamic agent locations, or even some sort of diffusion / migration. This would most likely increase the total amount of agents that are infected throughout the simulation run.</p>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">The agent-based modeling framework applied in this article can deliver additional charts. Moreover, the simulation results remain stored in a SQLite database that could be analyzed in any custom way. This would however require some additional customization/adaption, i.e. coding.</p>
<h2 style="font-family: Poppins, sans-serif;line-height: 1.1;margin-top: 20px;margin-bottom: 10px;font-size: 30px;clear: both" data-mce-style="font-family: Poppins, sans-serif; line-height: 1.1; margin-top: 20px; margin-bottom: 10px; font-size: 30px; clear: both;">Final remarks and related content</h2>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Agent-based simulation is a simulation method that seeks to explain of complex macroscopic system behaviour by describing agent dynamics and interactions on the microscopic system level. It is a method that is rather abstract and is often used to understand complex systems. Complex systems are, well, more complex than complicated systems, and, on the other hand, less complex than chaotic systems. The US economcy, visible on the macroscopic level in the form of e.g. gross-domestic product, is one example of a complex system. Agent-based models can e.g. be used to understand the emergence of certain phenomena and trends in US economcy.</p>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">In this article I implemented a recently very popular model for disease spread. This is in fact another interesting area in which agent-based modeling is frequently applied. Using a framework for agent-based modeling I implemented an agent-based SIR model. The framework’s visualization and animation capabilities were used to review simulation results. The framework itself can be used to implement other types of agent-based simulation models – and the framework will be upgraded and regularly expanded over time.</p>
<p style="margin: 0px 0px 1.5em" data-mce-style="margin: 0px 0px 1.5em;">Here are some other SCDA related to agent-based simulation:</p>
<ul style="margin: 0px 0px 15px 15px;padding-left: 0px" data-mce-style="margin: 0px 0px 15px 15px; padding-left: 0px;">
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><strong>Link</strong>: <strong><em><a href="https://www.supplychaindataanalytics.com/simulation-methods-for-scm-analysts/" style="background-color: transparent" data-mce-href="https://www.supplychaindataanalytics.com/simulation-methods-for-scm-analysts/" data-mce-style="background-color: transparent;">Simulation methods for SCM analysts</a></em></strong></li>
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><strong>Link</strong>: <strong><a href="https://www.supplychaindataanalytics.com/a-simple-agent-based-simulation-run-visualized-using-matplotlib-in-python/" style="background-color: transparent" data-mce-href="https://www.supplychaindataanalytics.com/a-simple-agent-based-simulation-run-visualized-using-matplotlib-in-python/" data-mce-style="background-color: transparent;"><em>A simple agent-based simulation run visualized using Matplotlib in Python</em></a></strong></li>
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><strong>Link</strong>:<em> <strong><a href="https://www.supplychaindataanalytics.com/agent-based-modeling-in-python/" style="background-color: transparent" data-mce-href="https://www.supplychaindataanalytics.com/agent-based-modeling-in-python/" data-mce-style="background-color: transparent;">Agent-based modeling in Python</a></strong></em></li>
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><strong>Link</strong>: <strong><a href="https://www.supplychaindataanalytics.com/developing-a-simple-agent-based-simulation-model-in-python/" style="background-color: transparent" data-mce-href="https://www.supplychaindataanalytics.com/developing-a-simple-agent-based-simulation-model-in-python/" data-mce-style="background-color: transparent;"><em>Developing a simple agent-based simulation model in Python</em></a></strong></li>
<li style="list-style-type: disc;padding-bottom: 5px;padding-top: 5px" data-mce-style="list-style-type: disc; padding-bottom: 5px; padding-top: 5px;"><strong>Link</strong>: <strong><a href="https://www.supplychaindataanalytics.com/visualizing-2d-grids-and-arrays-using-matplotlib-in-python/" style="background-color: transparent" data-mce-href="https://www.supplychaindataanalytics.com/visualizing-2d-grids-and-arrays-using-matplotlib-in-python/" data-mce-style="background-color: transparent;"><em>Visualizing 2D grids and arrays using Matplotlib in Python</em></a></strong></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://simulationhelpdesk.com/disease-spread-simulation-with-the-abm_framework-in-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/infectionspread-1.mp4" length="22036" type="video/mp4" />
<enclosure url="https://www.supplychaindataanalytics.com/wp-content/uploads/2022/10/recoveryspread.mp4" length="36374" type="video/mp4" />

			</item>
	</channel>
</rss>
