mirror of
				https://github.com/gsi-upm/soil
				synced 2025-10-31 15:48:16 +00:00 
			
		
		
		
	All settings as JSON and documentation updated
This commit is contained in:
		
										
											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)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user