diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09f76071..f752c5b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Dates formatted as YYYY-MM-DD as per [ISO standard](https://www.iso.org/iso-8601-date-and-time-format.html).
+## v0.6.0 - 2026-09-07
+
+Various changes including new conceptual modelling page and new section on factorial sensitivity analysis. Also additional MCQ, some fixes to environment and code, and other changes and additions to pages.
+
+### Added
+
+* Add conceptual modelling page (#200).
+* Add factorial sensitivity analysis (#211).
+* Add MCQ to pages otherwise missing them (#145).
+
+### Fixed
+
+* Environment fixes (curl, rlang, R pinned, upgrade lintquarto).
+* Correct some commands on environment page (#208).
+* Add `patient_id_counter` to all Python code (#209).
+
+### Changed
+
+* Hid Python/R buttons on impact page.
+* Add renal capacity model and quotes from Lucy and Dan to index and impact page (#199).
+* Mention TRACE and execution tracing (#196) on verification and validation page.
+* Add delete instructions (#198) to environment page.
+* Add link to STARS Quarto workshop on documentation page (#194).
+* Add paper citation and ARC funding and logos.
+* Add rig Pop OS instructions to environment page.
+
## v0.5.0 - 2026-02-20
This release has lots and lots of changes based on peer review of the book from Nav Mustafee, Rob Challen, Tom Slater and Alison Harper. Other changes include addressing FAIRness requirements, switching R length of warm-up analysis to use intervals, and improving the docker action used to build the site.
diff --git a/CITATION.cff b/CITATION.cff
index 4886c5fd..0ad6a969 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -53,5 +53,5 @@ keywords:
- simmer
- rap
license: MIT
-version: '0.5.0'
-date-released: '2026-02-20'
+version: '0.6.0'
+date-released: '2026-09-07'
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3b9d93e6..c3e2f30d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -18,15 +18,20 @@ renv::init()
renv::restore()
```
+> On Linux, some system dependencies are required for all packages to install successfully.
+>
+> ```
+> sudo apt install libfontconfig1-dev libharfbuzz-dev libfribidi-dev
+> ```
+
**3. Create the book.**
```
quarto render
+quarto preview
```
-### Common `reticulate` error and solution
-
-When rendering a Quarto document containing executable Python code with `reticulate`, configuration errors can occur if R is not using the same Python as your conda/mamba environment.
+**However,** the first time you try to run it, you will likely run into a `reticulate` error. When rendering a Quarto document containing executable Python code with `reticulate`, configuration errors can occur if R is not using the same Python as your conda/mamba environment.
Whilst you can use `reticulate::use_condaenv()` on each page, this caused errors for our GitHub action - and anyway, a more robust approach is to configure which Python interpreter reticulate should use.
@@ -45,6 +50,12 @@ RETICULATE_PYTHON=/home/amy/mambaforge/envs/des-rap-book/bin/python
RETICULATE_CONDA=/home/amy/mambaforge/bin/conda
```
+If using Pop!_OS, you will also need to a line to similar to this (but with appropriate version). This is to allow `pak::pkg_sysreqs("plotly")` to run on `environment.qmd`.
+
+```
+PKG_SYSREQS_PLATFORM=ubuntu-24.04
+```
+
## Linting
diff --git a/pages/guide/experiments/scenarios.qmd b/pages/guide/experiments/scenarios.qmd
index afdaf78b..a1fda5be 100644
--- a/pages/guide/experiments/scenarios.qmd
+++ b/pages/guide/experiments/scenarios.qmd
@@ -513,6 +513,42 @@ In practice, sensitivity analysis is often performed within each scenario - for
:::
+### Two-way and factorial sensitivity analysis
+
+The previous example varied one parameter at a time. However, model outputs can depend on several uncertain parameters at once. Varying two or more parameters together can show:
+
+* The **main effect** of each parameter: its average effect on the outcome across the values of other parameters.
+* An **interaction effect**: whether the effect of one parameter changes depending on the value of another parameter.
+
+One way to investigate this is to use a 2k factorial design, as described in @Robinson2007. For each parameter (called a "factor"), you choose a plausible low (`-`) and high (`+`) value, then run the model for every possible combination of these values. For example:
+
+| Factor 1 | Factor 2 | Factor 3 | Response |
+| - | - | - | - |
+| - | - | - | $R_1$ |
+| + | - | - | $R_2$ |
+| - | + | - | $R_3$ |
+| + | + | - | $R_4$ |
+| - | - | + | $R_5$ |
+| + | - | + | $R_6$ |
+| - | + | + | $R_7$ |
+| + | + | + | $R_8$ |
+
+The main effect of Factor 1 is the average change in the response when Factor 1 changes from its low to high value, across all combinations of Factors 2 and 3:
+
+$$
+\frac{
+ (R_2 - R_1) + (R_4 - R_3) + (R_6 - R_5) + (R_8 - R_7)
+}{4}
+$$
+
+For example, a main effect of `+2` minutes for mean waiting time would indicate that changing Factor 1 from its low to high value increases mean waiting time by 2 minutes *on average* across the tested combinations of the other factors.
+
+An interaction occurs when the effect of one factor is different at different values of another factor. For example, increasing the number of doctors may reduce waiting time substantially when demand is high, but have little effect when demand is low. In that case, the effect of the number of doctors depends on the arrival rate: the two factors interact. See @Robinson2007 for the formula for calculating interaction effects.
+
+For an applied healthcare example, please see Monks, T., Pearson, M., Pitt, M., Stein, K., & James, M. A. (2015). *Evaluating the impact of a simulation study in emergency stroke care*. Operations research for health care, 6, 40-49. . They used a 2k factorial design to explore uncertainty in an emergency stroke care simulation:
+
+> "Here we focus on the uncertainty in the model results. To illustrate the results of the model we include a 23 factorial design including two of the early referral parameters and the proportion of exclusions between midnight and 11 am (due to our concern about underestimating the proportion of 'wake-up' strokes where the onset time is unknown). Full results, main and interaction effects are provided in the online supplementary material (see Appendix A)."
+
## Saving results
Saving your simulation results to file is important for reproducility, as it allows others to verify your findings and generate consistent (or new) figures and analyses, even if they can't re-run your simulation.
diff --git a/pages/guide/experiments/scenarios_resources/references.bib b/pages/guide/experiments/scenarios_resources/references.bib
index f3fd8fd0..2bdb7b84 100644
--- a/pages/guide/experiments/scenarios_resources/references.bib
+++ b/pages/guide/experiments/scenarios_resources/references.bib
@@ -11,3 +11,13 @@ @article{Heather2025
URL = {https://doi.org/10.1080/17477778.2025.2552177},
eprint = {https://doi.org/10.1080/17477778.2025.2552177}
}
+
+@incollection{Robinson2007,
+ author = {Stewart Robinson},
+ title = {Chapter 10: Experimentation: Searching the Solution Space},
+ booktitle = {Simulation: The Practice of Model Development and Use},
+ publisher = {John Wiley \& Sons},
+ year = {2007},
+ pages = {167-199},
+ isbn = {9780470847725}
+}
\ No newline at end of file
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.csv b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.csv
index 38befac8..6189ae78 100644
--- a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.csv
@@ -1,16 +1,16 @@
scenario,interarrival_time,number_of_doctors,mean,std_dev,ci_lower,ci_upper,metric
-0,4,3,4.85916630025862,3.18294609944992,0.9070167203485484,8.811315880168692,mean_patients_in_system
-1,4,4,4.077251640043243,2.597156294023534,0.8524561720459047,7.302047108040581,mean_patients_in_system
-2,4,5,3.687066782754907,2.0455534676890834,1.1471766855245007,6.2269568799853126,mean_patients_in_system
-3,5,3,3.3492346438019935,2.2862909049990146,0.5104295376440096,6.1880397499599775,mean_patients_in_system
-4,5,4,2.923448380538627,1.9557821828895496,0.4950240557162986,5.351872705360956,mean_patients_in_system
-5,5,5,2.813891400386683,1.7906419268135232,0.5905157861881074,5.037267014585258,mean_patients_in_system
-6,6,3,2.6678235002222697,1.5729375813352897,0.7147635340565317,4.620883466388007,mean_patients_in_system
-7,6,4,2.4143250992529275,1.352840401927087,0.7345518768645503,4.0940983216413045,mean_patients_in_system
-8,6,5,2.35876465367196,1.2873665521823698,0.7602879533354008,3.957241354008519,mean_patients_in_system
-9,7,3,2.1873524727756872,1.1410280013058747,0.7705790826117824,3.604125862939592,mean_patients_in_system
-10,7,4,2.0719012805919315,1.0179671444453147,0.8079281259798909,3.335874435203972,mean_patients_in_system
-11,7,5,2.0511265633273466,0.9942008006338163,0.8166632221949766,3.2855899044597168,mean_patients_in_system
-12,8,3,1.6672893427505808,0.7821507049868084,0.6961209711987658,2.6384577143023957,mean_patients_in_system
-13,8,4,1.6510501688952215,0.76457756478943,0.7017017328618786,2.6003986049285643,mean_patients_in_system
-14,8,5,1.6510501688952215,0.76457756478943,0.7017017328618786,2.6003986049285643,mean_patients_in_system
+0,4,3,4.85916630025862,3.18294609944992,0.907016720348556,8.811315880168683,mean_patients_in_system
+1,4,4,4.077251640043243,2.597156294023534,0.852456172045911,7.302047108040575,mean_patients_in_system
+2,4,5,3.687066782754907,2.0455534676890834,1.1471766855245056,6.226956879985308,mean_patients_in_system
+3,5,3,3.3492346438019935,2.2862909049990146,0.5104295376440149,6.188039749959972,mean_patients_in_system
+4,5,4,2.923448380538627,1.9557821828895496,0.49502405571630304,5.35187270536095,mean_patients_in_system
+5,5,5,2.813891400386683,1.7906419268135232,0.5905157861881118,5.037267014585254,mean_patients_in_system
+6,6,3,2.6678235002222697,1.5729375813352897,0.7147635340565355,4.620883466388004,mean_patients_in_system
+7,6,4,2.4143250992529275,1.352840401927087,0.7345518768645536,4.094098321641301,mean_patients_in_system
+8,6,5,2.35876465367196,1.2873665521823698,0.7602879533354039,3.957241354008516,mean_patients_in_system
+9,7,3,2.1873524727756872,1.1410280013058747,0.7705790826117853,3.604125862939589,mean_patients_in_system
+10,7,4,2.0719012805919315,1.0179671444453147,0.8079281259798934,3.3358744352039693,mean_patients_in_system
+11,7,5,2.0511265633273466,0.9942008006338163,0.8166632221949788,3.285589904459714,mean_patients_in_system
+12,8,3,1.6672893427505808,0.7821507049868084,0.6961209711987676,2.638457714302394,mean_patients_in_system
+13,8,4,1.6510501688952215,0.76457756478943,0.7017017328618805,2.6003986049285626,mean_patients_in_system
+14,8,5,1.6510501688952215,0.76457756478943,0.7017017328618805,2.6003986049285626,mean_patients_in_system
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.png b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.png
index ddb1ad8a..2ea2416c 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.png and b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_patients_in_system.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.csv b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.csv
index 8fe34034..5163ff5e 100644
--- a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.csv
@@ -1,16 +1,16 @@
scenario,interarrival_time,number_of_doctors,mean,std_dev,ci_lower,ci_upper,metric
-0,4,3,2.282464866558232,2.8873314231037424,-1.3026306123921314,5.867560345508595,mean_queue_length
-1,4,4,1.1097318320073017,1.9535470974076883,-1.3159172676392914,3.535380931653895,mean_queue_length
-2,4,5,0.5213509146700799,1.0360671913009343,-0.7650964164883847,1.8077982458285444,mean_queue_length
-3,5,3,1.1650943593485281,1.7577071663684805,-1.0173873485159723,3.3475760672130286,mean_queue_length
-4,5,4,0.5413844275221968,1.1160339914943753,-0.8443548004880175,1.9271236555324112,mean_queue_length
-5,5,5,0.2820443207617665,0.6306702738910651,-0.5010362530660779,1.0651248945896108,mean_queue_length
-6,6,3,0.6622472944073305,0.9683635787740693,-0.5401348985281882,1.8646294873428493,mean_queue_length
-7,6,4,0.27837536887873654,0.5670352204788746,-0.4256918501034171,0.9824425878608902,mean_queue_length
-8,6,5,0.13251703348173421,0.29631709504177334,-0.23540923548395953,0.500443302447428,mean_queue_length
-9,7,3,0.34511051247742225,0.5142664784669511,-0.29343565931802335,0.9836566842728678,mean_queue_length
-10,7,4,0.11563639266878852,0.24324737602325713,-0.18639511679682397,0.41766790213440097,mean_queue_length
-11,7,5,0.046407885898241616,0.10377118756052216,-0.0824410617465093,0.17525683354299254,mean_queue_length
-12,8,3,0.06172115012483844,0.11425351337849031,-0.08014332410552535,0.20358562435520225,mean_queue_length
-13,8,4,0.0038485910389422,0.008605711180671298,-0.006836810713036979,0.01453399279092138,mean_queue_length
-14,8,5,0.00103860065059186,0.0023223816561989065,-0.001845017041999159,0.00392221834318288,mean_queue_length
+0,4,3,2.282464866558232,2.8873314231037424,-1.3026306123921247,5.867560345508588,mean_queue_length
+1,4,4,1.1097318320073017,1.9535470974076883,-1.315917267639287,3.5353809316538904,mean_queue_length
+2,4,5,0.5213509146700799,1.0360671913009343,-0.7650964164883822,1.807798245828542,mean_queue_length
+3,5,3,1.1650943593485281,1.7577071663684805,-1.017387348515968,3.347576067213024,mean_queue_length
+4,5,4,0.5413844275221968,1.1160339914943753,-0.8443548004880148,1.9271236555324085,mean_queue_length
+5,5,5,0.2820443207617665,0.6306702738910651,-0.5010362530660764,1.0651248945896092,mean_queue_length
+6,6,3,0.6622472944073305,0.9683635787740693,-0.540134898528186,1.864629487342847,mean_queue_length
+7,6,4,0.27837536887873654,0.5670352204788746,-0.42569185010341576,0.9824425878608889,mean_queue_length
+8,6,5,0.13251703348173421,0.29631709504177334,-0.23540923548395887,0.5004433024474273,mean_queue_length
+9,7,3,0.34511051247742225,0.5142664784669511,-0.2934356593180221,0.9836566842728667,mean_queue_length
+10,7,4,0.11563639266878852,0.24324737602325713,-0.18639511679682336,0.41766790213440036,mean_queue_length
+11,7,5,0.046407885898241616,0.10377118756052216,-0.08244106174650905,0.17525683354299226,mean_queue_length
+12,8,3,0.06172115012483844,0.11425351337849031,-0.08014332410552508,0.20358562435520197,mean_queue_length
+13,8,4,0.0038485910389422,0.008605711180671298,-0.006836810713036958,0.014533992790921359,mean_queue_length
+14,8,5,0.00103860065059186,0.0023223816561989065,-0.0018450170419991537,0.003922218343182874,mean_queue_length
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.png b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.png
index 9da945b2..a8fe2401 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.png and b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_queue_length.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.csv b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.csv
index 2681cb3d..b6c30c3f 100644
--- a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.csv
@@ -1,16 +1,16 @@
scenario,interarrival_time,number_of_doctors,mean,std_dev,ci_lower,ci_upper,metric
-0,4,3,13.262889237569237,7.809683711982843,3.5658861350417883,22.959892340096687,mean_time_in_system
-1,4,4,10.575369844380475,6.247718291827938,2.817802970498592,18.33293671826236,mean_time_in_system
-2,4,5,8.730675857404929,4.182349267541185,3.537603343985147,13.923748370824711,mean_time_in_system
-3,5,3,11.23532646310502,5.451946192617937,4.4658411555872295,18.00481177062281,mean_time_in_system
-4,5,4,9.01582567934349,4.398222201919676,3.5547115151193305,14.47693984356765,mean_time_in_system
-5,5,5,8.614731276273536,4.03833544514373,3.600475541368386,13.628987011178687,mean_time_in_system
-6,6,3,9.451101268771557,4.692782792453591,3.6242418239917953,15.27796071355132,mean_time_in_system
-7,6,4,8.326716249263633,3.9516393065569413,3.4201079884249816,13.233324510102285,mean_time_in_system
-8,6,5,8.110967542266511,3.912119319390652,3.2534298267017165,12.968505257831307,mean_time_in_system
-9,7,3,9.864700764356396,3.7955234836199336,5.151935900408581,14.57746562830421,mean_time_in_system
-10,7,4,9.156236964518444,3.3242613444646794,5.0286213324762015,13.283852596560685,mean_time_in_system
-11,7,5,9.044029062870168,3.3190018002957715,4.922944017469422,13.165114108270913,mean_time_in_system
-12,8,3,11.037798145446914,8.835548401835315,0.06701579050117701,22.00858050039265,mean_time_in_system
-13,8,4,10.907884754604039,8.924232487987485,-0.17301343733044838,21.988782946538528,mean_time_in_system
-14,8,5,10.907884754604039,8.924232487987485,-0.17301343733044838,21.988782946538528,mean_time_in_system
+0,4,3,13.262889237569237,7.809683711982843,3.565886135041806,22.959892340096665,mean_time_in_system
+1,4,4,10.575369844380475,6.247718291827938,2.817802970498607,18.332936718262342,mean_time_in_system
+2,4,5,8.730675857404929,4.182349267541185,3.5376033439851566,13.9237483708247,mean_time_in_system
+3,5,3,11.23532646310502,5.451946192617937,4.465841155587243,18.004811770622798,mean_time_in_system
+4,5,4,9.01582567934349,4.398222201919676,3.554711515119341,14.476939843567639,mean_time_in_system
+5,5,5,8.614731276273536,4.03833544514373,3.6004755413683958,13.628987011178676,mean_time_in_system
+6,6,3,9.451101268771557,4.692782792453591,3.624241823991806,15.277960713551309,mean_time_in_system
+7,6,4,8.326716249263633,3.9516393065569413,3.4201079884249914,13.233324510102275,mean_time_in_system
+8,6,5,8.110967542266511,3.912119319390652,3.2534298267017263,12.968505257831296,mean_time_in_system
+9,7,3,9.864700764356396,3.7955234836199336,5.15193590040859,14.577465628304202,mean_time_in_system
+10,7,4,9.156236964518444,3.3242613444646794,5.0286213324762095,13.283852596560678,mean_time_in_system
+11,7,5,9.044029062870168,3.3190018002957715,4.92294401746943,13.165114108270906,mean_time_in_system
+12,8,3,11.037798145446914,8.835548401835315,0.06701579050119832,22.00858050039263,mean_time_in_system
+13,8,4,10.907884754604039,8.924232487987485,-0.17301343733042707,21.988782946538507,mean_time_in_system
+14,8,5,10.907884754604039,8.924232487987485,-0.17301343733042707,21.988782946538507,mean_time_in_system
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.png b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.png
index 3dba77a6..342ae5aa 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.png and b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_time_in_system.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.csv b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.csv
index d709a58f..2f2cb50b 100644
--- a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.csv
@@ -1,16 +1,16 @@
scenario,interarrival_time,number_of_doctors,mean,std_dev,ci_lower,ci_upper,metric
-0,4,3,0.8589004779001291,0.1742654826468947,0.6425213019678768,1.0752796538323814,mean_utilisation_tw
-1,4,4,0.7418799520089852,0.21601137002819626,0.47366641064230175,1.0100934933756687,mean_utilisation_tw
-2,4,5,0.6331431736169653,0.22336252337125148,0.3558019697989349,0.9104843774349956,mean_utilisation_tw
-3,5,3,0.7280467614844883,0.23282211721993223,0.4389599205469213,1.0171336024220554,mean_utilisation_tw
-4,5,4,0.5955159882541076,0.24087867024110227,0.2964256154805339,0.8946063610276812,mean_utilisation_tw
-5,5,5,0.5063694159249834,0.24380861669443174,0.20364103412364576,0.8090977977263211,mean_utilisation_tw
-6,6,3,0.668525401938313,0.2513879951918314,0.3563859787279944,0.9806648251486316,mean_utilisation_tw
-7,6,4,0.5339874325935478,0.22392032420775007,0.25595362755866913,0.8120212376284264,mean_utilisation_tw
-8,6,5,0.44524952403804513,0.20870451174404595,0.18610864554276813,0.7043904025333221,mean_utilisation_tw
-9,7,3,0.614080653432755,0.2578948983214237,0.2938618428666222,0.9342994639988877,mean_utilisation_tw
-10,7,4,0.4890662219807858,0.21556418292237517,0.2214079367438614,0.7567245072177102,mean_utilisation_tw
-11,7,5,0.4009437354858211,0.18518738542439148,0.17100322608286925,0.6308842448887729,mean_utilisation_tw
-12,8,3,0.5351893975419142,0.24391500845189512,0.23232891292562863,0.8380498821581998,mean_utilisation_tw
-13,8,4,0.4118003944640698,0.19015186194845052,0.17569567329126606,0.6479051156368736,mean_utilisation_tw
-14,8,5,0.3300023136489259,0.15269972924040467,0.14040055731565246,0.5196040699821993,mean_utilisation_tw
+0,4,3,0.8589004779001291,0.1742654826468947,0.6425213019678772,1.075279653832381,mean_utilisation_tw
+1,4,4,0.7418799520089852,0.21601137002819626,0.47366641064230225,1.010093493375668,mean_utilisation_tw
+2,4,5,0.6331431736169653,0.22336252337125148,0.35580196979893547,0.9104843774349951,mean_utilisation_tw
+3,5,3,0.7280467614844883,0.23282211721993223,0.43895992054692184,1.0171336024220548,mean_utilisation_tw
+4,5,4,0.5955159882541076,0.24087867024110227,0.2964256154805345,0.8946063610276807,mean_utilisation_tw
+5,5,5,0.5063694159249834,0.24380861669443174,0.20364103412364631,0.8090977977263205,mean_utilisation_tw
+6,6,3,0.668525401938313,0.2513879951918314,0.356385978727995,0.980664825148631,mean_utilisation_tw
+7,6,4,0.5339874325935478,0.22392032420775007,0.2559536275586697,0.8120212376284258,mean_utilisation_tw
+8,6,5,0.44524952403804513,0.20870451174404595,0.18610864554276862,0.7043904025333216,mean_utilisation_tw
+9,7,3,0.614080653432755,0.2578948983214237,0.2938618428666228,0.9342994639988871,mean_utilisation_tw
+10,7,4,0.4890662219807858,0.21556418292237517,0.2214079367438619,0.7567245072177098,mean_utilisation_tw
+11,7,5,0.4009437354858211,0.18518738542439148,0.1710032260828697,0.6308842448887725,mean_utilisation_tw
+12,8,3,0.5351893975419142,0.24391500845189512,0.23232891292562918,0.8380498821581992,mean_utilisation_tw
+13,8,4,0.4118003944640698,0.19015186194845052,0.17569567329126654,0.647905115636873,mean_utilisation_tw
+14,8,5,0.3300023136489259,0.15269972924040467,0.14040055731565282,0.519604069982199,mean_utilisation_tw
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.png b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.png
index ecf5b876..ef1de83d 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.png and b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_utilisation_tw.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.csv b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.csv
index 31da5329..8f8c27cf 100644
--- a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.csv
@@ -1,16 +1,16 @@
scenario,interarrival_time,number_of_doctors,mean,std_dev,ci_lower,ci_upper,metric
-0,4,3,6.1905644683331165,6.63201742637757,-2.0441728054599118,14.425301742126145,mean_wait_time
-1,4,4,2.855738578161404,4.85603097842734,-3.173820261914034,8.885297418236842,mean_wait_time
-2,4,5,1.148081762887433,2.4755128602484415,-1.9256734327734886,4.221836958548354,mean_wait_time
-3,5,3,3.6980002604678397,3.6476898436199563,-0.8312048949685868,8.227205415904265,mean_wait_time
-4,5,4,1.3386390302892122,2.4385471701229795,-1.6892171987741667,4.366495259352591,mean_wait_time
-5,5,5,0.6964210063283356,1.5572447111089693,-1.2371536878488967,2.629995700505568,mean_wait_time
-6,6,3,2.218808067966734,2.1308324606270546,-0.4269698845978245,4.864586020531293,mean_wait_time
-7,6,4,0.7688613155325997,1.4069934839893266,-0.9781518392442344,2.515874470309434,mean_wait_time
-8,6,5,0.37862009566209776,0.8466202715479239,-0.6725978156684558,1.4298380069926513,mean_wait_time
-9,7,3,1.0025595598161932,0.8529586401739574,-0.05652847564465047,2.061647595277037,mean_wait_time
-10,7,4,0.36207912260024616,0.7236616246188119,-0.536465463570581,1.2606237087710734,mean_wait_time
-11,7,5,0.13259395970926174,0.29648910731577754,-0.23554589070431214,0.5007338101228356,mean_wait_time
-12,8,3,0.17737686883913267,0.3966267363603648,-0.31510027042458905,0.6698540081028543,mean_wait_time
+0,4,3,6.1905644683331165,6.63201742637757,-2.0441728054598958,14.425301742126129,mean_wait_time
+1,4,4,2.855738578161404,4.85603097842734,-3.1738202619140226,8.885297418236831,mean_wait_time
+2,4,5,1.148081762887433,2.4755128602484415,-1.9256734327734828,4.221836958548349,mean_wait_time
+3,5,3,3.6980002604678397,3.6476898436199563,-0.8312048949685789,8.227205415904258,mean_wait_time
+4,5,4,1.3386390302892122,2.4385471701229795,-1.6892171987741609,4.366495259352585,mean_wait_time
+5,5,5,0.6964210063283356,1.5572447111089693,-1.237153687848893,2.629995700505564,mean_wait_time
+6,6,3,2.218808067966734,2.1308324606270546,-0.42696988459781915,4.864586020531288,mean_wait_time
+7,6,4,0.7688613155325997,1.4069934839893266,-0.9781518392442311,2.5158744703094307,mean_wait_time
+8,6,5,0.37862009566209776,0.8466202715479239,-0.6725978156684538,1.4298380069926493,mean_wait_time
+9,7,3,1.0025595598161932,0.8529586401739574,-0.05652847564464847,2.0616475952770346,mean_wait_time
+10,7,4,0.36207912260024616,0.7236616246188119,-0.5364654635705794,1.2606237087710717,mean_wait_time
+11,7,5,0.13259395970926174,0.29648910731577754,-0.23554589070431148,0.5007338101228349,mean_wait_time
+12,8,3,0.17737686883913267,0.3966267363603648,-0.3151002704245881,0.6698540081028534,mean_wait_time
13,8,4,0.0,0.0,0.0,0.0,mean_wait_time
14,8,5,0.0,0.0,0.0,0.0,mean_wait_time
diff --git a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.png b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.png
index 8998bc3c..026fe886 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.png and b/pages/guide/experiments/tables_figures_resources/python_scenario_mean_wait_time.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.csv b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.csv
index 936577db..46de2439 100644
--- a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.csv
@@ -1,8 +1,8 @@
scenario,interarrival_time,mean,std_dev,ci_lower,ci_upper,metric
-0,4.0,4.85916630025862,3.18294609944992,0.9070167203485484,8.811315880168692,mean_patients_in_system
-1,4.5,3.922759542916361,2.6893001225419706,0.5835524003910186,7.261966685441703,mean_patients_in_system
-2,5.0,3.3492346438019935,2.2862909049990146,0.5104295376440096,6.1880397499599775,mean_patients_in_system
-3,5.5,2.954663296777393,1.878196808230074,0.6225739384568865,5.286752655097899,mean_patients_in_system
-4,6.0,2.6678235002222697,1.5729375813352897,0.7147635340565317,4.620883466388007,mean_patients_in_system
-5,6.5,2.407194942951931,1.3819997921374132,0.6912155555298163,4.123174330374045,mean_patients_in_system
-6,7.0,2.1873524727756872,1.1410280013058747,0.7705790826117824,3.604125862939592,mean_patients_in_system
+0,4.0,4.85916630025862,3.18294609944992,0.907016720348556,8.811315880168683,mean_patients_in_system
+1,4.5,3.922759542916361,2.6893001225419706,0.5835524003910253,7.261966685441696,mean_patients_in_system
+2,5.0,3.3492346438019935,2.2862909049990146,0.5104295376440149,6.188039749959972,mean_patients_in_system
+3,5.5,2.954663296777393,1.878196808230074,0.6225739384568909,5.286752655097895,mean_patients_in_system
+4,6.0,2.6678235002222697,1.5729375813352897,0.7147635340565355,4.620883466388004,mean_patients_in_system
+5,6.5,2.407194942951931,1.3819997921374132,0.6912155555298196,4.123174330374042,mean_patients_in_system
+6,7.0,2.1873524727756872,1.1410280013058747,0.7705790826117853,3.604125862939589,mean_patients_in_system
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.png b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.png
index f4f9b005..f2f66f3f 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.png and b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_patients_in_system.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.csv b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.csv
index 4aa2c840..32b8493c 100644
--- a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.csv
@@ -1,8 +1,8 @@
scenario,interarrival_time,mean,std_dev,ci_lower,ci_upper,metric
-0,4.0,2.282464866558232,2.8873314231037424,-1.3026306123921314,5.867560345508595,mean_queue_length
-1,4.5,1.5815505749910028,2.2433238531044797,-1.2039038897205843,4.36700503970259,mean_queue_length
-2,5.0,1.1650943593485281,1.7577071663684805,-1.0173873485159723,3.3475760672130286,mean_queue_length
-3,5.5,0.8540834947997048,1.2913861975405734,-0.7493842544636825,2.457551244063092,mean_queue_length
-4,6.0,0.6622472944073305,0.9683635787740693,-0.5401348985281882,1.8646294873428493,mean_queue_length
-5,6.5,0.509395704655212,0.7618289459957527,-0.43653987037723563,1.4553312796876596,mean_queue_length
-6,7.0,0.34511051247742225,0.5142664784669511,-0.29343565931802335,0.9836566842728678,mean_queue_length
+0,4.0,2.282464866558232,2.8873314231037424,-1.3026306123921247,5.867560345508588,mean_queue_length
+1,4.5,1.5815505749910028,2.2433238531044797,-1.2039038897205785,4.367005039702584,mean_queue_length
+2,5.0,1.1650943593485281,1.7577071663684805,-1.017387348515968,3.347576067213024,mean_queue_length
+3,5.5,0.8540834947997048,1.2913861975405734,-0.7493842544636794,2.457551244063089,mean_queue_length
+4,6.0,0.6622472944073305,0.9683635787740693,-0.540134898528186,1.864629487342847,mean_queue_length
+5,6.5,0.509395704655212,0.7618289459957527,-0.43653987037723374,1.4553312796876576,mean_queue_length
+6,7.0,0.34511051247742225,0.5142664784669511,-0.2934356593180221,0.9836566842728667,mean_queue_length
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.png b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.png
index b597d201..1a85e849 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.png and b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_queue_length.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.csv b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.csv
index a1db8a71..6ec0c003 100644
--- a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.csv
@@ -1,8 +1,8 @@
scenario,interarrival_time,mean,std_dev,ci_lower,ci_upper,metric
-0,4.0,13.262889237569237,7.809683711982843,3.5658861350417883,22.959892340096687,mean_time_in_system
-1,4.5,11.74082933330383,5.767993614887657,4.578919319828626,18.902739346779036,mean_time_in_system
-2,5.0,11.23532646310502,5.451946192617937,4.4658411555872295,18.00481177062281,mean_time_in_system
-3,5.5,9.86219739314937,5.178291279525848,3.4324995391496076,16.29189524714913,mean_time_in_system
-4,6.0,9.451101268771557,4.692782792453591,3.6242418239917953,15.27796071355132,mean_time_in_system
-5,6.5,10.82730112955234,3.9594621873096,5.910979479320872,15.74362277978381,mean_time_in_system
-6,7.0,9.864700764356396,3.7955234836199336,5.151935900408581,14.57746562830421,mean_time_in_system
+0,4.0,13.262889237569237,7.809683711982843,3.565886135041806,22.959892340096665,mean_time_in_system
+1,4.5,11.74082933330383,5.767993614887657,4.57891931982864,18.902739346779022,mean_time_in_system
+2,5.0,11.23532646310502,5.451946192617937,4.465841155587243,18.004811770622798,mean_time_in_system
+3,5.5,9.86219739314937,5.178291279525848,3.43249953914962,16.291895247149117,mean_time_in_system
+4,6.0,9.451101268771557,4.692782792453591,3.624241823991806,15.277960713551309,mean_time_in_system
+5,6.5,10.82730112955234,3.9594621873096,5.910979479320881,15.7436227797838,mean_time_in_system
+6,7.0,9.864700764356396,3.7955234836199336,5.15193590040859,14.577465628304202,mean_time_in_system
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.png b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.png
index 36666f1f..3f0cc957 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.png and b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_time_in_system.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.csv b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.csv
index fdd4475a..042b6422 100644
--- a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.csv
@@ -1,8 +1,8 @@
scenario,interarrival_time,mean,std_dev,ci_lower,ci_upper,metric
-0,4.0,0.8589004779001291,0.1742654826468947,0.6425213019678768,1.0752796538323814,mean_utilisation_tw
-1,4.5,0.7804029893084528,0.20216184949011826,0.5293858989862844,1.031420079630621,mean_utilisation_tw
-2,5.0,0.7280467614844883,0.23282211721993223,0.4389599205469213,1.0171336024220554,mean_utilisation_tw
-3,5.5,0.7001932673258959,0.253270557423119,0.38571633436860936,1.0146702002831824,mean_utilisation_tw
-4,6.0,0.668525401938313,0.2513879951918314,0.3563859787279944,0.9806648251486316,mean_utilisation_tw
-5,6.5,0.6325997460989063,0.2561583769732917,0.31453711157286135,0.9506623806249513,mean_utilisation_tw
-6,7.0,0.614080653432755,0.2578948983214237,0.2938618428666222,0.9342994639988877,mean_utilisation_tw
+0,4.0,0.8589004779001291,0.1742654826468947,0.6425213019678772,1.075279653832381,mean_utilisation_tw
+1,4.5,0.7804029893084528,0.20216184949011826,0.529385898986285,1.0314200796306205,mean_utilisation_tw
+2,5.0,0.7280467614844883,0.23282211721993223,0.43895992054692184,1.0171336024220548,mean_utilisation_tw
+3,5.5,0.7001932673258959,0.253270557423119,0.38571633436860997,1.0146702002831818,mean_utilisation_tw
+4,6.0,0.668525401938313,0.2513879951918314,0.356385978727995,0.980664825148631,mean_utilisation_tw
+5,6.5,0.6325997460989063,0.2561583769732917,0.31453711157286196,0.9506623806249508,mean_utilisation_tw
+6,7.0,0.614080653432755,0.2578948983214237,0.2938618428666228,0.9342994639988871,mean_utilisation_tw
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.png b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.png
index aa42468f..b26de096 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.png and b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_utilisation_tw.png differ
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.csv b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.csv
index 1ddae344..97fd1963 100644
--- a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.csv
+++ b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.csv
@@ -1,8 +1,8 @@
scenario,interarrival_time,mean,std_dev,ci_lower,ci_upper,metric
-0,4.0,6.1905644683331165,6.63201742637757,-2.0441728054599118,14.425301742126145,mean_wait_time
-1,4.5,4.415104489502983,4.820637162534023,-1.5705071236186718,10.400716102624639,mean_wait_time
-2,5.0,3.6980002604678397,3.6476898436199563,-0.8312048949685868,8.227205415904265,mean_wait_time
-3,5.5,2.667058374418183,2.4480157286476443,-0.3725546228801577,5.706671371716524,mean_wait_time
-4,6.0,2.218808067966734,2.1308324606270546,-0.4269698845978245,4.864586020531293,mean_wait_time
-5,6.5,1.6805650266404573,1.6215856330036051,-0.3328994738645845,3.6940295271454993,mean_wait_time
-6,7.0,1.0025595598161932,0.8529586401739574,-0.05652847564465047,2.061647595277037,mean_wait_time
+0,4.0,6.1905644683331165,6.63201742637757,-2.0441728054598958,14.425301742126129,mean_wait_time
+1,4.5,4.415104489502983,4.820637162534023,-1.5705071236186603,10.400716102624628,mean_wait_time
+2,5.0,3.6980002604678397,3.6476898436199563,-0.8312048949685789,8.227205415904258,mean_wait_time
+3,5.5,2.667058374418183,2.4480157286476443,-0.37255462288015195,5.706671371716518,mean_wait_time
+4,6.0,2.218808067966734,2.1308324606270546,-0.42696988459781915,4.864586020531288,mean_wait_time
+5,6.5,1.6805650266404573,1.6215856330036051,-0.3328994738645805,3.694029527145495,mean_wait_time
+6,7.0,1.0025595598161932,0.8529586401739574,-0.05652847564464847,2.0616475952770346,mean_wait_time
diff --git a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.png b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.png
index b947f4d7..093a4473 100644
Binary files a/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.png and b/pages/guide/experiments/tables_figures_resources/python_sensitivity_mean_wait_time.png differ
diff --git a/pages/guide/model/logs.qmd b/pages/guide/model/logs.qmd
index 5e364eaa..bd3c4db9 100644
--- a/pages/guide/model/logs.qmd
+++ b/pages/guide/model/logs.qmd
@@ -464,6 +464,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(mean=self.param.interarrival_time,
@@ -484,7 +485,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -904,6 +906,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(mean=self.param.interarrival_time,
@@ -928,7 +931,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -1344,6 +1348,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(mean=self.param.interarrival_time,
@@ -1370,7 +1375,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/model/logs_resources/python_log_example.log b/pages/guide/model/logs_resources/python_log_example.log
index 72754135..52563989 100644
--- a/pages/guide/model/logs_resources/python_log_example.log
+++ b/pages/guide/model/logs_resources/python_log_example.log
@@ -5,6 +5,7 @@
'env': '',
'logger': '<__main__.SimLogger>',
'param': '<__main__.Parameters>',
+ 'patient_id_counter': 0,
'patients': [],
'run_number': 0}
0.000: Parameters:
diff --git a/pages/guide/model/patients.qmd b/pages/guide/model/patients.qmd
index 9a5a1142..663bd3b0 100644
--- a/pages/guide/model/patients.qmd
+++ b/pages/guide/model/patients.qmd
@@ -211,6 +211,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(
@@ -228,7 +229,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -306,6 +308,7 @@ Independent seeding also helps you avoid subtle mistakes that can happen with ma
```{.python}
# Set up attributes to store results
self.patients = []
+self.patient_id_counter = 0
```
The `patients` list will store the `Patient` instances created for each arrival. The list stores references to the objects, so any changes made to a Patient's attributes after being added will be reflected in the list.
@@ -352,7 +355,8 @@ The statement `yield self.env.timeout(sampled_iat)` is how the simulation waits
```{.python}
# Create a new patient
-patient = Patient(patient_id=len(self.patients)+1,
+self.patient_id_counter += 1
+patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
```
@@ -697,6 +701,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Create all the distributions#<<
self.dist = DistributionRegistry.create_batch(#<<
@@ -715,7 +720,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/model/process.qmd b/pages/guide/model/process.qmd
index 621513c4..64ba6250 100644
--- a/pages/guide/model/process.qmd
+++ b/pages/guide/model/process.qmd
@@ -193,6 +193,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(mean=self.param.interarrival_time,
@@ -210,7 +211,8 @@ class Model:
yield self.env.timeout(sampled_iat)
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/outputs.qmd b/pages/guide/output_analysis/outputs.qmd
index 2aa1475f..73418e22 100644
--- a/pages/guide/output_analysis/outputs.qmd
+++ b/pages/guide/output_analysis/outputs.qmd
@@ -945,6 +945,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
# Initialise distributions
@@ -969,7 +970,8 @@ class Model:
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -1669,6 +1671,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
self.doctor_time_used = 0#<<
self.doctor_time_used_correction = 0#<<
@@ -1695,7 +1698,8 @@ class Model:
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -3090,6 +3094,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
# Initialise distributions
@@ -3114,7 +3119,8 @@ class Model:
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -3505,6 +3511,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
self.area_n_in_system = [0]#<<
self.time_last_n_in_system = self.env.now#<<
@@ -3548,7 +3555,8 @@ class Model:
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
@@ -4113,6 +4121,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
# Initialise distributions
@@ -4137,7 +4146,8 @@ class Model:
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/outputs_resources/all_measures/model.py b/pages/guide/output_analysis/outputs_resources/all_measures/model.py
index 655ccf0e..1d96f5cc 100644
--- a/pages/guide/output_analysis/outputs_resources/all_measures/model.py
+++ b/pages/guide/output_analysis/outputs_resources/all_measures/model.py
@@ -57,6 +57,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
self.area_n_in_system = [0]#<<
self.time_last_n_in_system = self.env.now#<<
@@ -100,7 +101,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/outputs_resources/model.py b/pages/guide/output_analysis/outputs_resources/model.py
index 146e76de..22a33866 100644
--- a/pages/guide/output_analysis/outputs_resources/model.py
+++ b/pages/guide/output_analysis/outputs_resources/model.py
@@ -49,6 +49,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []#<<
# Initialise distributions
@@ -73,7 +74,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/outputs_resources/model_monitored.py b/pages/guide/output_analysis/outputs_resources/model_monitored.py
index 31b9092b..c9ce31f5 100644
--- a/pages/guide/output_analysis/outputs_resources/model_monitored.py
+++ b/pages/guide/output_analysis/outputs_resources/model_monitored.py
@@ -49,6 +49,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
# Initialise distributions
@@ -73,7 +74,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/outputs_resources/model_timewithdoctor.py b/pages/guide/output_analysis/outputs_resources/model_timewithdoctor.py
index 440e1b0a..f4d7f5a0 100644
--- a/pages/guide/output_analysis/outputs_resources/model_timewithdoctor.py
+++ b/pages/guide/output_analysis/outputs_resources/model_timewithdoctor.py
@@ -49,6 +49,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
# Initialise distributions
@@ -73,7 +74,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/replications_resources/model.py b/pages/guide/output_analysis/replications_resources/model.py
index e4903c0d..a922c9de 100644
--- a/pages/guide/output_analysis/replications_resources/model.py
+++ b/pages/guide/output_analysis/replications_resources/model.py
@@ -57,6 +57,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
self.area_n_in_system = [0]
self.time_last_n_in_system = self.env.now
@@ -100,7 +101,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/output_analysis/warmup.qmd b/pages/guide/output_analysis/warmup.qmd
index 5ea00fe6..cbb18b4f 100644
--- a/pages/guide/output_analysis/warmup.qmd
+++ b/pages/guide/output_analysis/warmup.qmd
@@ -219,6 +219,7 @@ class Model:
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
# Initialise distributions
self.arrival_dist = Exponential(mean=self.param.interarrival_time,
@@ -242,7 +243,8 @@ class Model:
period = "\U0001F539 DC"#<<
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,#<<
arrival_time=self.env.now)
self.patients.append(patient)
@@ -322,7 +324,8 @@ else:
period = "\U0001F539 DC"
# Create a new patient
-patient = Patient(patient_id=len(self.patients)+1,
+self.patient_id_counter += 1
+patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)
diff --git a/pages/guide/setup/conceptual.qmd b/pages/guide/setup/conceptual.qmd
index daffcb69..9f9b8dfa 100644
--- a/pages/guide/setup/conceptual.qmd
+++ b/pages/guide/setup/conceptual.qmd
@@ -19,13 +19,13 @@ date: "2026-05-19T10:26:08+00:00"
* Understand what a **conceptual model** is and identify the key components of a conceptual model.
* Apply **model simplification** strategies to build the simplest model that meets study objectives.
-**Acknowledgements:** This page was written with reference to the excellent content on conceptual modelling in @Robinson2014.
+**Acknowledgements:** This page was written with reference to the excellent content on conceptual modelling in @Robinson2024.
:::
## What is a conceptual model?
-A **conceptual model** is a description of the simulation to be developed. It sits between the real-world problem and the computer implementation, capturing *what* the model needs to do before *how* it will be coded (@Robinson2014).
+A **conceptual model** is a description of the simulation to be developed. It sits between the real-world problem and the computer implementation, capturing *what* the model needs to do before *how* it will be coded (@Robinson2024).
Developing a conceptual model involves:
@@ -67,7 +67,7 @@ In practice, the boundaries between these methods are blurry. The goal at the co
## Components of a conceptual model
-@Robinson2014 break a conceptual model down into five key components:
+@Robinson2024 break a conceptual model down into five key components:
* Objectives
* Inputs
@@ -104,7 +104,7 @@ Outputs should map directly onto the objectives: if a statistic does not help an
### Content
-Model content has two dimensions (@Robinson2014):
+Model content has two dimensions (@Robinson2024):
::: {.blue-table}
@@ -124,7 +124,7 @@ Content can be represented using:
### Assumptions and simplifications
-Document every place where you depart from the real system, distinguishing two types (@Robinson2014):
+Document every place where you depart from the real system, distinguishing two types (@Robinson2024):
::: {.blue-table}
@@ -139,7 +139,7 @@ Both need to be recorded. Assumptions may need revisiting if better data become
## What makes a good model?
-A good model (@Robinson2014):
+A good model (@Robinson2024):
- Produces **sufficiently accurate results** for the purpose at hand (*validity*).
- Is **believed** by the clients and stakeholders (*credibility*).
@@ -148,14 +148,14 @@ A good model (@Robinson2014):
Overarching all four criteria is the requirement to build the **simplest model possible** to meet the objectives of the simulation study. Simpler models are faster to build and run, easier to understand and explain, and require less data.
-Models can be simplified by removing components or by representing components more simply - for example (@Robinson2014):
+Models can be simplified by removing components or by representing components more simply - for example (@Robinson2024):
* Replace a detailed section of an operation with a simple time delay.
* Rather than modelling a component explicitly, sample its effect from a statistical distribution (e.g. sample a delivery time directly rather than simulating the delivery process).
* Omit rare events from the base model; optionally explore them as separate scenarios.
* Divide a large model into two or more sub-models that can be run independently. This improves run speed but is only successful when there is no feedback between parts.
-A simplification is **good** if it brings the benefits of faster model development and run speed (feasibility and utility) while maintaining sufficient accuracy (validity) and credibility [@Robinson2014].
+A simplification is **good** if it brings the benefits of faster model development and run speed (feasibility and utility) while maintaining sufficient accuracy (validity) and credibility [@Robinson2024].
A practical way to calibrate this is to **prototype**: build the simplest plausible model first, then add scope or detail incrementally and check whether outputs change meaningfully. Stop when they stop changing.
diff --git a/pages/guide/setup/conceptual_resources/references.bib b/pages/guide/setup/conceptual_resources/references.bib
index 0d87944d..9b2b59b8 100644
--- a/pages/guide/setup/conceptual_resources/references.bib
+++ b/pages/guide/setup/conceptual_resources/references.bib
@@ -1,11 +1,11 @@
-@book{Robinson2014,
+@book{Robinson2024,
author = {Robinson, Stewart},
title = {Simulation: The Practice of Model Development and Use},
edition = {3},
year = {2024},
publisher = {Bloomsbury Academic},
address = {London},
- isbn = {9781352011401}
+ isbn = {9781350445550}
}
@article{Marshall2015,
diff --git a/pages/guide/setup/environment.qmd b/pages/guide/setup/environment.qmd
index a9b49fd4..05cf9a56 100644
--- a/pages/guide/setup/environment.qmd
+++ b/pages/guide/setup/environment.qmd
@@ -326,7 +326,44 @@ For most users, the best way to manage R versions is to use [`rig`](https://gith
### Install `rig`
-Follow the installation instructions for your operating system on the [rig GitHub](https://github.com/r-lib/rig) page. After installation, check that it works by running:
+Follow the installation instructions for your operating system on the [rig GitHub](https://github.com/r-lib/rig) page.
+
+::: {.callout-note collapse="true" title="Example: Pop_OS!"}
+
+First, follow the [rig GitHub](https://github.com/r-lib/rig) instructions:
+
+```{.bash}
+`which sudo` curl -L https://rig.r-pkg.org/deb/rig.gpg -o /etc/apt/trusted.gpg.d/rig.gpg
+`which sudo` sh -c 'echo "deb http://rig.r-pkg.org/deb rig main" > /etc/apt/sources.list.d/rig.list'
+`which sudo` apt update
+`which sudo` apt install r-rig
+```
+
+As Pop_OS! is not officially supported, we then also need to set the `RIG_PLATFORM`, [as described in this GitHub issue](https://github.com/r-lib/rig/issues/206#issuecomment-2057856982). First, let's find out what version the OS is:
+
+```{.bash}
+cat /etc/os-release
+```
+
+Then set the relevant `RIG_PLATFORM`, for example:
+
+```{.bash}
+echo 'export RIG_PLATFORM=ubuntu-24.04' >> ~/.profile
+```
+
+Apply the settings to your terminal and check we see `ubuntu-24.04` when run command below:
+
+```{.bash}
+source ~/.profile
+echo "$RIG_PLATFORM"
+rig system detect-platform
+```
+
+You should now be able to run rig commands (e.g., `rig add 4.4.1`).
+
+:::
+
+After installation, check that it works by running:
```{.bash}
rig --version
@@ -433,7 +470,7 @@ When working on a project from scratch, you will often build up your environment
To delete your environment, first deactivate it:
```{.bash}
-conda deactivate envname
+conda deactivate
```
You can then run:
@@ -994,7 +1031,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
Can check it has installed by running:
```{.bash}
-uv version
+uv self version
```
diff --git a/pages/guide/verification_validation/tests_resources/python_overall.csv b/pages/guide/verification_validation/tests_resources/python_overall.csv
index 31a24fc6..0afe9569 100644
--- a/pages/guide/verification_validation/tests_resources/python_overall.csv
+++ b/pages/guide/verification_validation/tests_resources/python_overall.csv
@@ -1,5 +1,5 @@
arrivals,mean_wait_time,mean_time_with_doctor,mean_utilisation_tw,mean_queue_length,mean_time_in_system,mean_patients_in_system,unseen_count,unseen_wait_time
8.4,3.6980002604678397,12.385909310097768,0.7280467614844883,1.1650943593485281,11.23532646310502,3.3492346438019935,1.6,6.170200985513401
4.39317652729776,3.6476898436199563,6.078558668847958,0.23282211721993226,1.7577071663684805,5.451946192617938,2.2862909049990146,2.5099800796022267,5.518049046713392
-2.9451508683005256,-0.8312048949685868,4.838381850019848,0.43895992054692123,-1.0173873485159723,4.4658411555872295,0.5104295376440096,-1.516551901050709,-7.537392746545424
-13.854849131699474,8.227205415904265,19.93343677017569,1.0171336024220554,3.3475760672130286,18.00481177062281,6.1880397499599775,4.716551901050709,19.877794717572225
+2.9451508683005363,-0.8312048949685789,4.8383818500198625,0.4389599205469218,-1.017387348515968,4.465841155587243,0.5104295376440149,-1.5165519010507031,-7.537392746715294
+13.854849131699464,8.227205415904258,19.933436770175675,1.0171336024220548,3.347576067213024,18.004811770622798,6.188039749959972,4.716551901050703,19.877794717742095
diff --git a/pages/guide/verification_validation/tests_resources/python_patient.csv b/pages/guide/verification_validation/tests_resources/python_patient.csv
index aee01c8e..869767a9 100644
--- a/pages/guide/verification_validation/tests_resources/python_patient.csv
+++ b/pages/guide/verification_validation/tests_resources/python_patient.csv
@@ -1,43 +1,43 @@
patient_id,period,arrival_time,wait_time,time_with_doctor,end_time,run,time_in_system,unseen_wait_time
-1,🔹 DC,37.778249941653414,0.0,19.610316954226214,57.38856689587963,0,19.610316954226214,
-2,🔹 DC,38.1081836468351,0.0,9.48973728190676,47.59792092874186,0,9.489737281906756,
-3,🔹 DC,42.610665625320905,4.987255303420952,41.66547519273915,,0,,
-4,🔹 DC,44.087985168504765,12.574405898760453,5.874479384820116,62.53687045208534,0,18.448885283580573,
-5,🔹 DC,55.587763291252145,1.8008036046274825,27.882443706199318,,0,,
-6,🔹 DC,64.88000734074431,0.0,24.91461474992887,,0,,
-7,🔹 DC,64.95429338327838,,,,0,,5.045706616721617
-1,🔹 DC,31.63025838252688,0.4935256435346993,21.46874418574885,53.59252821181043,1,21.962269829283553,
-2,🔹 DC,36.408782287417935,0.0,8.402275074734494,44.811057362152425,1,8.40227507473449,
-3,🔹 DC,37.174693284555296,3.549297894820299,4.22370472519968,44.947695904575276,1,7.77300262001998,
-4,🔹 DC,37.756151476097784,7.054905886054641,24.535513957946094,69.34657132009852,1,31.590419844000735,
-5,🔹 DC,41.3140364817759,3.6336594227993757,11.753835196333178,56.701531100908454,1,15.387494619132553,
-6,🔹 DC,42.08968620992036,11.502842001890073,5.2143971025138995,58.80692531432433,1,16.717239104403973,
-7,🔹 DC,43.39875120145619,13.302779899452261,35.25997611184963,,1,,
-8,🔹 DC,43.620174918676,15.186750395648332,3.105589171313569,61.9125144856379,1,18.2923395669619,
-9,🔹 DC,44.77250776243481,17.140006723203086,19.989189370767775,,1,,
-10,🔹 DC,45.89228449221967,23.454286827878846,10.531722434496317,,1,,
-11,🔹 DC,49.60683266708086,,,,1,,20.39316733291914
-12,🔹 DC,50.64965577265651,,,,1,,19.35034422734349
-13,🔹 DC,55.97182904483056,,,,1,,14.028170955169443
-14,🔹 DC,59.495785936988156,,,,1,,10.504214063011844
-15,🔹 DC,65.46987881678507,,,,1,,4.530121183214931
-16,🔹 DC,65.82271132227187,,,,1,,4.177288677728129
-1,🔹 DC,37.522238209035095,0.0,11.765445740602514,49.28768394963761,2,11.765445740602516,
-2,🔹 DC,38.73556206971949,10.552121879918118,11.924576101962534,61.21226005160015,2,22.476697981880655,
-3,🔹 DC,44.39766641947217,5.759020908140293,1.6433458807124062,51.80003320832488,2,7.402366788852703,
-4,🔹 DC,46.202295462099556,5.59773774622532,3.767369294641403,55.56740250296628,2,9.365107040866725,
-5,🔹 DC,58.280424617986434,0.0,1.556104608715715,59.83652922670215,2,1.5561046087157138,
-1,🔹 DC,34.4114890100761,0.0,6.933157696461979,41.344646706538086,3,6.933157696461983,
-2,🔹 DC,38.687761079588434,0.0,0.4018079964464093,39.08956907603484,3,0.40180799644640786,
-3,🔹 DC,47.79492926427886,0.0,3.6600656431530836,51.454994907431946,3,3.6600656431530822,
-4,🔹 DC,51.478815336513996,0.0,39.24606887173808,,3,,
-5,🔹 DC,65.91742299963842,0.0,3.81202294382412,69.72944594346254,3,3.812022943824118,
-6,🔹 DC,66.47292975619197,0.0,20.10444300708877,,3,,
-7,🔹 DC,67.32271052572582,2.406735417736712,8.659462871276256,,3,,
-8,🔹 DC,68.69898806674591,,,,3,,1.3010119332540881
-1,🔹 DC,44.324928443096475,0.0,5.084293332845218,49.409221775941695,4,5.0842933328452204,
-2,🔹 DC,44.851315721806955,0.0,5.327243417772931,50.17855913957989,4,5.327243417772934,
-3,🔹 DC,46.40434694509024,3.004874830851456,19.908329274143306,69.317551050085,4,22.91320410499476,
-4,🔹 DC,47.150296493860225,3.028262645719664,0.3543331135564007,50.53289225313629,4,3.3825957592760645,
-5,🔹 DC,53.58621614350521,0.0,13.568114169329387,67.1543303128346,4,13.568114169329391,
-6,🔹 DC,54.448043442914425,0.0,3.43269549211437,57.880738935028795,4,3.4326954921143695,
+6,🔹 DC,37.778249941653414,0.0,19.610316954226214,57.38856689587963,0,19.610316954226214,
+7,🔹 DC,38.1081836468351,0.0,9.48973728190676,47.59792092874186,0,9.489737281906756,
+8,🔹 DC,42.610665625320905,4.987255303420952,41.66547519273915,,0,,
+9,🔹 DC,44.087985168504765,12.574405898760453,5.874479384820116,62.53687045208534,0,18.448885283580573,
+10,🔹 DC,55.587763291252145,1.8008036046274825,27.882443706199318,,0,,
+11,🔹 DC,64.88000734074431,0.0,24.91461474992887,,0,,
+12,🔹 DC,64.95429338327838,,,,0,,5.045706616721617
+7,🔹 DC,31.63025838252688,0.4935256435346993,21.46874418574885,53.59252821181043,1,21.962269829283553,
+8,🔹 DC,36.408782287417935,0.0,8.402275074734494,44.811057362152425,1,8.40227507473449,
+9,🔹 DC,37.174693284555296,3.549297894820299,4.22370472519968,44.947695904575276,1,7.77300262001998,
+10,🔹 DC,37.756151476097784,7.054905886054641,24.535513957946094,69.34657132009852,1,31.590419844000735,
+11,🔹 DC,41.3140364817759,3.6336594227993757,11.753835196333178,56.701531100908454,1,15.387494619132553,
+12,🔹 DC,42.08968620992036,11.502842001890073,5.2143971025138995,58.80692531432433,1,16.717239104403973,
+13,🔹 DC,43.39875120145619,13.302779899452261,35.25997611184963,,1,,
+14,🔹 DC,43.620174918676,15.186750395648332,3.105589171313569,61.9125144856379,1,18.2923395669619,
+15,🔹 DC,44.77250776243481,17.140006723203086,19.989189370767775,,1,,
+16,🔹 DC,45.89228449221967,23.454286827878846,10.531722434496317,,1,,
+17,🔹 DC,49.60683266708086,,,,1,,20.39316733291914
+18,🔹 DC,50.64965577265651,,,,1,,19.35034422734349
+19,🔹 DC,55.97182904483056,,,,1,,14.028170955169443
+20,🔹 DC,59.495785936988156,,,,1,,10.504214063011844
+21,🔹 DC,65.46987881678507,,,,1,,4.530121183214931
+22,🔹 DC,65.82271132227187,,,,1,,4.177288677728129
+6,🔹 DC,37.522238209035095,0.0,11.765445740602514,49.28768394963761,2,11.765445740602516,
+7,🔹 DC,38.73556206971949,10.552121879918118,11.924576101962534,61.21226005160015,2,22.476697981880655,
+8,🔹 DC,44.39766641947217,5.759020908140293,1.6433458807124062,51.80003320832488,2,7.402366788852703,
+9,🔹 DC,46.202295462099556,5.59773774622532,3.767369294641403,55.56740250296628,2,9.365107040866725,
+10,🔹 DC,58.280424617986434,0.0,1.556104608715715,59.83652922670215,2,1.5561046087157138,
+9,🔹 DC,34.4114890100761,0.0,6.933157696461979,41.344646706538086,3,6.933157696461983,
+10,🔹 DC,38.687761079588434,0.0,0.4018079964464093,39.08956907603484,3,0.40180799644640786,
+11,🔹 DC,47.79492926427886,0.0,3.6600656431530836,51.454994907431946,3,3.6600656431530822,
+12,🔹 DC,51.478815336513996,0.0,39.24606887173808,,3,,
+13,🔹 DC,65.91742299963842,0.0,3.81202294382412,69.72944594346254,3,3.812022943824118,
+14,🔹 DC,66.47292975619197,0.0,20.10444300708877,,3,,
+15,🔹 DC,67.32271052572582,2.406735417736712,8.659462871276256,,3,,
+16,🔹 DC,68.69898806674591,,,,3,,1.3010119332540881
+3,🔹 DC,44.324928443096475,0.0,5.084293332845218,49.409221775941695,4,5.0842933328452204,
+4,🔹 DC,44.851315721806955,0.0,5.327243417772931,50.17855913957989,4,5.327243417772934,
+5,🔹 DC,46.40434694509024,3.004874830851456,19.908329274143306,69.317551050085,4,22.91320410499476,
+6,🔹 DC,47.150296493860225,3.028262645719664,0.3543331135564007,50.53289225313629,4,3.3825957592760645,
+7,🔹 DC,53.58621614350521,0.0,13.568114169329387,67.1543303128346,4,13.568114169329391,
+8,🔹 DC,54.448043442914425,0.0,3.43269549211437,57.880738935028795,4,3.4326954921143695,
diff --git a/pages/guide/verification_validation/tests_resources/simulation.py b/pages/guide/verification_validation/tests_resources/simulation.py
index 50390586..92ca116a 100644
--- a/pages/guide/verification_validation/tests_resources/simulation.py
+++ b/pages/guide/verification_validation/tests_resources/simulation.py
@@ -278,6 +278,7 @@ def __init__(self, param, run_number):
# Set up attributes to store results
self.patients = []
+ self.patient_id_counter = 0
self.results_list = []
self.area_n_in_system = [0]
self.time_last_n_in_system = self.env.now
@@ -321,7 +322,8 @@ def generate_arrivals(self):
period = "\U0001F539 DC"
# Create a new patient
- patient = Patient(patient_id=len(self.patients)+1,
+ self.patient_id_counter += 1
+ patient = Patient(patient_id=self.patient_id_counter,
period=period,
arrival_time=self.env.now)
self.patients.append(patient)