mirror of
https://github.com/gsi-upm/soil
synced 2024-11-22 11:12:29 +00:00
All settings as JSON and documentation updated
This commit is contained in:
parent
23fc9671c3
commit
a643735ddb
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/_build/doctrees/environment.pickle
vendored
BIN
docs/_build/doctrees/environment.pickle
vendored
Binary file not shown.
BIN
docs/_build/doctrees/models.doctree
vendored
BIN
docs/_build/doctrees/models.doctree
vendored
Binary file not shown.
BIN
docs/_build/doctrees/usage.doctree
vendored
BIN
docs/_build/doctrees/usage.doctree
vendored
Binary file not shown.
8
docs/_build/html/_sources/models.rst.txt
vendored
8
docs/_build/html/_sources/models.rst.txt
vendored
@ -9,7 +9,7 @@ A model defines the behaviour of the agents with a view to assessing their effec
|
|||||||
In practice, a model consists of at least two parts:
|
In practice, a model consists of at least two parts:
|
||||||
|
|
||||||
* Python module: the actual code that describes the behaviour.
|
* Python module: the actual code that describes the behaviour.
|
||||||
* Setting up the variables in the Simulation Settings JSON file.
|
* Setting up the variables in the Settings JSON file.
|
||||||
|
|
||||||
This separation allows us to run the simulation with different agents.
|
This separation allows us to run the simulation with different agents.
|
||||||
|
|
||||||
@ -25,10 +25,10 @@ All the models are imported to the main file. The initialization look like this:
|
|||||||
networkStatus = {} # Dict that will contain the status of every agent in the network
|
networkStatus = {} # Dict that will contain the status of every agent in the network
|
||||||
|
|
||||||
sentimentCorrelationNodeArray = []
|
sentimentCorrelationNodeArray = []
|
||||||
for x in range(0, settings.number_of_nodes):
|
for x in range(0, settings.network_params["number_of_nodes"]):
|
||||||
sentimentCorrelationNodeArray.append({'id': x})
|
sentimentCorrelationNodeArray.append({'id': x})
|
||||||
# Initialize agent states. Let's assume everyone is normal.
|
# Initialize agent states. Let's assume everyone is normal.
|
||||||
init_states = [{'id': 0, } for _ in range(settings.number_of_nodes)]
|
init_states = [{'id': 0, } for _ in range(settings.network_params["number_of_nodes"])]
|
||||||
# add keys as as necessary, but "id" must always refer to that state category
|
# add keys as as necessary, but "id" must always refer to that state category
|
||||||
|
|
||||||
A new model have to inherit the BaseBehaviour class which is in the same module.
|
A new model have to inherit the BaseBehaviour class which is in the same module.
|
||||||
@ -77,7 +77,7 @@ passed as a parameter to the simulation.
|
|||||||
}
|
}
|
||||||
|
|
||||||
In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
||||||
The simulation returns one result for each model. For the usage, see :doc:`usage`.
|
The simulation returns one result for each model, executing each model separately. For the usage, see :doc:`usage`.
|
||||||
|
|
||||||
Example Model
|
Example Model
|
||||||
=============
|
=============
|
||||||
|
23
docs/_build/html/_sources/usage.rst.txt
vendored
23
docs/_build/html/_sources/usage.rst.txt
vendored
@ -8,18 +8,19 @@ Simulation Settings
|
|||||||
|
|
||||||
Once installed, before running a simulation, you need to configure it.
|
Once installed, before running a simulation, you need to configure it.
|
||||||
|
|
||||||
* In the settings.py file you will find the configuration of the network.
|
* In the Settings JSON file you will find the configuration of the network.
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
# Network settings
|
{
|
||||||
network_type = 1
|
"network_type": 1,
|
||||||
number_of_nodes = 1000
|
"number_of_nodes": 1000,
|
||||||
max_time = 50
|
"max_time": 50,
|
||||||
num_trials = 1
|
"num_trials": 1,
|
||||||
timeout = 2
|
"timeout": 2
|
||||||
|
}
|
||||||
|
|
||||||
* In the Simulation Settings JSON file, you will find the configuration of the models.
|
* In the Settings JSON file, you will also find the configuration of the models.
|
||||||
|
|
||||||
Network Types
|
Network Types
|
||||||
=============
|
=============
|
||||||
@ -40,7 +41,7 @@ Models Settings
|
|||||||
===============
|
===============
|
||||||
|
|
||||||
After having configured the simulation, the next step is setting up the variables of the models.
|
After having configured the simulation, the next step is setting up the variables of the models.
|
||||||
For this, you will need to modify the Simulation Settings JSON file.
|
For this, you will need to modify the Settings JSON file again.
|
||||||
|
|
||||||
.. code:: json
|
.. code:: json
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ For this, you will need to modify the Simulation Settings JSON file.
|
|||||||
}
|
}
|
||||||
|
|
||||||
In this file you will define the different models you are going to simulate. You can simulate as many models
|
In this file you will define the different models you are going to simulate. You can simulate as many models
|
||||||
as you want.
|
as you want. Each model will be simulated separately.
|
||||||
|
|
||||||
After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
||||||
in the documentation of each model.
|
in the documentation of each model.
|
||||||
@ -90,7 +91,7 @@ After setting all the configuration, you will be able to run the simulation. All
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
python soil.py
|
python3 soil.py
|
||||||
|
|
||||||
The simulation will return a dynamic graph .gexf file which could be visualized with
|
The simulation will return a dynamic graph .gexf file which could be visualized with
|
||||||
`Gephi <https://gephi.org/users/download/>`__.
|
`Gephi <https://gephi.org/users/download/>`__.
|
||||||
|
8
docs/_build/html/models.html
vendored
8
docs/_build/html/models.html
vendored
@ -51,7 +51,7 @@
|
|||||||
In practice, a model consists of at least two parts:</p>
|
In practice, a model consists of at least two parts:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>Python module: the actual code that describes the behaviour.</li>
|
<li>Python module: the actual code that describes the behaviour.</li>
|
||||||
<li>Setting up the variables in the Simulation Settings JSON file.</li>
|
<li>Setting up the variables in the Settings JSON file.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>This separation allows us to run the simulation with different agents.</p>
|
<p>This separation allows us to run the simulation with different agents.</p>
|
||||||
</div>
|
</div>
|
||||||
@ -63,10 +63,10 @@ In practice, a model consists of at least two parts:</p>
|
|||||||
<span class="n">networkStatus</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># Dict that will contain the status of every agent in the network</span>
|
<span class="n">networkStatus</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># Dict that will contain the status of every agent in the network</span>
|
||||||
|
|
||||||
<span class="n">sentimentCorrelationNodeArray</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">sentimentCorrelationNodeArray</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">):</span>
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">network_params</span><span class="p">[</span><span class="s2">"number_of_nodes"</span><span class="p">]):</span>
|
||||||
<span class="n">sentimentCorrelationNodeArray</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">'id'</span><span class="p">:</span> <span class="n">x</span><span class="p">})</span>
|
<span class="n">sentimentCorrelationNodeArray</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">'id'</span><span class="p">:</span> <span class="n">x</span><span class="p">})</span>
|
||||||
<span class="c1"># Initialize agent states. Let's assume everyone is normal.</span>
|
<span class="c1"># Initialize agent states. Let's assume everyone is normal.</span>
|
||||||
<span class="n">init_states</span> <span class="o">=</span> <span class="p">[{</span><span class="s1">'id'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="p">}</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">)]</span>
|
<span class="n">init_states</span> <span class="o">=</span> <span class="p">[{</span><span class="s1">'id'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="p">}</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">network_params</span><span class="p">[</span><span class="s2">"number_of_nodes"</span><span class="p">])]</span>
|
||||||
<span class="c1"># add keys as as necessary, but "id" must always refer to that state category</span>
|
<span class="c1"># add keys as as necessary, but "id" must always refer to that state category</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
@ -114,7 +114,7 @@ passed as a parameter to the simulation.</p>
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
<p>In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
||||||
The simulation returns one result for each model. For the usage, see <a class="reference internal" href="usage.html"><span class="doc">Usage</span></a>.</p>
|
The simulation returns one result for each model, executing each model separately. For the usage, see <a class="reference internal" href="usage.html"><span class="doc">Usage</span></a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="example-model">
|
<div class="section" id="example-model">
|
||||||
<h2>Example Model<a class="headerlink" href="#example-model" title="Permalink to this headline">¶</a></h2>
|
<h2>Example Model<a class="headerlink" href="#example-model" title="Permalink to this headline">¶</a></h2>
|
||||||
|
2
docs/_build/html/searchindex.js
vendored
2
docs/_build/html/searchindex.js
vendored
@ -1 +1 @@
|
|||||||
Search.setIndex({docnames:["index","usage"],envversion:51,filenames:["index.rst","usage.rst"],objects:{},objnames:{},objtypes:{},terms:{"class":[],"default":1,"import":[],"new":0,"return":1,"super":[],For:1,The:1,There:1,__init__:[],abl:1,about:0,actual:[],add:1,added:1,after:1,agent:[0,1],agent_id:[],all:1,allow:[],also:1,alwai:[],analysi:[],anger:[],anger_prob:[],append:[],assess:[],assum:[],barabasi_albert_graph:1,base:0,basebehaviour:[],basic:[],been:1,befor:1,behaviour:[],can:1,categori:[],clone:[],cluster:[],code:0,complete_graph:1,configur:1,consist:[],contain:[],content:[],content_discont:1,content_neutr:1,controlmodelm2:1,correl:[],could:1,def:[],defin:1,describ:[],develop:0,dict:[],differ:1,discontent_cont:1,discontent_neutr:1,disgust:[],disgust_prob:[],dit:[],doc:[],document:1,dynam:1,each:1,effect:[],env:[],environ:[],environment_param:[],everi:[],everyon:[],exampl:0,execut:1,fail:1,file:1,fill:[],find:1,first:1,from:[],gephi:1,gexf:1,git:[],gitlab:[],going:1,graph:1,gsi:[],has:1,have:1,here:1,how:[],http:[],implement:1,includ:[],index:[],inherit:[],init_st:[],initi:[0,1],instal:[0,1],instruct:1,joi:[],joy_prob:[],json:1,kei:[],lab:[],latest:[],learn:0,least:[],let:[],like:[],look:[],main:[],mani:1,margulis_gabber_galil_graph:1,max_tim:1,method:[],model:0,modifi:1,modul:[],more:[0,1],must:[],necessari:[],need:1,network:0,network_typ:1,networkstatu:[],neutral_content_infected_prob:1,neutral_content_spon_prob:1,neutral_discontent_infected_prob:1,neutral_discontent_spon_prob:1,next:1,none:1,normal:[],now:[],num_trial:1,number_of_nod:1,onc:1,one:1,outside_effects_prob:[],over:[],packag:1,page:[],paramet:1,part:[],pass:[],pictur:1,plugin:[],png:1,practic:[],prob_cured_healing_infect:1,prob_cured_vaccinate_neutr:1,prob_generate_anti_rumor:1,prob_infect:1,prob_neutral_making_deni:1,prob_vaccinated_healing_infect:1,prob_vaccinated_vaccinate_neutr:1,provid:1,python:[0,1],rang:[],refer:[],requir:1,result:[],run:0,sad:[],sadness_prob:[],same:[],search:[],section:[],see:1,self:[],sentiment:[],sentimentcorrelationmodel:[],sentimentcorrelationnodearrai:[],separ:[],set:0,simul:0,sisamodel:1,social:0,soil:1,standard_vari:1,state:[],statu:[],step:1,system:[],them:[],thi:1,three:1,through:[],time:[],time_awar:[],timeout:1,two:[],type:0,upm:[],usag:0,used:[],user:[],valid:1,variabl:[0,1],variance_c_d:1,variance_d_c:1,version:[],view:[],visual:1,want:1,what:0,which:1,whole:[],without:1,would:[],you:1},titles:["Welcome to Soil’s documentation!","Usage"],titleterms:{"new":[],code:[],develop:[],document:0,exampl:[],indic:[],initi:[],instal:[],model:1,network:1,run:1,set:1,simul:1,soil:0,tabl:[],type:1,usag:1,variabl:[],welcom:0,what:[]}})
|
Search.setIndex({docnames:["index","models","usage"],envversion:51,filenames:["index.rst","models.rst","usage.rst"],objects:{},objnames:{},objtypes:{},terms:{"class":1,"default":2,"import":1,"new":0,"return":[1,2],"super":1,For:[1,2],The:[1,2],There:[1,2],__init__:1,abl:2,about:0,actual:1,add:[1,2],added:2,after:2,again:2,agent:[0,1,2],agent_id:1,all:[1,2],allow:1,also:[1,2],alwai:1,analysi:1,anger:1,anger_prob:1,append:1,assess:1,assum:1,barabasi_albert_graph:2,base:0,basebehaviour:1,basic:1,been:2,befor:2,behaviour:1,can:[1,2],categori:1,clone:[],cluster:[],code:0,complete_graph:2,configur:2,consist:1,contain:1,content:[],content_discont:[1,2],content_neutr:[1,2],controlmodelm2:[1,2],correl:1,could:2,def:1,defin:[1,2],describ:1,develop:0,dict:1,differ:[1,2],discontent_cont:[1,2],discontent_neutr:[1,2],disgust:1,disgust_prob:1,dit:[],doc:[],document:[1,2],dynam:2,each:[1,2],effect:1,env:1,environ:1,environment_param:1,everi:1,everyon:1,exampl:0,execut:[1,2],fail:2,file:[1,2],fill:[],find:2,first:2,from:1,gephi:2,gexf:2,git:[],gitlab:[],going:[1,2],graph:2,gsi:[],has:2,have:[1,2],here:2,how:1,http:[],implement:[1,2],includ:1,index:[],inherit:1,init_st:1,initi:[0,2],instal:[0,2],instruct:2,joi:1,joy_prob:1,json:[1,2],kei:1,lab:[],latest:[],learn:0,least:1,let:1,like:1,look:1,main:1,mani:[1,2],margulis_gabber_galil_graph:2,max_tim:2,method:1,model:0,modifi:[1,2],modul:1,more:[0,2],must:1,necessari:1,need:2,network:[0,1],network_param:1,network_typ:2,networkstatu:1,neutral_content_infected_prob:[1,2],neutral_content_spon_prob:[1,2],neutral_discontent_infected_prob:[1,2],neutral_discontent_spon_prob:[1,2],next:2,none:[1,2],normal:1,now:1,num_trial:2,number_of_nod:[1,2],onc:2,one:[1,2],outside_effects_prob:1,over:1,packag:2,page:[],paramet:[1,2],part:1,pass:1,pictur:2,plugin:[],png:2,practic:1,prob_cured_healing_infect:[1,2],prob_cured_vaccinate_neutr:[1,2],prob_generate_anti_rumor:[1,2],prob_infect:[1,2],prob_neutral_making_deni:[1,2],prob_vaccinated_healing_infect:[1,2],prob_vaccinated_vaccinate_neutr:[1,2],provid:2,python3:2,python:[0,1],rang:1,refer:1,requir:2,result:1,run:[0,1],sad:1,sadness_prob:1,same:1,search:[],section:1,see:[1,2],self:1,sentiment:1,sentimentcorrelationmodel:1,sentimentcorrelationnodearrai:1,separ:[1,2],set:[0,1],simul:[0,1],sisamodel:[1,2],social:0,soil:2,standard_vari:[1,2],state:1,statu:1,step:[1,2],system:1,them:1,thi:[1,2],three:2,through:[],time:1,time_awar:1,timeout:2,two:1,type:0,upm:[],usag:[0,1],used:1,user:1,valid:2,variabl:[0,2],variance_c_d:[1,2],variance_d_c:[1,2],version:[],view:1,visual:2,want:[1,2],what:0,which:[1,2],whole:1,without:2,would:1,you:[1,2]},titles:["Welcome to Soil’s documentation!","Developing new models","Usage"],titleterms:{"new":1,code:1,develop:1,document:0,exampl:1,indic:[],initi:1,instal:[],model:[1,2],network:2,run:2,set:2,simul:2,soil:0,tabl:[],type:2,usag:2,variabl:1,welcom:0,what:1}})
|
23
docs/_build/html/usage.html
vendored
23
docs/_build/html/usage.html
vendored
@ -50,17 +50,18 @@
|
|||||||
<h2>Simulation Settings<a class="headerlink" href="#simulation-settings" title="Permalink to this headline">¶</a></h2>
|
<h2>Simulation Settings<a class="headerlink" href="#simulation-settings" title="Permalink to this headline">¶</a></h2>
|
||||||
<p>Once installed, before running a simulation, you need to configure it.</p>
|
<p>Once installed, before running a simulation, you need to configure it.</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><p class="first">In the settings.py file you will find the configuration of the network.</p>
|
<li><p class="first">In the Settings JSON file you will find the configuration of the network.</p>
|
||||||
<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="c1"># Network settings</span>
|
<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||||||
<span class="n">network_type</span> <span class="o">=</span> <span class="mi">1</span>
|
<span class="s2">"network_type"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||||
<span class="n">number_of_nodes</span> <span class="o">=</span> <span class="mi">1000</span>
|
<span class="s2">"number_of_nodes"</span><span class="p">:</span> <span class="mi">1000</span><span class="p">,</span>
|
||||||
<span class="n">max_time</span> <span class="o">=</span> <span class="mi">50</span>
|
<span class="s2">"max_time"</span><span class="p">:</span> <span class="mi">50</span><span class="p">,</span>
|
||||||
<span class="n">num_trials</span> <span class="o">=</span> <span class="mi">1</span>
|
<span class="s2">"num_trials"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||||
<span class="n">timeout</span> <span class="o">=</span> <span class="mi">2</span>
|
<span class="s2">"timeout"</span><span class="p">:</span> <span class="mi">2</span>
|
||||||
|
<span class="p">}</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li><p class="first">In the Simulation Settings JSON file, you will find the configuration of the models.</p>
|
<li><p class="first">In the Settings JSON file, you will also find the configuration of the models.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -80,7 +81,7 @@
|
|||||||
<div class="section" id="models-settings">
|
<div class="section" id="models-settings">
|
||||||
<h2>Models Settings<a class="headerlink" href="#models-settings" title="Permalink to this headline">¶</a></h2>
|
<h2>Models Settings<a class="headerlink" href="#models-settings" title="Permalink to this headline">¶</a></h2>
|
||||||
<p>After having configured the simulation, the next step is setting up the variables of the models.
|
<p>After having configured the simulation, the next step is setting up the variables of the models.
|
||||||
For this, you will need to modify the Simulation Settings JSON file.</p>
|
For this, you will need to modify the Settings JSON file again.</p>
|
||||||
<div class="code json highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span>
|
<div class="code json highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||||||
<span class="s2">"agent"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"SISaModel"</span><span class="p">,</span><span class="s2">"ControlModelM2"</span><span class="p">],</span>
|
<span class="s2">"agent"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"SISaModel"</span><span class="p">,</span><span class="s2">"ControlModelM2"</span><span class="p">],</span>
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ For this, you will need to modify the Simulation Settings JSON file.</p>
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>In this file you will define the different models you are going to simulate. You can simulate as many models
|
<p>In this file you will define the different models you are going to simulate. You can simulate as many models
|
||||||
as you want.</p>
|
as you want. Each model will be simulated separately.</p>
|
||||||
<p>After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
<p>After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
||||||
in the documentation of each model.</p>
|
in the documentation of each model.</p>
|
||||||
<p>Parameter validation will fail if a required parameter without a default has not been provided.</p>
|
<p>Parameter validation will fail if a required parameter without a default has not been provided.</p>
|
||||||
@ -122,7 +123,7 @@ in the documentation of each model.</p>
|
|||||||
<div class="section" id="running-the-simulation">
|
<div class="section" id="running-the-simulation">
|
||||||
<h2>Running the Simulation<a class="headerlink" href="#running-the-simulation" title="Permalink to this headline">¶</a></h2>
|
<h2>Running the Simulation<a class="headerlink" href="#running-the-simulation" title="Permalink to this headline">¶</a></h2>
|
||||||
<p>After setting all the configuration, you will be able to run the simulation. All you need to do is execute:</p>
|
<p>After setting all the configuration, you will be able to run the simulation. All you need to do is execute:</p>
|
||||||
<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">soil</span><span class="o">.</span><span class="n">py</span>
|
<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">python3</span> <span class="n">soil</span><span class="o">.</span><span class="n">py</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>The simulation will return a dynamic graph .gexf file which could be visualized with
|
<p>The simulation will return a dynamic graph .gexf file which could be visualized with
|
||||||
|
@ -9,7 +9,7 @@ A model defines the behaviour of the agents with a view to assessing their effec
|
|||||||
In practice, a model consists of at least two parts:
|
In practice, a model consists of at least two parts:
|
||||||
|
|
||||||
* Python module: the actual code that describes the behaviour.
|
* Python module: the actual code that describes the behaviour.
|
||||||
* Setting up the variables in the Simulation Settings JSON file.
|
* Setting up the variables in the Settings JSON file.
|
||||||
|
|
||||||
This separation allows us to run the simulation with different agents.
|
This separation allows us to run the simulation with different agents.
|
||||||
|
|
||||||
@ -25,10 +25,10 @@ All the models are imported to the main file. The initialization look like this:
|
|||||||
networkStatus = {} # Dict that will contain the status of every agent in the network
|
networkStatus = {} # Dict that will contain the status of every agent in the network
|
||||||
|
|
||||||
sentimentCorrelationNodeArray = []
|
sentimentCorrelationNodeArray = []
|
||||||
for x in range(0, settings.number_of_nodes):
|
for x in range(0, settings.network_params["number_of_nodes"]):
|
||||||
sentimentCorrelationNodeArray.append({'id': x})
|
sentimentCorrelationNodeArray.append({'id': x})
|
||||||
# Initialize agent states. Let's assume everyone is normal.
|
# Initialize agent states. Let's assume everyone is normal.
|
||||||
init_states = [{'id': 0, } for _ in range(settings.number_of_nodes)]
|
init_states = [{'id': 0, } for _ in range(settings.network_params["number_of_nodes"])]
|
||||||
# add keys as as necessary, but "id" must always refer to that state category
|
# add keys as as necessary, but "id" must always refer to that state category
|
||||||
|
|
||||||
A new model have to inherit the BaseBehaviour class which is in the same module.
|
A new model have to inherit the BaseBehaviour class which is in the same module.
|
||||||
@ -77,7 +77,7 @@ passed as a parameter to the simulation.
|
|||||||
}
|
}
|
||||||
|
|
||||||
In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
In this file you will also define the models you are going to simulate. You can simulate as many models as you want.
|
||||||
The simulation returns one result for each model. For the usage, see :doc:`usage`.
|
The simulation returns one result for each model, executing each model separately. For the usage, see :doc:`usage`.
|
||||||
|
|
||||||
Example Model
|
Example Model
|
||||||
=============
|
=============
|
||||||
|
@ -8,18 +8,19 @@ Simulation Settings
|
|||||||
|
|
||||||
Once installed, before running a simulation, you need to configure it.
|
Once installed, before running a simulation, you need to configure it.
|
||||||
|
|
||||||
* In the settings.py file you will find the configuration of the network.
|
* In the Settings JSON file you will find the configuration of the network.
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
# Network settings
|
{
|
||||||
network_type = 1
|
"network_type": 1,
|
||||||
number_of_nodes = 1000
|
"number_of_nodes": 1000,
|
||||||
max_time = 50
|
"max_time": 50,
|
||||||
num_trials = 1
|
"num_trials": 1,
|
||||||
timeout = 2
|
"timeout": 2
|
||||||
|
}
|
||||||
|
|
||||||
* In the Simulation Settings JSON file, you will find the configuration of the models.
|
* In the Settings JSON file, you will also find the configuration of the models.
|
||||||
|
|
||||||
Network Types
|
Network Types
|
||||||
=============
|
=============
|
||||||
@ -40,7 +41,7 @@ Models Settings
|
|||||||
===============
|
===============
|
||||||
|
|
||||||
After having configured the simulation, the next step is setting up the variables of the models.
|
After having configured the simulation, the next step is setting up the variables of the models.
|
||||||
For this, you will need to modify the Simulation Settings JSON file.
|
For this, you will need to modify the Settings JSON file again.
|
||||||
|
|
||||||
.. code:: json
|
.. code:: json
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ For this, you will need to modify the Simulation Settings JSON file.
|
|||||||
}
|
}
|
||||||
|
|
||||||
In this file you will define the different models you are going to simulate. You can simulate as many models
|
In this file you will define the different models you are going to simulate. You can simulate as many models
|
||||||
as you want.
|
as you want. Each model will be simulated separately.
|
||||||
|
|
||||||
After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
After setting up the models, you have to initialize the parameters of each one. You will find the parameters needed
|
||||||
in the documentation of each model.
|
in the documentation of each model.
|
||||||
@ -90,7 +91,7 @@ After setting all the configuration, you will be able to run the simulation. All
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
python soil.py
|
python3 soil.py
|
||||||
|
|
||||||
The simulation will return a dynamic graph .gexf file which could be visualized with
|
The simulation will return a dynamic graph .gexf file which could be visualized with
|
||||||
`Gephi <https://gephi.org/users/download/>`__.
|
`Gephi <https://gephi.org/users/download/>`__.
|
||||||
|
@ -23,7 +23,7 @@ class BaseBehaviour(BaseNetworkAgent):
|
|||||||
def run(self):
|
def run(self):
|
||||||
while True:
|
while True:
|
||||||
self.step(self.env.now)
|
self.step(self.env.now)
|
||||||
yield self.env.timeout(settings.timeout)
|
yield self.env.timeout(settings.network_params["timeout"])
|
||||||
|
|
||||||
def step(self, now):
|
def step(self, now):
|
||||||
networkStatus['agent_%s'% self.id] = self.to_json()
|
networkStatus['agent_%s'% self.id] = self.to_json()
|
||||||
|
@ -24,12 +24,12 @@ class ControlModelM2(BaseBehaviour):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Init infected
|
# Init infected
|
||||||
init_states[random.randint(0, settings.number_of_nodes-1)] = {'id': 1}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"]-1)] = {'id': 1}
|
||||||
init_states[random.randint(0, settings.number_of_nodes-1)] = {'id': 1}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"]-1)] = {'id': 1}
|
||||||
|
|
||||||
# Init beacons
|
# Init beacons
|
||||||
init_states[random.randint(0, settings.number_of_nodes-1)] = {'id': 4}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"]-1)] = {'id': 4}
|
||||||
init_states[random.randint(0, settings.number_of_nodes-1)] = {'id': 4}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"]-1)] = {'id': 4}
|
||||||
|
|
||||||
def __init__(self, environment=None, agent_id=0, state=()):
|
def __init__(self, environment=None, agent_id=0, state=()):
|
||||||
super().__init__(environment=environment, agent_id=agent_id, state=state)
|
super().__init__(environment=environment, agent_id=agent_id, state=state)
|
||||||
|
@ -23,8 +23,8 @@ class SpreadModelM2(BaseBehaviour):
|
|||||||
prob_generate_anti_rumor
|
prob_generate_anti_rumor
|
||||||
"""
|
"""
|
||||||
|
|
||||||
init_states[random.randint(0, settings.number_of_nodes)] = {'id': 1}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"])] = {'id': 1}
|
||||||
init_states[random.randint(0, settings.number_of_nodes)] = {'id': 1}
|
init_states[random.randint(0, settings.network_params["number_of_nodes"])] = {'id': 1}
|
||||||
|
|
||||||
def __init__(self, environment=None, agent_id=0, state=()):
|
def __init__(self, environment=None, agent_id=0, state=()):
|
||||||
super().__init__(environment=environment, agent_id=agent_id, state=state)
|
super().__init__(environment=environment, agent_id=agent_id, state=state)
|
||||||
|
@ -3,8 +3,8 @@ import settings
|
|||||||
networkStatus = {} # Dict that will contain the status of every agent in the network
|
networkStatus = {} # Dict that will contain the status of every agent in the network
|
||||||
|
|
||||||
sentimentCorrelationNodeArray = []
|
sentimentCorrelationNodeArray = []
|
||||||
for x in range(0, settings.number_of_nodes):
|
for x in range(0, settings.network_params["number_of_nodes"]):
|
||||||
sentimentCorrelationNodeArray.append({'id': x})
|
sentimentCorrelationNodeArray.append({'id': x})
|
||||||
# Initialize agent states. Let's assume everyone is normal.
|
# Initialize agent states. Let's assume everyone is normal.
|
||||||
init_states = [{'id': 0, } for _ in range(settings.number_of_nodes)]
|
init_states = [{'id': 0, } for _ in range(settings.network_params["number_of_nodes"])]
|
||||||
# add keys as as necessary, but "id" must always refer to that state category
|
# add keys as as necessary, but "id" must always refer to that state category
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
{
|
[
|
||||||
|
{
|
||||||
|
"network_type": 1,
|
||||||
|
"number_of_nodes": 1000,
|
||||||
|
"max_time": 50,
|
||||||
|
"num_trials": 1,
|
||||||
|
"timeout": 2
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
"agent": ["BaseBehaviour","SISaModel","ControlModelM2"],
|
"agent": ["BaseBehaviour","SISaModel","ControlModelM2"],
|
||||||
|
|
||||||
|
|
||||||
@ -49,4 +58,5 @@
|
|||||||
"prob_vaccinated_healing_infected": 0.035,
|
"prob_vaccinated_healing_infected": 0.035,
|
||||||
"prob_vaccinated_vaccinate_neutral": 0.035,
|
"prob_vaccinated_vaccinate_neutral": 0.035,
|
||||||
"prob_generate_anti_rumor": 0.035
|
"prob_generate_anti_rumor": 0.035
|
||||||
}
|
}
|
||||||
|
]
|
12
settings.py
12
settings.py
@ -1,15 +1,11 @@
|
|||||||
# General configuration
|
# General configuration
|
||||||
import json
|
import json
|
||||||
|
|
||||||
# Network settings
|
with open('settings.json', 'r') as f:
|
||||||
network_type = 1
|
settings = json.load(f)
|
||||||
number_of_nodes = 1000
|
|
||||||
max_time = 50
|
|
||||||
num_trials = 1
|
|
||||||
timeout = 2
|
|
||||||
|
|
||||||
with open('simulation_settings.json', 'r') as f:
|
network_params = settings[0]
|
||||||
environment_params = json.load(f)
|
environment_params = settings[1]
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
30
soil.py
30
soil.py
@ -1,6 +1,6 @@
|
|||||||
from models import *
|
from models import *
|
||||||
from nxsim import NetworkSimulation
|
from nxsim import NetworkSimulation
|
||||||
import numpy
|
# import numpy
|
||||||
from matplotlib import pyplot as plt
|
from matplotlib import pyplot as plt
|
||||||
import networkx as nx
|
import networkx as nx
|
||||||
import settings
|
import settings
|
||||||
@ -15,7 +15,7 @@ import json
|
|||||||
|
|
||||||
def visualization(graph_name):
|
def visualization(graph_name):
|
||||||
|
|
||||||
for x in range(0, settings.number_of_nodes):
|
for x in range(0, settings.network_params["number_of_nodes"]):
|
||||||
for attribute in models.networkStatus["agent_%s" % x]:
|
for attribute in models.networkStatus["agent_%s" % x]:
|
||||||
emotionStatusAux = []
|
emotionStatusAux = []
|
||||||
for t_step in models.networkStatus["agent_%s" % x][attribute]:
|
for t_step in models.networkStatus["agent_%s" % x][attribute]:
|
||||||
@ -46,14 +46,14 @@ def results(model_name):
|
|||||||
vaccinated_values = []
|
vaccinated_values = []
|
||||||
|
|
||||||
attribute_plot = 'status'
|
attribute_plot = 'status'
|
||||||
for time in range(0, settings.max_time):
|
for time in range(0, settings.network_params["max_time"]):
|
||||||
value_infectados = 0
|
value_infectados = 0
|
||||||
value_neutral = 0
|
value_neutral = 0
|
||||||
value_cured = 0
|
value_cured = 0
|
||||||
value_vaccinated = 0
|
value_vaccinated = 0
|
||||||
real_time = time * settings.timeout
|
real_time = time * settings.network_params["timeout"]
|
||||||
activity = False
|
activity = False
|
||||||
for x in range(0, settings.number_of_nodes):
|
for x in range(0, settings.network_params["number_of_nodes"]):
|
||||||
if attribute_plot in models.networkStatus["agent_%s" % x]:
|
if attribute_plot in models.networkStatus["agent_%s" % x]:
|
||||||
if real_time in models.networkStatus["agent_%s" % x][attribute_plot]:
|
if real_time in models.networkStatus["agent_%s" % x][attribute_plot]:
|
||||||
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 1: ## Infected
|
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 1: ## Infected
|
||||||
@ -93,12 +93,12 @@ def results(model_name):
|
|||||||
# Network creation #
|
# Network creation #
|
||||||
####################
|
####################
|
||||||
|
|
||||||
if settings.network_type == 0:
|
if settings.network_params["network_type"] == 0:
|
||||||
G = nx.complete_graph(settings.number_of_nodes)
|
G = nx.complete_graph(settings.network_params["number_of_nodes"])
|
||||||
if settings.network_type == 1:
|
if settings.network_params["network_type"] == 1:
|
||||||
G = nx.barabasi_albert_graph(settings.number_of_nodes, 10)
|
G = nx.barabasi_albert_graph(settings.network_params["number_of_nodes"], 10)
|
||||||
if settings.network_type == 2:
|
if settings.network_params["network_type"] == 2:
|
||||||
G = nx.margulis_gabber_galil_graph(settings.number_of_nodes, None)
|
G = nx.margulis_gabber_galil_graph(settings.network_params["number_of_nodes"], None)
|
||||||
# More types of networks can be added here
|
# More types of networks can be added here
|
||||||
|
|
||||||
|
|
||||||
@ -112,16 +112,16 @@ print("Using Agent(s): {agents}".format(agents=agents))
|
|||||||
|
|
||||||
if len(agents) > 1:
|
if len(agents) > 1:
|
||||||
for agent in agents:
|
for agent in agents:
|
||||||
sim = NetworkSimulation(topology=G, states=init_states, agent_type=locals()[agent], max_time=settings.max_time,
|
sim = NetworkSimulation(topology=G, states=init_states, agent_type=locals()[agent], max_time=settings.network_params["max_time"],
|
||||||
num_trials=settings.num_trials, logging_interval=1.0, **settings.environment_params)
|
num_trials=settings.network_params["num_trials"], logging_interval=1.0, **settings.environment_params)
|
||||||
sim.run_simulation()
|
sim.run_simulation()
|
||||||
print(str(agent))
|
print(str(agent))
|
||||||
results(str(agent))
|
results(str(agent))
|
||||||
visualization(str(agent))
|
visualization(str(agent))
|
||||||
else:
|
else:
|
||||||
agent = agents[0]
|
agent = agents[0]
|
||||||
sim = NetworkSimulation(topology=G, states=init_states, agent_type=locals()[agent], max_time=settings.max_time,
|
sim = NetworkSimulation(topology=G, states=init_states, agent_type=locals()[agent], max_time=settings.network_params["max_time"],
|
||||||
num_trials=settings.num_trials, logging_interval=1.0, **settings.environment_params)
|
num_trials=settings.network_params["num_trials"], logging_interval=1.0, **settings.environment_params)
|
||||||
sim.run_simulation()
|
sim.run_simulation()
|
||||||
results(str(agent))
|
results(str(agent))
|
||||||
visualization(str(agent))
|
visualization(str(agent))
|
||||||
|
Loading…
Reference in New Issue
Block a user