aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/metrics_plot
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2020-11-03 22:52:26 -0500
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2020-11-03 22:52:26 -0500
commit945f487a08b643392a5d5918c631640b9a0e4605 (patch)
treeb537c456e395950ce98daaabb9468c7c17d5a72b /Metrics/Metrics-Calculation/metrics_plot
parentFix numeric-solver-at-end (diff)
downloadVIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.tar.gz
VIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.tar.zst
VIATRA-Generator-945f487a08b643392a5d5918c631640b9a0e4605.zip
add realistic solver
Diffstat (limited to 'Metrics/Metrics-Calculation/metrics_plot')
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/.gitignore10
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.pngbin0 -> 76910 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.pngbin0 -> 80932 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.pngbin0 -> 81909 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.pngbin0 -> 80300 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.pngbin0 -> 85237 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.pngbin0 -> 90510 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.pngbin0 -> 85365 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.pngbin0 -> 88870 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.pngbin0 -> 93189 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.pngbin0 -> 51128 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.pngbin0 -> 43395 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.pngbin0 -> 52053 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.pngbin0 -> 79997 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.pngbin0 -> 76528 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.pngbin0 -> 33237 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.pngbin0 -> 30670 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.pngbin0 -> 28214 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.pngbin0 -> 93823 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.pngbin0 -> 81940 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.pngbin0 -> 41978 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.pngbin0 -> 47047 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.pngbin0 -> 53711 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.pngbin0 -> 111887 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb362
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb199
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.pngbin0 -> 276146 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.pngbin0 -> 292098 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.pngbin0 -> 264439 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.pngbin0 -> 292810 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.pngbin0 -> 257240 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.pngbin0 -> 297500 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.pngbin0 -> 254081 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.pngbin0 -> 292580 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.pngbin0 -> 80427 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.pngbin0 -> 49992 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.pngbin0 -> 109041 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.pngbin0 -> 241905 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.pngbin0 -> 289113 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.pngbin0 -> 284666 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.pngbin0 -> 332518 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.pngbin0 -> 183889 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.pngbin0 -> 230868 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.pngbin0 -> 238739 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.pngbin0 -> 197299 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.pngbin0 -> 244323 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.pngbin0 -> 145568 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.pngbin0 -> 153817 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.pngbin0 -> 132109 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.pngbin0 -> 147721 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 88476 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 73824 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 92754 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 116920 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 84045 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 121334 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 97444 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 87707 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 102356 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.pngbin0 -> 54225 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.pngbin0 -> 47898 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.pngbin0 -> 88876 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.pngbin0 -> 76828 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.pngbin0 -> 77517 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.pngbin0 -> 87612 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.pngbin0 -> 77938 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.pngbin0 -> 87383 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.pngbin0 -> 99046 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.pngbin0 -> 109723 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.pngbin0 -> 80099 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.pngbin0 -> 91912 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.pngbin0 -> 112332 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.pngbin0 -> 81639 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.pngbin0 -> 92200 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.pngbin0 -> 116546 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.pngbin0 -> 93653 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.pngbin0 -> 129648 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.pngbin0 -> 118510 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.pngbin0 -> 80223 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.pngbin0 -> 120029 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.pngbin0 -> 90540 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.pngbin0 -> 75339 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.pngbin0 -> 83932 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.pngbin0 -> 93499 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.pngbin0 -> 79559 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.pngbin0 -> 95080 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.pngbin0 -> 97946 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.pngbin0 -> 80895 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.pngbin0 -> 109969 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.pngbin0 -> 82899 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.pngbin0 -> 78754 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.pngbin0 -> 110541 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 93318 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 72012 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 111830 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 113112 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 98628 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 110816 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.pngbin0 -> 136233 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.pngbin0 -> 124315 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.pngbin0 -> 136745 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 116110 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 74006 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 117047 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 135531 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 95290 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 134916 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.pngbin0 -> 184969 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.pngbin0 -> 139857 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.pngbin0 -> 186513 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 95465 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 93444 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 97919 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.pngbin0 -> 92255 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.pngbin0 -> 87694 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.pngbin0 -> 86352 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.pngbin0 -> 98310 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.pngbin0 -> 85826 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.pngbin0 -> 86139 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.pngbin0 -> 127107 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.pngbin0 -> 118735 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.pngbin0 -> 116864 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.pngbin0 -> 85397 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.pngbin0 -> 87774 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.pngbin0 -> 95122 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.pngbin0 -> 171018 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.pngbin0 -> 114184 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.pngbin0 -> 139638 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.pngbin0 -> 69041 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.pngbin0 -> 50629 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.pngbin0 -> 60762 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.pngbin0 -> 97403 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.pngbin0 -> 88084 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.pngbin0 -> 87391 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.pngbin0 -> 260244 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.pngbin0 -> 284435 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.pngbin0 -> 240919 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.pngbin0 -> 267128 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.pngbin0 -> 259504 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.pngbin0 -> 283224 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.pngbin0 -> 249861 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.pngbin0 -> 276261 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.pngbin0 -> 250477 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.pngbin0 -> 275605 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.pngbin0 -> 213651 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.pngbin0 -> 220028 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.pngbin0 -> 259490 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.pngbin0 -> 279286 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.pngbin0 -> 245269 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.pngbin0 -> 264147 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.pngbin0 -> 212431 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.pngbin0 -> 218167 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.pngbin0 -> 167662 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.pngbin0 -> 187842 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.pngbin0 -> 132637 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.pngbin0 -> 141912 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.pngbin0 -> 255461 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.pngbin0 -> 269454 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.pngbin0 -> 206259 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.pngbin0 -> 235800 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.pngbin0 -> 225675 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.pngbin0 -> 230053 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.pngbin0 -> 198476 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.pngbin0 -> 226169 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py158
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpgbin0 -> 456785 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpgbin0 -> 417210 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpgbin0 -> 334113 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpgbin0 -> 485539 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpgbin0 -> 458414 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpgbin0 -> 399413 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpgbin0 -> 450131 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpgbin0 -> 492440 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpgbin0 -> 427143 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpgbin0 -> 387627 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpgbin0 -> 439155 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpgbin0 -> 368624 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpgbin0 -> 363202 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpgbin0 -> 367839 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpgbin0 -> 284983 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpgbin0 -> 208107 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpgbin0 -> 157479 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpgbin0 -> 199042 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpgbin0 -> 332516 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpgbin0 -> 316516 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpgbin0 -> 266138 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpgbin0 -> 509668 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpgbin0 -> 507236 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpgbin0 -> 500415 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpgbin0 -> 432110 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpgbin0 -> 390522 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpgbin0 -> 332996 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpgbin0 -> 581421 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpgbin0 -> 558356 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpgbin0 -> 534429 bytes
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb481
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb1600
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb392
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore3
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb435
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py77
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py53
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py46
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/constants.py35
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py186
208 files changed, 4046 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/metrics_plot/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/.gitignore
new file mode 100644
index 00000000..dc53b109
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/.gitignore
@@ -0,0 +1,10 @@
1# virtual enviroment
2venv/
3
4# python cache
5*.pyc
6.ipynb_checkpoints/
7.idea/
8
9# keep folders
10!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore
new file mode 100644
index 00000000..b3934b01
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/input/.gitignore
@@ -0,0 +1,3 @@
1# ignore everything in this folder
2*
3!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png
new file mode 100644
index 00000000..a8772bdd
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png
new file mode 100644
index 00000000..9defdaff
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png
new file mode 100644
index 00000000..e98559bb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Node_Type.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png
new file mode 100644
index 00000000..eec3f95e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/ecore/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png
new file mode 100644
index 00000000..20df6086
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png
new file mode 100644
index 00000000..c7c18186
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png
new file mode 100644
index 00000000..6d7230db
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Node_Type.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png
new file mode 100644
index 00000000..eb157b8e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/distances/yakindumm/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png
new file mode 100644
index 00000000..b8930a7b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png
new file mode 100644
index 00000000..d55a000c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png
new file mode 100644
index 00000000..554923f5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Node_Type.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png
new file mode 100644
index 00000000..1a605f9a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png
new file mode 100644
index 00000000..719249d4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/ecore/Violations.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png
new file mode 100644
index 00000000..8f59786d
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png
new file mode 100644
index 00000000..a3775f23
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png
new file mode 100644
index 00000000..5d3f81e1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Node_Type.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png
new file mode 100644
index 00000000..a89eb552
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png
new file mode 100644
index 00000000..50a4cba0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/github/Violations.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png
new file mode 100644
index 00000000..fcff0dfe
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png
new file mode 100644
index 00000000..ad44025f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png
new file mode 100644
index 00000000..a61d6e5a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Node_Type.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png
new file mode 100644
index 00000000..4749db22
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png
new file mode 100644
index 00000000..ac09e580
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/output/yakindumm/Violations.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb
new file mode 100644
index 00000000..5db66bb3
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb
@@ -0,0 +1,362 @@
1{
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 173,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import matplotlib.pyplot as plt\n",
10 "import statistics\n",
11 "import os\n",
12 "import sys\n",
13 "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n",
14 "sys.path.append(lib_path)\n",
15 "from GraphType import GraphStat\n",
16 "import readCSV as reader\n",
17 "import constants\n",
18 "import DistributionMetrics as metrics"
19 ]
20 },
21 {
22 "cell_type": "code",
23 "execution_count": 174,
24 "metadata": {},
25 "outputs": [],
26 "source": [
27 "def getModels(folderName, numberOfModels):\n",
28 " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
29 " graphStats = [GraphStat(filename) for filename in filenames]\n",
30 " return graphStats"
31 ]
32 },
33 {
34 "cell_type": "markdown",
35 "metadata": {},
36 "source": [
37 "## Import"
38 ]
39 },
40 {
41 "cell_type": "code",
42 "execution_count": 175,
43 "metadata": {},
44 "outputs": [],
45 "source": [
46 "domain = 'github'\n",
47 "mpc_guide = getModels('../input/{}/MPC/'.format(domain), 100)\n",
48 "na_guide = getModels('../input/{}/NodeActivity/'.format(domain), 100)\n",
49 "od_guide = getModels('../input/{}/OutDegree/'.format(domain), 100)\n",
50 "nt_guide = getModels('../input/{}/NodeType/'.format(domain), 100)\n",
51 "composite_guide = getModels('../input/{}/Composite/'.format(domain), 100)\n",
52 "composite_no_violations_guide = getModels('../input/{}/Composite_Without_Violations/'.format(domain), 100)\n",
53 "violations_guide = getModels('../input/{}/Violations/'.format(domain), 100)\n",
54 "human = getModels('../input/{}/Human/'.format(domain), 304)\n",
55 "model_types = [human, composite_guide, composite_no_violations_guide, mpc_guide, na_guide, od_guide, nt_guide, violations_guide]"
56 ]
57 },
58 {
59 "cell_type": "code",
60 "execution_count": 176,
61 "metadata": {},
62 "outputs": [],
63 "source": [
64 "if domain == 'yakindumm':\n",
65 " type_map = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n",
66 "elif domain == 'ecore':\n",
67 " type_map = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n",
68 "elif domain == 'github':\n",
69 " type_map = {'Project': 0.012636538873420432, 'Commit': 0.5525808524309276, 'User': 0.05847076461769116, 'Issue': 0.12743628185907047, 'PullRequest': 0.07560505461554937, 'IssueEvent': 0.17327050760334123}"
70 ]
71 },
72 {
73 "cell_type": "code",
74 "execution_count": 177,
75 "metadata": {},
76 "outputs": [],
77 "source": [
78 "# import rep\n",
79 "mpc_rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)\n",
80 "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)\n",
81 "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)\n",
82 "rep = mpc_rep[0]\n",
83 "rep.na = na_rep[0].na\n",
84 "rep.out_d = od_rep[0].out_d\n",
85 "rep.nodeTypeStat = type_map"
86 ]
87 },
88 {
89 "cell_type": "markdown",
90 "metadata": {},
91 "source": [
92 "### Helper Functions"
93 ]
94 },
95 {
96 "cell_type": "code",
97 "execution_count": 178,
98 "metadata": {},
99 "outputs": [],
100 "source": [
101 "def calculate_ks(dist1, dist2):\n",
102 " value, p= metrics.ks_distance(dist1, dist2)\n",
103 " return value"
104 ]
105 },
106 {
107 "cell_type": "code",
108 "execution_count": 179,
109 "metadata": {},
110 "outputs": [],
111 "source": [
112 "def mkdir(path):\n",
113 " if not os.path.exists(path):\n",
114 " os.makedirs(path)"
115 ]
116 },
117 {
118 "cell_type": "markdown",
119 "metadata": {},
120 "source": [
121 "### Plot Config"
122 ]
123 },
124 {
125 "cell_type": "code",
126 "execution_count": 180,
127 "metadata": {},
128 "outputs": [],
129 "source": [
130 "output_path = '../output/{}/'.format(domain)\n",
131 "mkdir(output_path)"
132 ]
133 },
134 {
135 "cell_type": "markdown",
136 "metadata": {},
137 "source": [
138 "### Draw diagrams"
139 ]
140 },
141 {
142 "cell_type": "code",
143 "execution_count": 181,
144 "metadata": {},
145 "outputs": [],
146 "source": [
147 "def drawBoxDiagram(title, target, types, distance_func, label_position):\n",
148 " distances = []\n",
149 " for distributions in types:\n",
150 " distances.append([distance_func(target, distribution) for distribution in distributions])\n",
151 " fig, ax1 = plt.subplots()\n",
152 " fig.set_size_inches(5, 2)\n",
153 " result = plt.boxplot(distances)\n",
154 " ax1.xaxis.set_ticks_position(label_position) \n",
155 " texts = ax1.set_xticklabels(labels, rotation=90, fontsize=12)\n",
156 " plt.savefig('{}/{}.png'.format(output_path, title), dpi=500, bbox_inches=\"tight\")"
157 ]
158 },
159 {
160 "cell_type": "code",
161 "execution_count": 182,
162 "metadata": {},
163 "outputs": [
164 {
165 "data": {
166 "image/png": "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\n",
167 "text/plain": [
168 "<Figure size 360x144 with 1 Axes>"
169 ]
170 },
171 "metadata": {
172 "needs_background": "light"
173 },
174 "output_type": "display_data"
175 }
176 ],
177 "source": [
178 "# draw mpc\n",
179 "mpc_types = []\n",
180 "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD', 'NTD', 'VIO']\n",
181 "for models in model_types:\n",
182 " mpc_types.append([model.mpc for model in models])\n",
183 "drawBoxDiagram('MPC', rep.mpc, mpc_types, calculate_ks, 'top')"
184 ]
185 },
186 {
187 "cell_type": "code",
188 "execution_count": 183,
189 "metadata": {},
190 "outputs": [
191 {
192 "data": {
193 "image/png": "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\n",
194 "text/plain": [
195 "<Figure size 360x144 with 1 Axes>"
196 ]
197 },
198 "metadata": {
199 "needs_background": "light"
200 },
201 "output_type": "display_data"
202 }
203 ],
204 "source": [
205 "# draw node activity\n",
206 "na_types = []\n",
207 "labels = []\n",
208 "for models in model_types:\n",
209 " na_types.append([model.na for model in models])\n",
210 "drawBoxDiagram('Node_Activity', rep.na, na_types, calculate_ks, 'top')"
211 ]
212 },
213 {
214 "cell_type": "code",
215 "execution_count": 184,
216 "metadata": {},
217 "outputs": [
218 {
219 "data": {
220 "image/png": "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\n",
221 "text/plain": [
222 "<Figure size 360x144 with 1 Axes>"
223 ]
224 },
225 "metadata": {
226 "needs_background": "light"
227 },
228 "output_type": "display_data"
229 }
230 ],
231 "source": [
232 "# draw out degree\n",
233 "out_d_types = []\n",
234 "labels = []\n",
235 "for models in model_types:\n",
236 " out_d_types.append([model.out_d for model in models])\n",
237 "drawBoxDiagram('Out_Degree', rep.out_d, out_d_types, calculate_ks, 'top')"
238 ]
239 },
240 {
241 "cell_type": "code",
242 "execution_count": 185,
243 "metadata": {},
244 "outputs": [],
245 "source": [
246 "def manual_ks(pdf1, pdf2):\n",
247 " result = 0\n",
248 " sum1 = 0\n",
249 " sum2 = 0\n",
250 " for(a, b) in zip(pdf1, pdf2):\n",
251 " sum1 += a\n",
252 " sum2 += b\n",
253 " result = max(result, abs(sum1-sum2))\n",
254 " return result\n"
255 ]
256 },
257 {
258 "cell_type": "code",
259 "execution_count": 186,
260 "metadata": {},
261 "outputs": [
262 {
263 "name": "stdout",
264 "output_type": "stream",
265 "text": [
266 "['Commit', 'Issue', 'IssueEvent', 'Project', 'PullRequest', 'User']\n"
267 ]
268 },
269 {
270 "data": {
271 "image/png": "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\n",
272 "text/plain": [
273 "<Figure size 360x144 with 1 Axes>"
274 ]
275 },
276 "metadata": {
277 "needs_background": "light"
278 },
279 "output_type": "display_data"
280 }
281 ],
282 "source": [
283 "# draw node type\n",
284 "labels = []\n",
285 "types = sorted(rep.nodeTypeStat.keys())\n",
286 "rep_type_dist = [float(rep.nodeTypeStat[key]) for key in types]\n",
287 "print(types)\n",
288 "node_type_types = []\n",
289 "for models in model_types:\n",
290 " type_dists = []\n",
291 " for model in models:\n",
292 " type_dists.append([float(model.nodeTypeStat.get(key, 0)) for key in types])\n",
293 " node_type_types.append(type_dists)\n",
294 "\n",
295 "#since we already know the pdf, we can compute the ks distance manually\n",
296 "drawBoxDiagram('Node_Type', rep_type_dist, node_type_types, manual_ks, 'top')"
297 ]
298 },
299 {
300 "cell_type": "code",
301 "execution_count": 187,
302 "metadata": {},
303 "outputs": [
304 {
305 "data": {
306 "image/png": "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\n",
307 "text/plain": [
308 "<Figure size 360x144 with 1 Axes>"
309 ]
310 },
311 "metadata": {
312 "needs_background": "light"
313 },
314 "output_type": "display_data"
315 }
316 ],
317 "source": [
318 "# draw violations\n",
319 "violation_types = []\n",
320 "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD', 'NTD', 'VIO']\n",
321 "for models in model_types:\n",
322 " violation_types.append([model.violations for model in models])\n",
323 "drawBoxDiagram('Violations', None, violation_types, lambda a, b:b, 'bottom')"
324 ]
325 },
326 {
327 "cell_type": "code",
328 "execution_count": null,
329 "metadata": {},
330 "outputs": [],
331 "source": []
332 },
333 {
334 "cell_type": "code",
335 "execution_count": null,
336 "metadata": {},
337 "outputs": [],
338 "source": []
339 }
340 ],
341 "metadata": {
342 "kernelspec": {
343 "display_name": "Python 3",
344 "language": "python",
345 "name": "python3"
346 },
347 "language_info": {
348 "codemirror_mode": {
349 "name": "ipython",
350 "version": 3
351 },
352 "file_extension": ".py",
353 "mimetype": "text/x-python",
354 "name": "python",
355 "nbconvert_exporter": "python",
356 "pygments_lexer": "ipython3",
357 "version": "3.7.3"
358 }
359 },
360 "nbformat": 4,
361 "nbformat_minor": 2
362}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb
new file mode 100644
index 00000000..44842cf4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/DistancePlot.ipynb
@@ -0,0 +1,199 @@
1{
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 6,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import os, sys\n",
10 "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n",
11 "sys.path.append(lib_path)\n",
12 "import glob\n",
13 "import matplotlib.pyplot as plt\n",
14 "from GraphType import GraphCollection\n",
15 "import DistributionMetrics as metrics\n",
16 "from GraphType import GraphStat\n",
17 "import readCSV as reader\n"
18 ]
19 },
20 {
21 "cell_type": "code",
22 "execution_count": 7,
23 "metadata": {},
24 "outputs": [],
25 "source": [
26 "def getModels(folderName, numberOfModels):\n",
27 " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
28 " graphStats = [GraphStat(filename) for filename in filenames]\n",
29 " return graphStats"
30 ]
31 },
32 {
33 "cell_type": "code",
34 "execution_count": 109,
35 "metadata": {},
36 "outputs": [],
37 "source": [
38 "# read models\n",
39 "domain = 'ecore'\n",
40 "rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)[0]\n",
41 "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)[0]\n",
42 "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)[0]\n",
43 "rep.na = na_rep.na\n",
44 "rep.out_d = od_rep.out_d\n",
45 "\n",
46 "human_models = getModels('../input/{}/Human/'.format(domain), 304)\n",
47 "folder = '../output/distances/{}/'.format(domain)\n",
48 "mkdir(folder)"
49 ]
50 },
51 {
52 "cell_type": "code",
53 "execution_count": 111,
54 "metadata": {},
55 "outputs": [],
56 "source": [
57 "if domain == 'yakindumm':\n",
58 " rep.nodeTypeStat = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n",
59 "elif domain == 'ecpre':\n",
60 " rep.nodeTypeStat = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n",
61 "node_types = sorted(rep.nodeTypeStat.keys())"
62 ]
63 },
64 {
65 "cell_type": "code",
66 "execution_count": 112,
67 "metadata": {},
68 "outputs": [],
69 "source": [
70 "def plot_diagram(name, models, rep, metric, distance_metric):\n",
71 " model_metrics = list(map(metric, models))\n",
72 " rep = metric(rep)\n",
73 " distances= list(map(lambda m: distance_metric(m,rep), model_metrics))\n",
74 " plt.figure()\n",
75 " plt.title('{} for {}'.format(name, domain))\n",
76 " plt.hist(distances)\n",
77 " plt.savefig('{}/{}.png'.format(folder, name), dpi = 500)"
78 ]
79 },
80 {
81 "cell_type": "code",
82 "execution_count": 113,
83 "metadata": {},
84 "outputs": [],
85 "source": [
86 "def mpc(model):\n",
87 " return model.mpc\n",
88 "def na(model):\n",
89 " return model.na\n",
90 "def od(model):\n",
91 " return model.out_d\n",
92 "\n",
93 "def nt(model):\n",
94 " nd_dict = model.nodeTypeStat\n",
95 " dist = []\n",
96 " for key in node_types:\n",
97 " dist.append(nd_dict.get(key, 0))\n",
98 " return dist\n",
99 "\n",
100 "def mkdir(path):\n",
101 " if not os.path.exists(path):\n",
102 " os.makedirs(path)\n",
103 "\n",
104 "def ks_distance(s1, s2):\n",
105 " value, p = metrics.ks_distance(s1, s2)\n",
106 " return value"
107 ]
108 },
109 {
110 "cell_type": "code",
111 "execution_count": 114,
112 "metadata": {},
113 "outputs": [
114 {
115 "data": {
116 "image/png": "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\n",
117 "text/plain": [
118 "<Figure size 432x288 with 1 Axes>"
119 ]
120 },
121 "metadata": {
122 "needs_background": "light"
123 },
124 "output_type": "display_data"
125 },
126 {
127 "data": {
128 "image/png": "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\n",
129 "text/plain": [
130 "<Figure size 432x288 with 1 Axes>"
131 ]
132 },
133 "metadata": {
134 "needs_background": "light"
135 },
136 "output_type": "display_data"
137 },
138 {
139 "data": {
140 "image/png": "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\n",
141 "text/plain": [
142 "<Figure size 432x288 with 1 Axes>"
143 ]
144 },
145 "metadata": {
146 "needs_background": "light"
147 },
148 "output_type": "display_data"
149 },
150 {
151 "data": {
152 "image/png": "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\n",
153 "text/plain": [
154 "<Figure size 432x288 with 1 Axes>"
155 ]
156 },
157 "metadata": {
158 "needs_background": "light"
159 },
160 "output_type": "display_data"
161 }
162 ],
163 "source": [
164 "plot_diagram('MPC', human_models, rep, mpc, ks_distance)\n",
165 "plot_diagram('Node_Activity', human_models, rep, na, ks_distance)\n",
166 "plot_diagram('Out_Degree', human_models, rep, od, ks_distance)\n",
167 "plot_diagram('Node_Type', human_models, rep, nt, metrics.manual_ks)\n"
168 ]
169 },
170 {
171 "cell_type": "code",
172 "execution_count": null,
173 "metadata": {},
174 "outputs": [],
175 "source": []
176 }
177 ],
178 "metadata": {
179 "kernelspec": {
180 "display_name": "Python 3",
181 "language": "python",
182 "name": "python3"
183 },
184 "language_info": {
185 "codemirror_mode": {
186 "name": "ipython",
187 "version": 3
188 },
189 "file_extension": ".py",
190 "mimetype": "text/x-python",
191 "name": "python",
192 "nbconvert_exporter": "python",
193 "pygments_lexer": "ipython3",
194 "version": "3.7.3"
195 }
196 },
197 "nbformat": 4,
198 "nbformat_minor": 2
199}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore
new file mode 100644
index 00000000..b3934b01
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/input/.gitignore
@@ -0,0 +1,3 @@
1# ignore everything in this folder
2*
3!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png
new file mode 100644
index 00000000..ae4f5900
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png
new file mode 100644
index 00000000..c94b8c2c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png
new file mode 100644
index 00000000..70abdd5b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png
new file mode 100644
index 00000000..fe138084
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png
new file mode 100644
index 00000000..a8a655f8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png
new file mode 100644
index 00000000..bc83145d
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png
new file mode 100644
index 00000000..ee97529b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png
new file mode 100644
index 00000000..0f6e8538
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Human-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
new file mode 100644
index 00000000..d7ed3bbb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
new file mode 100644
index 00000000..8a20963d
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
new file mode 100644
index 00000000..4354656c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png
new file mode 100644
index 00000000..b52aa827
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png
new file mode 100644
index 00000000..6adb45e2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/MPC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png
new file mode 100644
index 00000000..e257f381
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png
new file mode 100644
index 00000000..2672ee2c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png
new file mode 100644
index 00000000..33adbfe9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png
new file mode 100644
index 00000000..d64df78b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Activity_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png
new file mode 100644
index 00000000..eb245365
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Node_Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png
new file mode 100644
index 00000000..2c8f53f6
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png
new file mode 100644
index 00000000..86b7c3a0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-BaseViatra-RealViatra-Random-rep-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png
new file mode 100644
index 00000000..81085eab
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png
new file mode 100644
index 00000000..e92f1b26
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Node Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png
new file mode 100644
index 00000000..25b35ee7
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png
new file mode 100644
index 00000000..d2c660c0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Alloy-rep-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..df162a5a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..703f9c56
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..873a40c1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Human rep-Viatra consistent (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..826b797f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..babf7266
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..31f74863
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..a4717b87
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..946f2aa1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..668423cc
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
new file mode 100644
index 00000000..f4301083
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
new file mode 100644
index 00000000..fd27fdd4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
new file mode 100644
index 00000000..39fc0cf9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Alloy (30 nodes)-Realistic Viatra with Node Type KS (100 nodes)-Human-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
new file mode 100644
index 00000000..545aab79
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..6e92f726
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..a57f399b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Human rep-Realistic Viatra with Node Type KS (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
new file mode 100644
index 00000000..30d74805
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..2e34fead
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..bc9d6016
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Realistic Viatra no Exit (100 nodes)-Realistic Viatra consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..39e1c4ec
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..16ac54dd
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..99ebd383
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png
new file mode 100644
index 00000000..08983af2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..704ac0f4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..93ba4a66
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra V2 (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
new file mode 100644
index 00000000..e0d5b199
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..ddcc2451
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..e0ea1c75
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra containers (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
new file mode 100644
index 00000000..430e7279
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..fc15d7f5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..20499e22
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra new (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png
new file mode 100644
index 00000000..ab519eaa
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..7726b292
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..5416c350
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Realistic Viatra no Exit (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png
new file mode 100644
index 00000000..601fc7f1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..76773aa4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..2e459f1a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra (100 nodes)-Viatra Consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png
new file mode 100644
index 00000000..9d12c2d8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..56745bc0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..24f29731
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra no Exit Final (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png
new file mode 100644
index 00000000..dcd1eaa2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..ac912936
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..4c9abbcb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/KS Distance/Human-Viatra consistent (100 nodes)-Realistic Viatra (100 nodes)-Realistic Viatra with Node Type (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..4f8e97e2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..7c2b5752
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..3cf659b2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..50b882da
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..4e9a68d5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..bfa4b537
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
new file mode 100644
index 00000000..33176821
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
new file mode 100644
index 00000000..53c46e6f
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
new file mode 100644
index 00000000..abf45ff1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/Euclidean_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..07c97401
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..f2fb5229
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..d2677e99
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..a375c676
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..d69cd298
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..0584ac99
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
new file mode 100644
index 00000000..016cc2a3
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
new file mode 100644
index 00000000..55d32444
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
new file mode 100644
index 00000000..99cbbae4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/JS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..b8480ae0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..82268167
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..41bcd510
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Realistic Viatra With Some Constraints (100 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
new file mode 100644
index 00000000..b19bb958
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..cccabc4e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..947ebdd2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
new file mode 100644
index 00000000..0ff4ee89
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
new file mode 100644
index 00000000..1f9e2e18
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
new file mode 100644
index 00000000..2c63cc3a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Alloy (30 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
new file mode 100644
index 00000000..8d76fed9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
new file mode 100644
index 00000000..daa7929a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
new file mode 100644
index 00000000..e56b1b6e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..8705cee2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..bdab3741
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..e4269f6e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Random-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
new file mode 100644
index 00000000..e4b6b527
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..e067ad66
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..9b89e4f9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra (30 nodes)-Viatra (60 nodes)-Viatra (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
new file mode 100644
index 00000000..820df5c7
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
new file mode 100644
index 00000000..b6aa957a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
new file mode 100644
index 00000000..161041d9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/Human-Viatra consistent (100 nodes)-/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png
new file mode 100644
index 00000000..4f189578
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png
new file mode 100644
index 00000000..add3c0f8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Node Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png
new file mode 100644
index 00000000..f4717a1a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/Yakindumm/old measurements/KS_Distance/real vs viatra vs alloy/Out Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png
new file mode 100644
index 00000000..d184e5bf
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
new file mode 100644
index 00000000..0dea77f2
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
new file mode 100644
index 00000000..192fe6f0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
new file mode 100644
index 00000000..4db337ef
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png
new file mode 100644
index 00000000..2f24cda9
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
new file mode 100644
index 00000000..14dcc501
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
new file mode 100644
index 00000000..6f40ea4d
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
new file mode 100644
index 00000000..f2e3230b
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/ecore/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png
new file mode 100644
index 00000000..834a91aa
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
new file mode 100644
index 00000000..b3783c77
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
new file mode 100644
index 00000000..2828f1fd
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
new file mode 100644
index 00000000..4a50e619
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png
new file mode 100644
index 00000000..991ff1ff
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
new file mode 100644
index 00000000..d13686c8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
new file mode 100644
index 00000000..12b4ce33
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
new file mode 100644
index 00000000..03fe9740
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/github/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png
new file mode 100644
index 00000000..31a83155
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png
new file mode 100644
index 00000000..e29f59cb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-/TCC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png
new file mode 100644
index 00000000..a3d56a23
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png
new file mode 100644
index 00000000..58cefaff
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Rand-GS-Real-/TCC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png
new file mode 100644
index 00000000..e9614b89
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png
new file mode 100644
index 00000000..f0cee20a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/test/Hum-Real-/TCC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png
new file mode 100644
index 00000000..a53bda79
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
new file mode 100644
index 00000000..7a49fb91
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/MPC_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
new file mode 100644
index 00000000..bf6ca9ba
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
new file mode 100644
index 00000000..d82a124e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Activity_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png
new file mode 100644
index 00000000..0e7b1e46
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
new file mode 100644
index 00000000..7f9e560e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Node_Types_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
new file mode 100644
index 00000000..928a0704
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
new file mode 100644
index 00000000..0059a925
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/output/yakindu/Hum-All-Rand-GS-Real-Med-/Out_Degree_lengend.png
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py
new file mode 100644
index 00000000..75fe78eb
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model comparison/src/plot_ks_stats.py
@@ -0,0 +1,158 @@
1import os, sys
2lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))
3sys.path.append(lib_path)
4import glob
5import random
6from sklearn.manifold import MDS
7import matplotlib.pyplot as plt
8from scipy import stats
9import numpy as np
10from GraphType import GraphCollection
11import DistributionMetrics as metrics
12
13def main():
14 domain = 'github'
15 # read models
16 alloy = GraphCollection('../input/measurement2/{}/Alloy/'.format(domain), 100, 'All')
17 human = GraphCollection('../input/measurement2/{}/Human/'.format(domain), 304, 'Hum')
18 base = GraphCollection('../input/measurement2/{}/BaseViatra/'.format(domain), 100, 'GS')
19 real = GraphCollection('../input/measurement2/{}/RealViatra/'.format(domain), 100, 'Real')
20 random = GraphCollection('../input/measurement2/{}/Random/'.format(domain), 100, 'Rand')
21 na_rep = GraphCollection('../input/measurement2/{}/Human/na_rep/'.format(domain), 1, 'Med')
22 mpc_rep = GraphCollection('../input/measurement2/{}/Human/mpc_rep/'.format(domain), 1, 'Med')
23 od_rep = GraphCollection('../input/measurement2/{}/Human/od_rep/'.format(domain), 1, 'Med')
24
25 # a hack to make the node type as the same as an exiting model
26 type_rep = GraphCollection('../input/measurement2/{}/Human/od_rep/'.format(domain), 1, 'Med')
27 if(domain == 'yakindu'):
28 type_rep.nts = [{'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}]
29 elif (domain == 'ecore'):
30 type_rep.nts = [{'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}]
31 elif (domain == 'github'):
32 type_rep.nts = [{'Project': 0.012636538873420432, 'Commit': 0.5525808524309276, 'User': 0.05847076461769116, 'Issue': 0.12743628185907047, 'PullRequest': 0.07560505461554937, 'IssueEvent': 0.17327050760334123}]
33
34 types = sorted(type_rep.nts[0].keys())
35
36 model_collections = [human, alloy, random, base, real]
37 for model_collection in model_collections:
38 print(model_collection.name)
39 length = len(model_collection.violations)
40 percentage = sum(map(lambda v: int(v==0), model_collection.violations)) / length
41 print(percentage)
42
43
44 models_to_compare_na = [human, alloy, random, base, real, na_rep]
45 models_to_compare_mpc = [human, alloy, random, base, real, mpc_rep]
46 models_to_compare_od = [human, alloy, random, base, real, od_rep]
47 models_to_compare_nt = [human, alloy, random, base, real, type_rep]
48 for modelCollection in models_to_compare_nt:
49 type_dists = []
50 for nt in modelCollection.nts:
51 type_dist = []
52 for key in types:
53 type_dist.append(nt.get(key, 0.0))
54 type_dists.append(type_dist)
55 modelCollection.nts = type_dists
56
57
58 # define output folder
59 outputFolder = '../output/{}/'.format(domain)
60
61 #calculate metrics
62 metricStat(models_to_compare_na, 'Node_Activity', nodeActivity, 0, outputFolder, calculateKSMatrix)
63 metricStat(models_to_compare_od, 'Out_Degree', outDegree, 1, outputFolder, calculateKSMatrix)
64 metricStat(models_to_compare_mpc, 'MPC', mpc, 2, outputFolder, calculateKSMatrix)
65 metricStat(models_to_compare_nt, 'Node_Types', nodeType, 3, outputFolder, calculateManualKSMatrix)
66
67def calculateKSMatrix(dists):
68 dist = []
69
70 for i in range(len(dists)):
71 dist = dist + dists[i]
72 matrix = np.empty((len(dist),len(dist)))
73
74 for i in range(len(dist)):
75 matrix[i,i] = 0
76 for j in range(i+1, len(dist)):
77 value, p= metrics.ks_distance(dist[i], dist[j])
78 matrix[i, j] = value
79 matrix[j, i] = value
80 return matrix
81
82def calculateManualKSMatrix(dists):
83 dist = []
84
85 for i in range(len(dists)):
86 dist = dist + dists[i]
87 matrix = np.empty((len(dist),len(dist)))
88
89 for i in range(len(dist)):
90 matrix[i,i] = 0
91 for j in range(i+1, len(dist)):
92 value = metrics.manual_ks(dist[i], dist[j])
93 matrix[i, j] = value
94 matrix[j, i] = value
95 return matrix
96
97
98def calculateMDS(dissimilarities):
99 embedding = MDS(n_components=2, dissimilarity='precomputed')
100 trans = embedding.fit_transform(X=dissimilarities)
101 return trans
102
103def plot(graphTypes, coords, title='',index = 0, savePath = ''):
104 color = ['#377eb8' , '#e41a1c', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33']
105 markers = ['o', '+', 'x', '^', 'v', '*']
106 fill_styles = ['full', 'full', 'full', 'none', 'none', 'full']
107 plt.figure(index, figsize=(5, 2))
108 # plt.title(title)
109 index = 0
110 for i in range(len(graphTypes)):
111 x = (coords[index:index+graphTypes[i].size, 0].tolist())
112 y = (coords[index:index+graphTypes[i].size, 1].tolist())
113 index += graphTypes[i].size
114 plt.plot(x, y, color=color[i], marker=markers[i], label = graphTypes[i].name, linestyle='', alpha=0.7, fillstyle = fill_styles[i])
115 plt.savefig(fname = savePath+'.png', dpi=500)
116 plt.legend(loc='upper right')
117 plt.savefig(fname = savePath+'_lengend.png', dpi=500)
118
119def mkdir_p(mypath):
120 '''Creates a directory. equivalent to using mkdir -p on the command line'''
121
122 from errno import EEXIST
123 from os import makedirs,path
124
125 try:
126 makedirs(mypath)
127 except OSError as exc: # Python >2.5
128 if exc.errno == EEXIST and path.isdir(mypath):
129 pass
130 else: raise
131
132def metricStat(graphTypes, metricName, metric, graphIndex, outputFolder, matrix_calculator):
133 metrics = []
134 for graph in graphTypes:
135 metrics.append(metric(graph))
136 outputFolder = outputFolder + graph.name + '-'
137 print('calculate' + metricName +' for ' + outputFolder)
138 mkdir_p(outputFolder)
139 out_d_coords = calculateMDS(matrix_calculator(metrics))
140 plot(graphTypes, out_d_coords, metricName, graphIndex,outputFolder + '/'+ metricName)
141
142def nodeActivity(graphType):
143 return graphType.nas
144
145def outDegree(graphType):
146 return graphType.out_ds
147
148def mpc(graphType):
149 return graphType.mpcs
150
151def nodeType(graphType):
152 return graphType.nts
153
154def tcc(graphType):
155 return graphType.tccs
156
157if __name__ == '__main__':
158 main() \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore
new file mode 100644
index 00000000..b3934b01
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/input/.gitignore
@@ -0,0 +1,3 @@
1# ignore everything in this folder
2*
3!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg
new file mode 100644
index 00000000..6b987b3e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg
new file mode 100644
index 00000000..ee8d5755
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg
new file mode 100644
index 00000000..25e850fe
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_all/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg
new file mode 100644
index 00000000..8b3421b1
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg
new file mode 100644
index 00000000..d459f5c8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg
new file mode 100644
index 00000000..fdaa28e6
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_mpc/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg
new file mode 100644
index 00000000..08445457
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg
new file mode 100644
index 00000000..74ab2449
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg
new file mode 100644
index 00000000..61c4489e
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_node_activity/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg
new file mode 100644
index 00000000..ccbca653
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg
new file mode 100644
index 00000000..31965557
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg
new file mode 100644
index 00000000..d4de5301
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/controled_viatra_with_out_degree/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg
new file mode 100644
index 00000000..ee1d84dc
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg
new file mode 100644
index 00000000..1a7e8bed
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/node activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg
new file mode 100644
index 00000000..81d9b709
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf/out degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg
new file mode 100644
index 00000000..e26d6cf6
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg
new file mode 100644
index 00000000..e1b9a1cf
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg
new file mode 100644
index 00000000..713ed4f4
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_instantiator/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg
new file mode 100644
index 00000000..9c26be81
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg
new file mode 100644
index 00000000..3cb75479
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/node activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg
new file mode 100644
index 00000000..0a869df6
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/random_emf_normal/out degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg
new file mode 100644
index 00000000..b6e86773
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/MPC.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg
new file mode 100644
index 00000000..486577a6
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/node activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg
new file mode 100644
index 00000000..4f338049
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_constraints/out degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg
new file mode 100644
index 00000000..c1dba220
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/Node Activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg
new file mode 100644
index 00000000..f51449d0
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/mpc.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg
new file mode 100644
index 00000000..dff91312
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_control_all_with_consistency/out_degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg
new file mode 100644
index 00000000..2dc66b35
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/MPC.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg
new file mode 100644
index 00000000..847bad62
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/node activity.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg
new file mode 100644
index 00000000..90ff8006
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/output/viatra_no_constraints/out degree.jpg
Binary files differ
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb
new file mode 100644
index 00000000..550e3978
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance.ipynb
@@ -0,0 +1,481 @@
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# Compare Metrics Distances to The Human Models"
8 ]
9 },
10 {
11 "cell_type": "markdown",
12 "metadata": {},
13 "source": [
14 "### Imports"
15 ]
16 },
17 {
18 "cell_type": "code",
19 "execution_count": 48,
20 "metadata": {},
21 "outputs": [],
22 "source": [
23 "from GraphType import GraphStat\n",
24 "from GraphType import GraphCollection\n",
25 "from scipy import stats\n",
26 "from ipywidgets import interact, fixed, interactive\n",
27 "import readCSV as reader\n",
28 "import ipywidgets as widgets\n",
29 "import matplotlib.pyplot as plt\n",
30 "import random\n",
31 "import numpy as np\n",
32 "import constants\n"
33 ]
34 },
35 {
36 "cell_type": "markdown",
37 "metadata": {},
38 "source": [
39 "### Classes"
40 ]
41 },
42 {
43 "cell_type": "markdown",
44 "metadata": {},
45 "source": [
46 "* Record the average distances of different metrics for a model to the human models "
47 ]
48 },
49 {
50 "cell_type": "code",
51 "execution_count": 49,
52 "metadata": {},
53 "outputs": [],
54 "source": [
55 "class GraphDistance:\n",
56 " #init with a graph stat and a collection of graph stats\n",
57 " def __init__(self, graphStat, collection):\n",
58 " self.graph = graphStat\n",
59 " self.collection = collection\n",
60 " self.out_d_distance = average_ks_distance(collection.out_ds, graphStat.out_d)\n",
61 " self.na_distance = average_ks_distance(collection.nas, graphStat.na)\n",
62 " self.mpc_distance = average_ks_distance(collection.mpcs, graphStat.mpc)"
63 ]
64 },
65 {
66 "cell_type": "markdown",
67 "metadata": {},
68 "source": [
69 "### Methods"
70 ]
71 },
72 {
73 "cell_type": "markdown",
74 "metadata": {},
75 "source": [
76 "* Calculate the average ks distance"
77 ]
78 },
79 {
80 "cell_type": "code",
81 "execution_count": 50,
82 "metadata": {},
83 "outputs": [],
84 "source": [
85 "def average_ks_distance(targets, sample):\n",
86 " distance = 0.0\n",
87 " for target in targets:\n",
88 " value, p = stats.ks_2samp(target, sample)\n",
89 " distance += value\n",
90 " distance = distance / len(targets)\n",
91 " return distance\n"
92 ]
93 },
94 {
95 "cell_type": "markdown",
96 "metadata": {
97 "pycharm": {
98 "name": "#%% md\n"
99 }
100 },
101 "source": [
102 "* Find the median ks distance of the same number of nodes"
103 ]
104 },
105 {
106 "cell_type": "code",
107 "execution_count": 51,
108 "metadata": {
109 "pycharm": {
110 "name": "#%%\n"
111 }
112 },
113 "outputs": [],
114 "source": [
115 "def find_median(x, metric_distances):\n",
116 " distance_dic = {}\n",
117 " for index, num_of_nodes in enumerate(x):\n",
118 " if num_of_nodes[0] not in distance_dic:\n",
119 " distance_dic[num_of_nodes[0]] = []\n",
120 " distance_dic[num_of_nodes[0]].append(metric_distances[index])\n",
121 " median_x = []\n",
122 " y = []\n",
123 " for num_of_nodes, distances in distance_dic.items():\n",
124 " median_x.append(num_of_nodes)\n",
125 " y.append(np.median(distances))\n",
126 " order = np.argsort(median_x)\n",
127 " median_x = np.array(median_x)[order]\n",
128 " median_y = np.array(y)[order]\n",
129 " return median_x, median_y\n"
130 ]
131 },
132 {
133 "cell_type": "markdown",
134 "metadata": {},
135 "source": [
136 "* Plot Diagram"
137 ]
138 },
139 {
140 "cell_type": "code",
141 "execution_count": 52,
142 "metadata": {},
143 "outputs": [],
144 "source": [
145 "# metric_selector: GraphDistance -> float\n",
146 "def plot(infos, lines, id, metric_selector,colors, title):\n",
147 " metric_distances = retrive_info_from_list(metric_selector, list(infos.values()))\n",
148 " x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values()))\n",
149 " graph = plt.figure(id,figsize=(18, 10))\n",
150 " plt.title(title)\n",
151 " plt.plot(x, metric_distances, color='red', linestyle='', marker='o',alpha=0.7)\n",
152 " #plot ks distance median\n",
153 " median_x, median_y = find_median(x, metric_distances)\n",
154 " plt.plot(median_x, median_y, color='black',marker='o')\n",
155 " for i in range(0, len(lines)):\n",
156 " line_infos = retrive_info_from_list(lambda a: infos[a], lines[i])\n",
157 " line_y = retrive_info_from_list(metric_selector, line_infos)\n",
158 " line_x = retrive_info_from_list(lambda a : a.graph.num_nodes, line_infos)\n",
159 " plt.plot(line_x, line_y, marker='o', color=colors[i])\n",
160 " #graph.show()"
161 ]
162 },
163 {
164 "cell_type": "markdown",
165 "metadata": {},
166 "source": [
167 "* Retrieve information from a list "
168 ]
169 },
170 {
171 "cell_type": "code",
172 "execution_count": 53,
173 "metadata": {},
174 "outputs": [],
175 "source": [
176 "def retrive_info_from_list(selector, distances):\n",
177 " return list(map(selector, distances))"
178 ]
179 },
180 {
181 "cell_type": "markdown",
182 "metadata": {},
183 "source": [
184 "### Read Models"
185 ]
186 },
187 {
188 "cell_type": "code",
189 "execution_count": 54,
190 "metadata": {},
191 "outputs": [],
192 "source": [
193 "human = GraphCollection('../statistics/humanOutput/', 300, 'Human', True)\n",
194 "file_names = reader.readmultiplefiles('../statistics/viatraEvolve/', 1000, False)"
195 ]
196 },
197 {
198 "cell_type": "markdown",
199 "metadata": {},
200 "source": [
201 "### Calculate Distances"
202 ]
203 },
204 {
205 "cell_type": "code",
206 "execution_count": 55,
207 "metadata": {},
208 "outputs": [],
209 "source": [
210 "# Progress Widge\n",
211 "w2 = widgets.FloatProgress(\n",
212 " value=0,\n",
213 " min=0,\n",
214 " max=1.0,\n",
215 " step=0.1,\n",
216 " description='Loading Files...:',\n",
217 " bar_style='info',\n",
218 " orientation='horizontal'\n",
219 ")"
220 ]
221 },
222 {
223 "cell_type": "code",
224 "execution_count": 56,
225 "metadata": {},
226 "outputs": [
227 {
228 "data": {
229 "application/vnd.jupyter.widget-view+json": {
230 "model_id": "ca7932bce2a741afaff6b919042c42b0",
231 "version_major": 2,
232 "version_minor": 0
233 },
234 "text/plain": [
235 "FloatProgress(value=0.0, bar_style='info', description='Loading Files...:', max=1.0)"
236 ]
237 },
238 "metadata": {},
239 "output_type": "display_data"
240 }
241 ],
242 "source": [
243 "infos = []\n",
244 "# read all files\n",
245 "counter = 0.0\n",
246 "size = len(file_names)\n",
247 "#display progress bar\n",
248 "display(w2)\n",
249 "for name in file_names:\n",
250 " infos.append(GraphStat(name))\n",
251 "\n",
252 "info_dic = {}\n",
253 "for info in infos:\n",
254 " w2.value = (counter/size)\n",
255 " counter+=1\n",
256 " info = GraphDistance(info, human)\n",
257 " info_dic[info.graph.id] = info"
258 ]
259 },
260 {
261 "cell_type": "markdown",
262 "metadata": {},
263 "source": [
264 "#### Plot Graphs"
265 ]
266 },
267 {
268 "cell_type": "markdown",
269 "metadata": {},
270 "source": [
271 "* widget for select trajectory"
272 ]
273 },
274 {
275 "cell_type": "code",
276 "execution_count": 57,
277 "metadata": {},
278 "outputs": [],
279 "source": [
280 "filenames = reader.readmultiplefiles('../statistics/trajectories/', 10, False)\n",
281 "trajectories = {}\n",
282 "for name in filenames:\n",
283 " trajectories[name] = reader.readTrajectory(name)\n",
284 "\n",
285 "w = widgets.SelectMultiple(\n",
286 " options = trajectories,\n",
287 " value = [trajectories[filenames[0]]],\n",
288 " description='Trajectory:',\n",
289 " disabled=False,\n",
290 ")\n",
291 "\n",
292 "#generate random color for each line\n",
293 "colors = []\n",
294 "\n",
295 "for i in range(0, len(trajectories)):\n",
296 " color = \"#%06x\" % random.randint(0, 0xFFFFFF)\n",
297 " colors.append(color)"
298 ]
299 },
300 {
301 "cell_type": "markdown",
302 "metadata": {},
303 "source": [
304 "#### Out Degree"
305 ]
306 },
307 {
308 "cell_type": "code",
309 "execution_count": 63,
310 "metadata": {},
311 "outputs": [
312 {
313 "data": {
314 "application/vnd.jupyter.widget-view+json": {
315 "model_id": "08da62cb0c3f4e6e9591c7dc811d27cc",
316 "version_major": 2,
317 "version_minor": 0
318 },
319 "text/plain": [
320 "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…"
321 ]
322 },
323 "metadata": {},
324 "output_type": "display_data"
325 },
326 {
327 "data": {
328 "text/plain": [
329 "<function __main__.plot_out_degree(lines)>"
330 ]
331 },
332 "execution_count": 63,
333 "metadata": {},
334 "output_type": "execute_result"
335 }
336 ],
337 "source": [
338 "def plot_out_degree(lines):\n",
339 " plot(info_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree')\n",
340 "interact(plot_out_degree, lines=w)"
341 ]
342 },
343 {
344 "cell_type": "markdown",
345 "metadata": {},
346 "source": [
347 "#### Node Activity"
348 ]
349 },
350 {
351 "cell_type": "code",
352 "execution_count": 64,
353 "metadata": {
354 "scrolled": true
355 },
356 "outputs": [
357 {
358 "data": {
359 "application/vnd.jupyter.widget-view+json": {
360 "model_id": "a708f43645a24bd2b15b53ea12c7d88f",
361 "version_major": 2,
362 "version_minor": 0
363 },
364 "text/plain": [
365 "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…"
366 ]
367 },
368 "metadata": {},
369 "output_type": "display_data"
370 },
371 {
372 "data": {
373 "text/plain": [
374 "<function __main__.plot_na(lines)>"
375 ]
376 },
377 "execution_count": 64,
378 "metadata": {},
379 "output_type": "execute_result"
380 }
381 ],
382 "source": [
383 "def plot_na(lines):\n",
384 " plot(info_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity')\n",
385 "interact(plot_na, lines=w)"
386 ]
387 },
388 {
389 "cell_type": "markdown",
390 "metadata": {},
391 "source": [
392 "#### MPC"
393 ]
394 },
395 {
396 "cell_type": "code",
397 "execution_count": null,
398 "metadata": {},
399 "outputs": [],
400 "source": []
401 },
402 {
403 "cell_type": "code",
404 "execution_count": 65,
405 "metadata": {},
406 "outputs": [
407 {
408 "data": {
409 "application/vnd.jupyter.widget-view+json": {
410 "model_id": "124a0cb0ebfb4225bf4ced24c09032f7",
411 "version_major": 2,
412 "version_minor": 0
413 },
414 "text/plain": [
415 "interactive(children=(SelectMultiple(description='Trajectory:', index=(1,), options={'../statistics/trajectori…"
416 ]
417 },
418 "metadata": {},
419 "output_type": "display_data"
420 },
421 {
422 "data": {
423 "text/plain": [
424 "<function __main__.plot_out_degree(lines)>"
425 ]
426 },
427 "execution_count": 65,
428 "metadata": {},
429 "output_type": "execute_result"
430 }
431 ],
432 "source": [
433 "def plot_out_degree(lines):\n",
434 " plot(info_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC')\n",
435 "interact(plot_out_degree, lines=w)"
436 ]
437 },
438 {
439 "cell_type": "code",
440 "execution_count": 19,
441 "metadata": {},
442 "outputs": [],
443 "source": [
444 "for name in file_names:\n",
445 " contents = reader.readcsvfile(name)\n",
446 " if(contents['State Id'][0] == 1032396643):\n",
447 " print(name)"
448 ]
449 }
450 ],
451 "metadata": {
452 "kernelspec": {
453 "display_name": "Python 3",
454 "language": "python",
455 "name": "python3"
456 },
457 "language_info": {
458 "codemirror_mode": {
459 "name": "ipython",
460 "version": 3
461 },
462 "file_extension": ".py",
463 "mimetype": "text/x-python",
464 "name": "python",
465 "nbconvert_exporter": "python",
466 "pygments_lexer": "ipython3",
467 "version": "3.7.3"
468 },
469 "pycharm": {
470 "stem_cell": {
471 "cell_type": "raw",
472 "metadata": {
473 "collapsed": false
474 },
475 "source": []
476 }
477 }
478 },
479 "nbformat": 4,
480 "nbformat_minor": 2
481}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb
new file mode 100644
index 00000000..000822bf
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/metrics_distance_with_selector.ipynb
@@ -0,0 +1,1600 @@
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# Measuremments with Representative"
8 ]
9 },
10 {
11 "cell_type": "markdown",
12 "metadata": {},
13 "source": [
14 "### Imports"
15 ]
16 },
17 {
18 "cell_type": "code",
19 "execution_count": 1,
20 "metadata": {},
21 "outputs": [],
22 "source": [
23 "import os, sys\n",
24 "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n",
25 "sys.path.append(lib_path)\n",
26 "from GraphType import GraphStat\n",
27 "from GraphType import GraphCollection\n",
28 "from scipy import stats\n",
29 "from ipywidgets import interact, fixed, interactive\n",
30 "import readCSV as reader\n",
31 "import ipywidgets as widgets\n",
32 "import matplotlib.pyplot as plt\n",
33 "import random\n",
34 "import numpy as np\n",
35 "import constants\n"
36 ]
37 },
38 {
39 "cell_type": "markdown",
40 "metadata": {},
41 "source": [
42 "### Classes"
43 ]
44 },
45 {
46 "cell_type": "markdown",
47 "metadata": {},
48 "source": [
49 "* Record the distances of different metrics using a representative"
50 ]
51 },
52 {
53 "cell_type": "code",
54 "execution_count": 2,
55 "metadata": {},
56 "outputs": [],
57 "source": [
58 "class GraphDistanceWithRep:\n",
59 " #init with a graph stat and a collection of graph stats\n",
60 " def __init__(self, graphStat, rep):\n",
61 " self.graph = graphStat\n",
62 " self.rep = rep\n",
63 " self.out_d_distance, _ = stats.ks_2samp(graphStat.out_d, rep.out_d)\n",
64 " self.na_distance,_ = stats.ks_2samp(graphStat.na, rep.na)\n",
65 " self.mpc_distance,_ = stats.ks_2samp(graphStat.mpc, rep.mpc)\n"
66 ]
67 },
68 {
69 "cell_type": "markdown",
70 "metadata": {},
71 "source": [
72 "### Methods\n"
73 ]
74 },
75 {
76 "cell_type": "markdown",
77 "metadata": {},
78 "source": [
79 "* Find the median ks distance of the same number of nodes"
80 ]
81 },
82 {
83 "cell_type": "code",
84 "execution_count": 3,
85 "metadata": {},
86 "outputs": [],
87 "source": [
88 "def find_median(x, metric_distances):\n",
89 " distance_dic = {}\n",
90 " for index, num_of_nodes in enumerate(x):\n",
91 " if num_of_nodes[0] not in distance_dic:\n",
92 " distance_dic[num_of_nodes[0]] = []\n",
93 " distance_dic[num_of_nodes[0]].append(metric_distances[index])\n",
94 " median_x = []\n",
95 " y = []\n",
96 " for num_of_nodes, distances in distance_dic.items():\n",
97 " median_x.append(num_of_nodes)\n",
98 " y.append(np.median(distances))\n",
99 " order = np.argsort(median_x)\n",
100 " median_x = np.array(median_x)[order]\n",
101 " median_y = np.array(y)[order]\n",
102 " return median_x, median_y\n"
103 ]
104 },
105 {
106 "cell_type": "markdown",
107 "metadata": {},
108 "source": [
109 "* Plot Diagram"
110 ]
111 },
112 {
113 "cell_type": "code",
114 "execution_count": 4,
115 "metadata": {},
116 "outputs": [],
117 "source": [
118 "# metric_selector: GraphDistance -> float\n",
119 "def plot(infos, lines, id, metric_selector,colors, title, foldername):\n",
120 " metric_distances = retrive_info_from_list(metric_selector, list(infos.values()))\n",
121 " x = retrive_info_from_list(lambda a : a.graph.num_nodes, list(infos.values()))\n",
122 " graph = plt.figure(id,figsize=(18, 10))\n",
123 " plt.title(title)\n",
124 " plt.plot(x, metric_distances, color='red', linestyle='', marker='o',alpha=0.7)\n",
125 " #plot ks distance median\n",
126 " median_x, median_y = find_median(x, metric_distances)\n",
127 " plt.plot(median_x, median_y, color='black',marker='o')\n",
128 " for i in range(0, len(lines)):\n",
129 " line_infos = retrive_info_from_list(lambda a: infos[a], lines[i])\n",
130 " line_y = retrive_info_from_list(metric_selector, line_infos)\n",
131 " line_x = retrive_info_from_list(lambda a : a.graph.num_nodes, line_infos)\n",
132 " plt.plot(line_x, line_y, marker='o', color=colors[i])\n",
133 " mkdir_p(foldername)\n",
134 " plt.savefig(fname = foldername+title+'.jpg', dpi=150)\n",
135 " #graph.show()"
136 ]
137 },
138 {
139 "cell_type": "markdown",
140 "metadata": {},
141 "source": [
142 "* Retrieve information from a list "
143 ]
144 },
145 {
146 "cell_type": "code",
147 "execution_count": 5,
148 "metadata": {},
149 "outputs": [],
150 "source": [
151 "def retrive_info_from_list(selector, distances):\n",
152 " return list(map(selector, distances))"
153 ]
154 },
155 {
156 "cell_type": "code",
157 "execution_count": 6,
158 "metadata": {},
159 "outputs": [],
160 "source": [
161 "def readStats(path, numModels):\n",
162 " names = reader.readmultiplefiles(path, numModels, False)\n",
163 " stats = []\n",
164 " for name in names:\n",
165 " stats.append(GraphStat(name))\n",
166 " return stats"
167 ]
168 },
169 {
170 "cell_type": "code",
171 "execution_count": 7,
172 "metadata": {},
173 "outputs": [],
174 "source": [
175 "def calDistanceDic(stats, rep):\n",
176 " dic = {}\n",
177 " for info in stats:\n",
178 " info = GraphDistanceWithRep(info, rep)\n",
179 " dic[info.graph.id] = info\n",
180 " return dic"
181 ]
182 },
183 {
184 "cell_type": "code",
185 "execution_count": 8,
186 "metadata": {},
187 "outputs": [],
188 "source": [
189 "def createRandomColors(size):\n",
190 " #generate random color for each line\n",
191 " colors = []\n",
192 "\n",
193 " for i in range(0, size):\n",
194 " color = \"#%06x\" % random.randint(0, 0xFFFFFF)\n",
195 " colors.append(color)\n",
196 " return colors"
197 ]
198 },
199 {
200 "cell_type": "code",
201 "execution_count": 9,
202 "metadata": {},
203 "outputs": [],
204 "source": [
205 "def createSelectionWidge(options):\n",
206 " w = widgets.SelectMultiple(\n",
207 " options = options,\n",
208 " value = [],\n",
209 " description='Trajectory:',\n",
210 " disabled=False,\n",
211 " )\n",
212 " return w"
213 ]
214 },
215 {
216 "cell_type": "code",
217 "execution_count": 10,
218 "metadata": {},
219 "outputs": [],
220 "source": [
221 "def mkdir_p(mypath):\n",
222 " '''Creates a directory. equivalent to using mkdir -p on the command line'''\n",
223 "\n",
224 " from errno import EEXIST\n",
225 " from os import makedirs,path\n",
226 "\n",
227 " try:\n",
228 " makedirs(mypath)\n",
229 " except OSError as exc: # Python >2.5\n",
230 " if exc.errno == EEXIST and path.isdir(mypath):\n",
231 " pass\n",
232 " else: raise"
233 ]
234 },
235 {
236 "cell_type": "markdown",
237 "metadata": {},
238 "source": [
239 "## Metrics During GenerationPlots"
240 ]
241 },
242 {
243 "cell_type": "markdown",
244 "metadata": {},
245 "source": [
246 "### Read Human Representatives"
247 ]
248 },
249 {
250 "cell_type": "code",
251 "execution_count": 11,
252 "metadata": {},
253 "outputs": [],
254 "source": [
255 "### Read Models\n",
256 "#read representative\n",
257 "human_rep = GraphStat(constants.HUMAN_OUT_D_REP)\n",
258 "human_na = GraphStat(constants.HUMAN_NA_REP)\n",
259 "human_mpc = GraphStat(constants.HUMAN_MPC_REP)\n",
260 "\n",
261 "# assign rep distributions to human_rep\n",
262 "human_rep.na = human_na.na\n",
263 "human_rep.mpc = human_mpc.mpc"
264 ]
265 },
266 {
267 "cell_type": "markdown",
268 "metadata": {},
269 "source": [
270 "## Viatra No Constraint"
271 ]
272 },
273 {
274 "cell_type": "code",
275 "execution_count": 12,
276 "metadata": {},
277 "outputs": [],
278 "source": [
279 "# Read generated models\n",
280 "viatra_no_con_stats = readStats('../input/viatra_nocon_output/', 5000)\n",
281 "viatra_no_con_dic = calDistanceDic(viatra_no_con_stats, human_rep)"
282 ]
283 },
284 {
285 "cell_type": "code",
286 "execution_count": 13,
287 "metadata": {},
288 "outputs": [],
289 "source": [
290 "filenames = reader.readmultiplefiles('../input/viatra_nocon_output/trajectories/', 15, False)\n",
291 "trajectories = {}\n",
292 "for name in filenames:\n",
293 " trajectories[name] = reader.readTrajectory(name)\n",
294 "w = createSelectionWidge(trajectories)\n",
295 "colors = createRandomColors(len(trajectories))"
296 ]
297 },
298 {
299 "cell_type": "code",
300 "execution_count": 14,
301 "metadata": {},
302 "outputs": [
303 {
304 "data": {
305 "application/vnd.jupyter.widget-view+json": {
306 "model_id": "a8471e4dd66a47ecb6abb2371be43321",
307 "version_major": 2,
308 "version_minor": 0
309 },
310 "text/plain": [
311 "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…"
312 ]
313 },
314 "metadata": {},
315 "output_type": "display_data"
316 },
317 {
318 "data": {
319 "text/plain": [
320 "<function __main__.plot_out_degree(lines)>"
321 ]
322 },
323 "execution_count": 14,
324 "metadata": {},
325 "output_type": "execute_result"
326 }
327 ],
328 "source": [
329 "def plot_out_degree(lines):\n",
330 " plot(viatra_no_con_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/viatra_no_constraints/')\n",
331 "interact(plot_out_degree, lines=w)"
332 ]
333 },
334 {
335 "cell_type": "code",
336 "execution_count": 15,
337 "metadata": {},
338 "outputs": [
339 {
340 "data": {
341 "application/vnd.jupyter.widget-view+json": {
342 "model_id": "ad6e466cc3fe44d393d2c82d48244d83",
343 "version_major": 2,
344 "version_minor": 0
345 },
346 "text/plain": [
347 "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…"
348 ]
349 },
350 "metadata": {},
351 "output_type": "display_data"
352 },
353 {
354 "data": {
355 "text/plain": [
356 "<function __main__.plot_out_na(lines)>"
357 ]
358 },
359 "execution_count": 15,
360 "metadata": {},
361 "output_type": "execute_result"
362 }
363 ],
364 "source": [
365 "def plot_out_na(lines):\n",
366 " plot(viatra_no_con_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/viatra_no_constraints/')\n",
367 "interact(plot_out_na, lines=w)"
368 ]
369 },
370 {
371 "cell_type": "code",
372 "execution_count": 16,
373 "metadata": {},
374 "outputs": [
375 {
376 "data": {
377 "application/vnd.jupyter.widget-view+json": {
378 "model_id": "d88ebc8e4062473a96ac35fe800028ef",
379 "version_major": 2,
380 "version_minor": 0
381 },
382 "text/plain": [
383 "interactive(children=(SelectMultiple(description='Trajectory:', options={'../input/viatra_nocon_output/traject…"
384 ]
385 },
386 "metadata": {},
387 "output_type": "display_data"
388 },
389 {
390 "data": {
391 "text/plain": [
392 "<function __main__.plot_out_mpc(lines)>"
393 ]
394 },
395 "execution_count": 16,
396 "metadata": {},
397 "output_type": "execute_result"
398 }
399 ],
400 "source": [
401 "def plot_out_mpc(lines):\n",
402 " plot(viatra_no_con_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC', '../output/viatra_no_constraints/')\n",
403 "interact(plot_out_mpc, lines=w)"
404 ]
405 },
406 {
407 "cell_type": "markdown",
408 "metadata": {},
409 "source": [
410 "## Viatra with constraints"
411 ]
412 },
413 {
414 "cell_type": "code",
415 "execution_count": 17,
416 "metadata": {},
417 "outputs": [],
418 "source": [
419 "viatra_con_stats = readStats('../input/viatra_con_output/',5000)\n",
420 "viatra_con_dic = calDistanceDic(viatra_con_stats, human_rep)\n",
421 "\n",
422 "# trajectories and colors\n",
423 "trajectories = {}\n",
424 "w = createSelectionWidge(trajectories)\n",
425 "colors = createRandomColors(len(trajectories))"
426 ]
427 },
428 {
429 "cell_type": "code",
430 "execution_count": 18,
431 "metadata": {},
432 "outputs": [
433 {
434 "data": {
435 "application/vnd.jupyter.widget-view+json": {
436 "model_id": "1eb2ba5848a048389bca8d804fc8340a",
437 "version_major": 2,
438 "version_minor": 0
439 },
440 "text/plain": [
441 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
442 ]
443 },
444 "metadata": {},
445 "output_type": "display_data"
446 },
447 {
448 "data": {
449 "text/plain": [
450 "<function __main__.plot_out_degree(lines)>"
451 ]
452 },
453 "execution_count": 18,
454 "metadata": {},
455 "output_type": "execute_result"
456 }
457 ],
458 "source": [
459 "def plot_out_degree(lines):\n",
460 " plot(viatra_con_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/viatra_constraints/')\n",
461 "interact(plot_out_degree, lines=[[]])"
462 ]
463 },
464 {
465 "cell_type": "code",
466 "execution_count": 19,
467 "metadata": {},
468 "outputs": [
469 {
470 "data": {
471 "application/vnd.jupyter.widget-view+json": {
472 "model_id": "6e5840f7a5ad4515bce9080088b644f2",
473 "version_major": 2,
474 "version_minor": 0
475 },
476 "text/plain": [
477 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
478 ]
479 },
480 "metadata": {},
481 "output_type": "display_data"
482 },
483 {
484 "data": {
485 "text/plain": [
486 "<function __main__.plot_na(lines)>"
487 ]
488 },
489 "execution_count": 19,
490 "metadata": {},
491 "output_type": "execute_result"
492 }
493 ],
494 "source": [
495 "def plot_na(lines):\n",
496 " plot(viatra_con_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/viatra_constraints/')\n",
497 "interact(plot_na, lines=[[]])"
498 ]
499 },
500 {
501 "cell_type": "code",
502 "execution_count": 20,
503 "metadata": {},
504 "outputs": [
505 {
506 "data": {
507 "application/vnd.jupyter.widget-view+json": {
508 "model_id": "9e30f267b092491ba1ffe8f83c5f68ce",
509 "version_major": 2,
510 "version_minor": 0
511 },
512 "text/plain": [
513 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
514 ]
515 },
516 "metadata": {},
517 "output_type": "display_data"
518 },
519 {
520 "data": {
521 "text/plain": [
522 "<function __main__.plot_mpc(lines)>"
523 ]
524 },
525 "execution_count": 20,
526 "metadata": {},
527 "output_type": "execute_result"
528 }
529 ],
530 "source": [
531 "def plot_mpc(lines):\n",
532 " plot(viatra_con_dic, lines, 0, lambda a: a.mpc_distance, colors, 'MPC', '../output/viatra_constraints/')\n",
533 "interact(plot_mpc, lines=[[]])"
534 ]
535 },
536 {
537 "cell_type": "markdown",
538 "metadata": {},
539 "source": [
540 "## Controlled RandomEMF"
541 ]
542 },
543 {
544 "cell_type": "code",
545 "execution_count": 21,
546 "metadata": {},
547 "outputs": [],
548 "source": [
549 "random_emf_stats = readStats('../input/random_emf_output/',5000)\n",
550 "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n",
551 "\n",
552 "# trajectories and colors\n",
553 "trajectories = {}\n",
554 "w = createSelectionWidge(trajectories)\n",
555 "colors = createRandomColors(len(trajectories))"
556 ]
557 },
558 {
559 "cell_type": "code",
560 "execution_count": 22,
561 "metadata": {},
562 "outputs": [
563 {
564 "data": {
565 "application/vnd.jupyter.widget-view+json": {
566 "model_id": "cc1f64c92e814c32a81cd5ec5d4e50dc",
567 "version_major": 2,
568 "version_minor": 0
569 },
570 "text/plain": [
571 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
572 ]
573 },
574 "metadata": {},
575 "output_type": "display_data"
576 },
577 {
578 "data": {
579 "text/plain": [
580 "<function __main__.plot_out_degree(lines)>"
581 ]
582 },
583 "execution_count": 22,
584 "metadata": {},
585 "output_type": "execute_result"
586 }
587 ],
588 "source": [
589 "def plot_out_degree(lines):\n",
590 " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/random_emf/')\n",
591 "interact(plot_out_degree, lines=[[]])"
592 ]
593 },
594 {
595 "cell_type": "code",
596 "execution_count": 23,
597 "metadata": {},
598 "outputs": [
599 {
600 "data": {
601 "application/vnd.jupyter.widget-view+json": {
602 "model_id": "75021f4f68db4a809ce7c86c0d25ef1b",
603 "version_major": 2,
604 "version_minor": 0
605 },
606 "text/plain": [
607 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
608 ]
609 },
610 "metadata": {},
611 "output_type": "display_data"
612 },
613 {
614 "data": {
615 "text/plain": [
616 "<function __main__.plot_node_activity(lines)>"
617 ]
618 },
619 "execution_count": 23,
620 "metadata": {},
621 "output_type": "execute_result"
622 }
623 ],
624 "source": [
625 "def plot_node_activity(lines):\n",
626 " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/random_emf/')\n",
627 "interact(plot_node_activity, lines=[[]])"
628 ]
629 },
630 {
631 "cell_type": "code",
632 "execution_count": 24,
633 "metadata": {},
634 "outputs": [
635 {
636 "data": {
637 "application/vnd.jupyter.widget-view+json": {
638 "model_id": "86f5c376905a4759a7b44ad52804424d",
639 "version_major": 2,
640 "version_minor": 0
641 },
642 "text/plain": [
643 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
644 ]
645 },
646 "metadata": {},
647 "output_type": "display_data"
648 },
649 {
650 "data": {
651 "text/plain": [
652 "<function __main__.plot_mpc(lines)>"
653 ]
654 },
655 "execution_count": 24,
656 "metadata": {},
657 "output_type": "execute_result"
658 }
659 ],
660 "source": [
661 "def plot_mpc(lines):\n",
662 " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf/')\n",
663 "interact(plot_mpc, lines=[[]])"
664 ]
665 },
666 {
667 "cell_type": "markdown",
668 "metadata": {},
669 "source": [
670 "## Controlled Viatra with MPC"
671 ]
672 },
673 {
674 "cell_type": "code",
675 "execution_count": 25,
676 "metadata": {},
677 "outputs": [],
678 "source": [
679 "con_viatra_stats = readStats('../input/controled_viatra_mpc/',5000)\n",
680 "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n",
681 "\n",
682 "# trajectories and colors\n",
683 "trajectories = {}\n",
684 "w = createSelectionWidge(trajectories)\n",
685 "colors = createRandomColors(len(trajectories))"
686 ]
687 },
688 {
689 "cell_type": "code",
690 "execution_count": 26,
691 "metadata": {},
692 "outputs": [
693 {
694 "data": {
695 "application/vnd.jupyter.widget-view+json": {
696 "model_id": "57ba4d8443c145ad845fb862e3ef7519",
697 "version_major": 2,
698 "version_minor": 0
699 },
700 "text/plain": [
701 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
702 ]
703 },
704 "metadata": {},
705 "output_type": "display_data"
706 },
707 {
708 "data": {
709 "text/plain": [
710 "<function __main__.plot_out_degree(lines)>"
711 ]
712 },
713 "execution_count": 26,
714 "metadata": {},
715 "output_type": "execute_result"
716 }
717 ],
718 "source": [
719 "def plot_out_degree(lines):\n",
720 " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_mpc/')\n",
721 "interact(plot_out_degree, lines=w)"
722 ]
723 },
724 {
725 "cell_type": "code",
726 "execution_count": 27,
727 "metadata": {},
728 "outputs": [
729 {
730 "data": {
731 "application/vnd.jupyter.widget-view+json": {
732 "model_id": "c020ecb466c14f3ca1bfc0fd2fe03b7b",
733 "version_major": 2,
734 "version_minor": 0
735 },
736 "text/plain": [
737 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
738 ]
739 },
740 "metadata": {},
741 "output_type": "display_data"
742 },
743 {
744 "data": {
745 "text/plain": [
746 "<function __main__.plot_na(lines)>"
747 ]
748 },
749 "execution_count": 27,
750 "metadata": {},
751 "output_type": "execute_result"
752 }
753 ],
754 "source": [
755 "def plot_na(lines):\n",
756 " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_mpc/')\n",
757 "interact(plot_na, lines=w)"
758 ]
759 },
760 {
761 "cell_type": "code",
762 "execution_count": 28,
763 "metadata": {},
764 "outputs": [
765 {
766 "data": {
767 "application/vnd.jupyter.widget-view+json": {
768 "model_id": "2165668057fd47ad92459e749ec68bad",
769 "version_major": 2,
770 "version_minor": 0
771 },
772 "text/plain": [
773 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
774 ]
775 },
776 "metadata": {},
777 "output_type": "display_data"
778 },
779 {
780 "data": {
781 "text/plain": [
782 "<function __main__.plot_mpc(lines)>"
783 ]
784 },
785 "execution_count": 28,
786 "metadata": {},
787 "output_type": "execute_result"
788 }
789 ],
790 "source": [
791 "def plot_mpc(lines):\n",
792 " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_mpc/')\n",
793 "interact(plot_mpc, lines=w)"
794 ]
795 },
796 {
797 "cell_type": "markdown",
798 "metadata": {},
799 "source": [
800 "## (Pseudo) Random EMF instantiator"
801 ]
802 },
803 {
804 "cell_type": "code",
805 "execution_count": 29,
806 "metadata": {},
807 "outputs": [],
808 "source": [
809 "random_emf_stats = readStats('../input/real_random_output/',5000)\n",
810 "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n",
811 "\n",
812 "# trajectories and colors\n",
813 "trajectories = {}\n",
814 "w = createSelectionWidge(trajectories)\n",
815 "colors = createRandomColors(len(trajectories))"
816 ]
817 },
818 {
819 "cell_type": "code",
820 "execution_count": 30,
821 "metadata": {},
822 "outputs": [
823 {
824 "data": {
825 "application/vnd.jupyter.widget-view+json": {
826 "model_id": "907d7824033b4dfe980c391db0da63eb",
827 "version_major": 2,
828 "version_minor": 0
829 },
830 "text/plain": [
831 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
832 ]
833 },
834 "metadata": {},
835 "output_type": "display_data"
836 },
837 {
838 "data": {
839 "text/plain": [
840 "<function __main__.plot_out_degree(lines)>"
841 ]
842 },
843 "execution_count": 30,
844 "metadata": {},
845 "output_type": "execute_result"
846 }
847 ],
848 "source": [
849 "def plot_out_degree(lines):\n",
850 " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/random_emf_instantiator/')\n",
851 "interact(plot_out_degree, lines=w)"
852 ]
853 },
854 {
855 "cell_type": "code",
856 "execution_count": 31,
857 "metadata": {},
858 "outputs": [
859 {
860 "data": {
861 "application/vnd.jupyter.widget-view+json": {
862 "model_id": "08a32c21d0b64217a556715caa8db7b5",
863 "version_major": 2,
864 "version_minor": 0
865 },
866 "text/plain": [
867 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
868 ]
869 },
870 "metadata": {},
871 "output_type": "display_data"
872 },
873 {
874 "data": {
875 "text/plain": [
876 "<function __main__.plot_na(lines)>"
877 ]
878 },
879 "execution_count": 31,
880 "metadata": {},
881 "output_type": "execute_result"
882 }
883 ],
884 "source": [
885 "def plot_na(lines):\n",
886 " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/random_emf_instantiator/')\n",
887 "interact(plot_na, lines=w)"
888 ]
889 },
890 {
891 "cell_type": "code",
892 "execution_count": 32,
893 "metadata": {},
894 "outputs": [
895 {
896 "data": {
897 "application/vnd.jupyter.widget-view+json": {
898 "model_id": "9dad041ff05d46ce969cfacb07c2ba98",
899 "version_major": 2,
900 "version_minor": 0
901 },
902 "text/plain": [
903 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
904 ]
905 },
906 "metadata": {},
907 "output_type": "display_data"
908 },
909 {
910 "data": {
911 "text/plain": [
912 "<function __main__.plot_mpc(lines)>"
913 ]
914 },
915 "execution_count": 32,
916 "metadata": {},
917 "output_type": "execute_result"
918 }
919 ],
920 "source": [
921 "def plot_mpc(lines):\n",
922 " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf_instantiator/')\n",
923 "interact(plot_mpc, lines=w)"
924 ]
925 },
926 {
927 "cell_type": "markdown",
928 "metadata": {},
929 "source": [
930 "## Controlled Viatra with Out Degree"
931 ]
932 },
933 {
934 "cell_type": "code",
935 "execution_count": 33,
936 "metadata": {},
937 "outputs": [],
938 "source": [
939 "con_viatra_stats = readStats('../input/controlled_viatra_out_degree/',10000)\n",
940 "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n",
941 "\n",
942 "# trajectories and colors\n",
943 "trajectories = {}\n",
944 "w = createSelectionWidge(trajectories)\n",
945 "colors = createRandomColors(len(trajectories))"
946 ]
947 },
948 {
949 "cell_type": "code",
950 "execution_count": 34,
951 "metadata": {},
952 "outputs": [
953 {
954 "data": {
955 "application/vnd.jupyter.widget-view+json": {
956 "model_id": "cd77560284d9419daec57192a64b75ec",
957 "version_major": 2,
958 "version_minor": 0
959 },
960 "text/plain": [
961 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
962 ]
963 },
964 "metadata": {},
965 "output_type": "display_data"
966 },
967 {
968 "data": {
969 "text/plain": [
970 "<function __main__.plot_out_degree(lines)>"
971 ]
972 },
973 "execution_count": 34,
974 "metadata": {},
975 "output_type": "execute_result"
976 }
977 ],
978 "source": [
979 "def plot_out_degree(lines):\n",
980 " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_out_degree/')\n",
981 "interact(plot_out_degree, lines=w)"
982 ]
983 },
984 {
985 "cell_type": "code",
986 "execution_count": 35,
987 "metadata": {},
988 "outputs": [
989 {
990 "data": {
991 "application/vnd.jupyter.widget-view+json": {
992 "model_id": "ab11afebf7674cebae8d7318c661cf3c",
993 "version_major": 2,
994 "version_minor": 0
995 },
996 "text/plain": [
997 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
998 ]
999 },
1000 "metadata": {},
1001 "output_type": "display_data"
1002 },
1003 {
1004 "data": {
1005 "text/plain": [
1006 "<function __main__.plot_na(lines)>"
1007 ]
1008 },
1009 "execution_count": 35,
1010 "metadata": {},
1011 "output_type": "execute_result"
1012 }
1013 ],
1014 "source": [
1015 "def plot_na(lines):\n",
1016 " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_out_degree/')\n",
1017 "interact(plot_na, lines=w)"
1018 ]
1019 },
1020 {
1021 "cell_type": "code",
1022 "execution_count": 36,
1023 "metadata": {
1024 "scrolled": false
1025 },
1026 "outputs": [
1027 {
1028 "data": {
1029 "application/vnd.jupyter.widget-view+json": {
1030 "model_id": "c20b42abcba646c18d7caa6eeb54c403",
1031 "version_major": 2,
1032 "version_minor": 0
1033 },
1034 "text/plain": [
1035 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1036 ]
1037 },
1038 "metadata": {},
1039 "output_type": "display_data"
1040 },
1041 {
1042 "data": {
1043 "text/plain": [
1044 "<function __main__.plot_mpc(lines)>"
1045 ]
1046 },
1047 "execution_count": 36,
1048 "metadata": {},
1049 "output_type": "execute_result"
1050 }
1051 ],
1052 "source": [
1053 "def plot_mpc(lines):\n",
1054 " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_out_degree/')\n",
1055 "interact(plot_mpc, lines=w)"
1056 ]
1057 },
1058 {
1059 "cell_type": "markdown",
1060 "metadata": {},
1061 "source": [
1062 "## Controlled Viatra with Node Activity"
1063 ]
1064 },
1065 {
1066 "cell_type": "code",
1067 "execution_count": 37,
1068 "metadata": {},
1069 "outputs": [],
1070 "source": [
1071 "con_viatra_stats = readStats('../input/controlled_viatra_out_degree_node_activity/',20000)\n",
1072 "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n",
1073 "\n",
1074 "# trajectories and colors\n",
1075 "trajectories = {}\n",
1076 "w = createSelectionWidge(trajectories)\n",
1077 "colors = createRandomColors(len(trajectories))"
1078 ]
1079 },
1080 {
1081 "cell_type": "code",
1082 "execution_count": 38,
1083 "metadata": {},
1084 "outputs": [
1085 {
1086 "data": {
1087 "application/vnd.jupyter.widget-view+json": {
1088 "model_id": "902b580a11fa4c8db9d03508ad629067",
1089 "version_major": 2,
1090 "version_minor": 0
1091 },
1092 "text/plain": [
1093 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1094 ]
1095 },
1096 "metadata": {},
1097 "output_type": "display_data"
1098 },
1099 {
1100 "data": {
1101 "text/plain": [
1102 "<function __main__.plot_out_degree(lines)>"
1103 ]
1104 },
1105 "execution_count": 38,
1106 "metadata": {},
1107 "output_type": "execute_result"
1108 }
1109 ],
1110 "source": [
1111 "def plot_out_degree(lines):\n",
1112 " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_with_node_activity/')\n",
1113 "interact(plot_out_degree, lines=w)"
1114 ]
1115 },
1116 {
1117 "cell_type": "code",
1118 "execution_count": 39,
1119 "metadata": {},
1120 "outputs": [
1121 {
1122 "data": {
1123 "application/vnd.jupyter.widget-view+json": {
1124 "model_id": "851b567e745940288b577d9bd27e6f08",
1125 "version_major": 2,
1126 "version_minor": 0
1127 },
1128 "text/plain": [
1129 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1130 ]
1131 },
1132 "metadata": {},
1133 "output_type": "display_data"
1134 },
1135 {
1136 "data": {
1137 "text/plain": [
1138 "<function __main__.plot_na(lines)>"
1139 ]
1140 },
1141 "execution_count": 39,
1142 "metadata": {},
1143 "output_type": "execute_result"
1144 }
1145 ],
1146 "source": [
1147 "def plot_na(lines):\n",
1148 " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_with_node_activity/')\n",
1149 "interact(plot_na, lines=w)"
1150 ]
1151 },
1152 {
1153 "cell_type": "code",
1154 "execution_count": 40,
1155 "metadata": {},
1156 "outputs": [
1157 {
1158 "data": {
1159 "application/vnd.jupyter.widget-view+json": {
1160 "model_id": "7de173291f394b10b5113e3312b7b2e1",
1161 "version_major": 2,
1162 "version_minor": 0
1163 },
1164 "text/plain": [
1165 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1166 ]
1167 },
1168 "metadata": {},
1169 "output_type": "display_data"
1170 },
1171 {
1172 "data": {
1173 "text/plain": [
1174 "<function __main__.plot_mpc(lines)>"
1175 ]
1176 },
1177 "execution_count": 40,
1178 "metadata": {},
1179 "output_type": "execute_result"
1180 }
1181 ],
1182 "source": [
1183 "def plot_mpc(lines):\n",
1184 " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_with_node_activity/')\n",
1185 "interact(plot_mpc, lines=w)"
1186 ]
1187 },
1188 {
1189 "cell_type": "markdown",
1190 "metadata": {},
1191 "source": [
1192 "# Random EMF With Normal(2,1)"
1193 ]
1194 },
1195 {
1196 "cell_type": "code",
1197 "execution_count": 41,
1198 "metadata": {},
1199 "outputs": [],
1200 "source": [
1201 "random_emf_stats = readStats('../input/random_emf_normal/',6000)\n",
1202 "random_emf_dic = calDistanceDic(random_emf_stats, human_rep)\n",
1203 "\n",
1204 "# trajectories and colors\n",
1205 "trajectories = {}\n",
1206 "w = createSelectionWidge(trajectories)\n",
1207 "colors = createRandomColors(len(trajectories))"
1208 ]
1209 },
1210 {
1211 "cell_type": "code",
1212 "execution_count": 42,
1213 "metadata": {},
1214 "outputs": [
1215 {
1216 "data": {
1217 "application/vnd.jupyter.widget-view+json": {
1218 "model_id": "6b9ee873d9ca41649cf05f3b713d9142",
1219 "version_major": 2,
1220 "version_minor": 0
1221 },
1222 "text/plain": [
1223 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
1224 ]
1225 },
1226 "metadata": {},
1227 "output_type": "display_data"
1228 },
1229 {
1230 "data": {
1231 "text/plain": [
1232 "<function __main__.plot_out_degree(lines)>"
1233 ]
1234 },
1235 "execution_count": 42,
1236 "metadata": {},
1237 "output_type": "execute_result"
1238 }
1239 ],
1240 "source": [
1241 "def plot_out_degree(lines):\n",
1242 " plot(random_emf_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out degree', '../output/random_emf_normal/')\n",
1243 "interact(plot_out_degree, lines=[[]])"
1244 ]
1245 },
1246 {
1247 "cell_type": "code",
1248 "execution_count": 43,
1249 "metadata": {},
1250 "outputs": [
1251 {
1252 "data": {
1253 "application/vnd.jupyter.widget-view+json": {
1254 "model_id": "88f258a0b0ac4417aba320beca7508cf",
1255 "version_major": 2,
1256 "version_minor": 0
1257 },
1258 "text/plain": [
1259 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
1260 ]
1261 },
1262 "metadata": {},
1263 "output_type": "display_data"
1264 },
1265 {
1266 "data": {
1267 "text/plain": [
1268 "<function __main__.plot_node_activity(lines)>"
1269 ]
1270 },
1271 "execution_count": 43,
1272 "metadata": {},
1273 "output_type": "execute_result"
1274 }
1275 ],
1276 "source": [
1277 "def plot_node_activity(lines):\n",
1278 " plot(random_emf_dic, lines, 0, lambda a: a.na_distance, colors, 'node activity', '../output/random_emf_normal/')\n",
1279 "interact(plot_node_activity, lines=[[]])"
1280 ]
1281 },
1282 {
1283 "cell_type": "code",
1284 "execution_count": 44,
1285 "metadata": {},
1286 "outputs": [
1287 {
1288 "data": {
1289 "application/vnd.jupyter.widget-view+json": {
1290 "model_id": "d71cf26018184ee6953c50b74908f52d",
1291 "version_major": 2,
1292 "version_minor": 0
1293 },
1294 "text/plain": [
1295 "interactive(children=(Dropdown(description='lines', options=([],), value=[]), Output()), _dom_classes=('widget…"
1296 ]
1297 },
1298 "metadata": {},
1299 "output_type": "display_data"
1300 },
1301 {
1302 "data": {
1303 "text/plain": [
1304 "<function __main__.plot_mpc(lines)>"
1305 ]
1306 },
1307 "execution_count": 44,
1308 "metadata": {},
1309 "output_type": "execute_result"
1310 }
1311 ],
1312 "source": [
1313 "def plot_mpc(lines):\n",
1314 " plot(random_emf_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/random_emf_normal/')\n",
1315 "interact(plot_mpc, lines=[[]])"
1316 ]
1317 },
1318 {
1319 "cell_type": "code",
1320 "execution_count": 45,
1321 "metadata": {},
1322 "outputs": [],
1323 "source": [
1324 "con_viatra_stats = readStats('../input/controlled_viatra_all/',20000)\n",
1325 "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n",
1326 "\n",
1327 "# trajectories and colors\n",
1328 "trajectories = {}\n",
1329 "w = createSelectionWidge(trajectories)\n",
1330 "colors = createRandomColors(len(trajectories))"
1331 ]
1332 },
1333 {
1334 "cell_type": "code",
1335 "execution_count": 46,
1336 "metadata": {},
1337 "outputs": [
1338 {
1339 "data": {
1340 "application/vnd.jupyter.widget-view+json": {
1341 "model_id": "db15ac26aad84683b9da99fc54749850",
1342 "version_major": 2,
1343 "version_minor": 0
1344 },
1345 "text/plain": [
1346 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1347 ]
1348 },
1349 "metadata": {},
1350 "output_type": "display_data"
1351 },
1352 {
1353 "data": {
1354 "text/plain": [
1355 "<function __main__.plot_out_degree(lines)>"
1356 ]
1357 },
1358 "execution_count": 46,
1359 "metadata": {},
1360 "output_type": "execute_result"
1361 }
1362 ],
1363 "source": [
1364 "def plot_out_degree(lines):\n",
1365 " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/controled_viatra_all/')\n",
1366 "interact(plot_out_degree, lines=w)"
1367 ]
1368 },
1369 {
1370 "cell_type": "code",
1371 "execution_count": 47,
1372 "metadata": {},
1373 "outputs": [
1374 {
1375 "data": {
1376 "application/vnd.jupyter.widget-view+json": {
1377 "model_id": "30bfaf8dd45d4b21b0b43afe5e9fdb8a",
1378 "version_major": 2,
1379 "version_minor": 0
1380 },
1381 "text/plain": [
1382 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1383 ]
1384 },
1385 "metadata": {},
1386 "output_type": "display_data"
1387 },
1388 {
1389 "data": {
1390 "text/plain": [
1391 "<function __main__.plot_na(lines)>"
1392 ]
1393 },
1394 "execution_count": 47,
1395 "metadata": {},
1396 "output_type": "execute_result"
1397 }
1398 ],
1399 "source": [
1400 "def plot_na(lines):\n",
1401 " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/controled_viatra_all/')\n",
1402 "interact(plot_na, lines=w)"
1403 ]
1404 },
1405 {
1406 "cell_type": "code",
1407 "execution_count": 48,
1408 "metadata": {},
1409 "outputs": [
1410 {
1411 "data": {
1412 "application/vnd.jupyter.widget-view+json": {
1413 "model_id": "5636d37b4416474db5441fe47e7a8a30",
1414 "version_major": 2,
1415 "version_minor": 0
1416 },
1417 "text/plain": [
1418 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1419 ]
1420 },
1421 "metadata": {},
1422 "output_type": "display_data"
1423 },
1424 {
1425 "data": {
1426 "text/plain": [
1427 "<function __main__.plot_mpc(lines)>"
1428 ]
1429 },
1430 "execution_count": 48,
1431 "metadata": {},
1432 "output_type": "execute_result"
1433 }
1434 ],
1435 "source": [
1436 "def plot_mpc(lines):\n",
1437 " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/controled_viatra_all/')\n",
1438 "interact(plot_mpc, lines=w)"
1439 ]
1440 },
1441 {
1442 "cell_type": "markdown",
1443 "metadata": {},
1444 "source": [
1445 "### Viatra With Both metric and consistency"
1446 ]
1447 },
1448 {
1449 "cell_type": "code",
1450 "execution_count": 53,
1451 "metadata": {},
1452 "outputs": [],
1453 "source": [
1454 "con_viatra_stats = readStats('../input/viatra_control_all_with_consistency_1/',20000)\n",
1455 "con_viatra_dic = calDistanceDic(con_viatra_stats, human_rep)\n",
1456 "\n",
1457 "# trajectories and colors\n",
1458 "trajectories = {}\n",
1459 "w = createSelectionWidge(trajectories)\n",
1460 "colors = createRandomColors(len(trajectories))"
1461 ]
1462 },
1463 {
1464 "cell_type": "code",
1465 "execution_count": 54,
1466 "metadata": {},
1467 "outputs": [
1468 {
1469 "data": {
1470 "application/vnd.jupyter.widget-view+json": {
1471 "model_id": "e5c7231686544d959527cff36c1f1a5e",
1472 "version_major": 2,
1473 "version_minor": 0
1474 },
1475 "text/plain": [
1476 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1477 ]
1478 },
1479 "metadata": {},
1480 "output_type": "display_data"
1481 },
1482 {
1483 "data": {
1484 "text/plain": [
1485 "<function __main__.plot_out_degree(lines)>"
1486 ]
1487 },
1488 "execution_count": 54,
1489 "metadata": {},
1490 "output_type": "execute_result"
1491 }
1492 ],
1493 "source": [
1494 "def plot_out_degree(lines):\n",
1495 " plot(con_viatra_dic, lines, 0, lambda a: a.out_d_distance, colors, 'out_degree', '../output/viatra_control_all_with_consistency_1/')\n",
1496 "interact(plot_out_degree, lines=w)"
1497 ]
1498 },
1499 {
1500 "cell_type": "code",
1501 "execution_count": 55,
1502 "metadata": {},
1503 "outputs": [
1504 {
1505 "data": {
1506 "application/vnd.jupyter.widget-view+json": {
1507 "model_id": "e043705333bb474e89582ea9358c57c3",
1508 "version_major": 2,
1509 "version_minor": 0
1510 },
1511 "text/plain": [
1512 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1513 ]
1514 },
1515 "metadata": {},
1516 "output_type": "display_data"
1517 },
1518 {
1519 "data": {
1520 "text/plain": [
1521 "<function __main__.plot_na(lines)>"
1522 ]
1523 },
1524 "execution_count": 55,
1525 "metadata": {},
1526 "output_type": "execute_result"
1527 }
1528 ],
1529 "source": [
1530 "def plot_na(lines):\n",
1531 " plot(con_viatra_dic, lines, 0, lambda a: a.na_distance, colors, 'Node Activity', '../output/viatra_control_all_with_consistency_1/')\n",
1532 "interact(plot_na, lines=w)"
1533 ]
1534 },
1535 {
1536 "cell_type": "code",
1537 "execution_count": 56,
1538 "metadata": {},
1539 "outputs": [
1540 {
1541 "data": {
1542 "application/vnd.jupyter.widget-view+json": {
1543 "model_id": "ee4723b62293402e87e6a3f798019b36",
1544 "version_major": 2,
1545 "version_minor": 0
1546 },
1547 "text/plain": [
1548 "interactive(children=(SelectMultiple(description='Trajectory:', options={}, value=()), Output()), _dom_classes…"
1549 ]
1550 },
1551 "metadata": {},
1552 "output_type": "display_data"
1553 },
1554 {
1555 "data": {
1556 "text/plain": [
1557 "<function __main__.plot_mpc(lines)>"
1558 ]
1559 },
1560 "execution_count": 56,
1561 "metadata": {},
1562 "output_type": "execute_result"
1563 }
1564 ],
1565 "source": [
1566 "def plot_mpc(lines):\n",
1567 " plot(con_viatra_dic, lines, 0, lambda a: a.mpc_distance, colors, 'mpc', '../output/viatra_control_all_with_consistency_1/')\n",
1568 "interact(plot_mpc, lines=w)"
1569 ]
1570 },
1571 {
1572 "cell_type": "code",
1573 "execution_count": null,
1574 "metadata": {},
1575 "outputs": [],
1576 "source": []
1577 }
1578 ],
1579 "metadata": {
1580 "kernelspec": {
1581 "display_name": "Python 3",
1582 "language": "python",
1583 "name": "python3"
1584 },
1585 "language_info": {
1586 "codemirror_mode": {
1587 "name": "ipython",
1588 "version": 3
1589 },
1590 "file_extension": ".py",
1591 "mimetype": "text/x-python",
1592 "name": "python",
1593 "nbconvert_exporter": "python",
1594 "pygments_lexer": "ipython3",
1595 "version": "3.7.3"
1596 }
1597 },
1598 "nbformat": 4,
1599 "nbformat_minor": 2
1600}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb
new file mode 100644
index 00000000..32edb00c
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/model_evolve_comparison/src/representative_selector .ipynb
@@ -0,0 +1,392 @@
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "## Use K-medoid algorithm to find the suitable human model representitives"
8 ]
9 },
10 {
11 "cell_type": "markdown",
12 "metadata": {},
13 "source": [
14 "### Imports"
15 ]
16 },
17 {
18 "cell_type": "code",
19 "execution_count": 2,
20 "metadata": {},
21 "outputs": [],
22 "source": [
23 "import os, sys\n",
24 "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n",
25 "sys.path.append(lib_path)\n",
26 "from GraphType import GraphStat\n",
27 "import readCSV as reader\n",
28 "from scipy import stats\n",
29 "from ipywidgets import interact, fixed, interactive\n",
30 "import ipywidgets as widgets\n",
31 "from pyclustering.cluster.kmedoids import kmedoids\n",
32 "from pyclustering.utils.metric import distance_metric, type_metric\n",
33 "import random\n",
34 "import numpy as np"
35 ]
36 },
37 {
38 "cell_type": "markdown",
39 "metadata": {},
40 "source": [
41 "### Define a new distance metric"
42 ]
43 },
44 {
45 "cell_type": "code",
46 "execution_count": 3,
47 "metadata": {},
48 "outputs": [],
49 "source": [
50 "def ks_value(dest1, dest2):\n",
51 " value, p = stats.ks_2samp(dest1, dest2)\n",
52 " return value\n",
53 "\n",
54 "\n",
55 "ks_metric = distance_metric(type_metric.USER_DEFINED, func=ks_value)"
56 ]
57 },
58 {
59 "cell_type": "markdown",
60 "metadata": {},
61 "source": [
62 "### Read Human Models"
63 ]
64 },
65 {
66 "cell_type": "code",
67 "execution_count": 4,
68 "metadata": {},
69 "outputs": [
70 {
71 "data": {
72 "text/plain": [
73 "304"
74 ]
75 },
76 "execution_count": 4,
77 "metadata": {},
78 "output_type": "execute_result"
79 }
80 ],
81 "source": [
82 "# Progress Widge\n",
83 "w = widgets.FloatProgress(\n",
84 " value=0,\n",
85 " min=0,\n",
86 " max=1.0,\n",
87 " step=0.1,\n",
88 " description='Loading Files...:',\n",
89 " bar_style='info',\n",
90 " orientation='horizontal'\n",
91 ")\n",
92 "\n",
93 "humanFiles = reader.readmultiplefiles('../input/Human/', 1300, False)\n",
94 "modelToFileName = {}\n",
95 "for name in humanFiles:\n",
96 " modelToFileName[GraphStat(name)] = name\n",
97 "\n",
98 "models = list(modelToFileName.keys())\n",
99 "len(humanFiles)"
100 ]
101 },
102 {
103 "cell_type": "markdown",
104 "metadata": {},
105 "source": [
106 "### Find Representative by K-medroid for different dists on GraphStat"
107 ]
108 },
109 {
110 "cell_type": "markdown",
111 "metadata": {},
112 "source": [
113 "* Returns the index of the representative"
114 ]
115 },
116 {
117 "cell_type": "code",
118 "execution_count": 5,
119 "metadata": {},
120 "outputs": [],
121 "source": [
122 "def findRep(graphStats, func):\n",
123 " out_ds = list(map(func, models))\n",
124 "\n",
125 " #choose a random starting point\n",
126 " start_index = random.randint(0, len(out_ds))\n",
127 "\n",
128 " # start with one initial metrid [start_index]\n",
129 " outdegree_kmedoid = kmedoids(out_ds, [start_index], metric=ks_metric)\n",
130 "\n",
131 " outdegree_kmedoid.process()\n",
132 " centoids = outdegree_kmedoid.get_medoids()\n",
133 " return centoids[0]"
134 ]
135 },
136 {
137 "cell_type": "markdown",
138 "metadata": {},
139 "source": [
140 "## Find representative for out degree"
141 ]
142 },
143 {
144 "cell_type": "markdown",
145 "metadata": {},
146 "source": [
147 "### For Yakindumm\n",
148 "#### For all human models\n",
149 "* the rep found is ../input/humanOutput\\R_20158_run_1.csv\n",
150 "* the average distance between it and others is 0.05515988287586802\n",
151 "\n",
152 "#### For human models with $100 \\pm 10$ nodes\n",
153 "* the rep found is ../input/human_output_100\\R_2015225_run_1.csv\n",
154 "* the average distance between it and others is $0.046150929558524685$\n",
155 "\n",
156 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
157 "* the rep found is ../input/human_output_100\\R_2015248_run_1.csv\n",
158 "* average distance: 0.052753778714861366\n",
159 "* median: 0.0468131868131868\n",
160 "* std: 0.0246917800149673\n",
161 "* max: 0.15993907083015996\n",
162 "* min: 0.0"
163 ]
164 },
165 {
166 "cell_type": "code",
167 "execution_count": 6,
168 "metadata": {},
169 "outputs": [
170 {
171 "name": "stdout",
172 "output_type": "stream",
173 "text": [
174 "../input/Human\\33_run_1.csv\n",
175 "../input/Human\\33_run_1.csv\n"
176 ]
177 }
178 ],
179 "source": [
180 "od_rep_index = findRep(models, lambda m: m.out_d)\n",
181 "print(list(modelToFileName.values())[od_rep_index])\n",
182 "od_rep_model = models[od_rep_index]\n",
183 "print(modelToFileName[od_rep_model])\n"
184 ]
185 },
186 {
187 "cell_type": "code",
188 "execution_count": 7,
189 "metadata": {},
190 "outputs": [
191 {
192 "name": "stdout",
193 "output_type": "stream",
194 "text": [
195 "average distance: 0.04615092955852465\n",
196 "median: 0.04402137483980782\n",
197 "std: 0.017305709419913242\n",
198 "max: 0.1411706837186424\n",
199 "min: 0.0\n"
200 ]
201 }
202 ],
203 "source": [
204 "distances = []\n",
205 "for model in models:\n",
206 " distances.append(ks_value(od_rep_model.out_d, model.out_d))\n",
207 "print('average distance: ', np.mean(distances))\n",
208 "print('median: ', np.median(distances))\n",
209 "print('std: ', np.std(distances))\n",
210 "print('max:', max(distances))\n",
211 "print('min:', min(distances))"
212 ]
213 },
214 {
215 "cell_type": "markdown",
216 "metadata": {},
217 "source": [
218 "## Find Representative for node activities"
219 ]
220 },
221 {
222 "cell_type": "markdown",
223 "metadata": {},
224 "source": [
225 "### For Yakindumm\n",
226 "#### For all human models\n",
227 "* the rep found is ../input/humanOutput\\R_2016176_run_1.csv\n",
228 "* the average distance between it and others is 0.05275267434589047\n",
229 "\n",
230 "#### For human models with $100 \\pm 10$ nodes\n",
231 "* the rep found is ../input/human_output_100\\R_2017419_run_1.csv\n",
232 "* the average distance between it and others is $0.04679429311806747$\n",
233 "\n",
234 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
235 "* the rep found is ../input/human_output_100\\R_2017131_run_1.csv\n",
236 "* average distance: 0.024629205820449567\n",
237 "* median: 0.023787888564682946\n",
238 "* std: 0.013845547883198073\n",
239 "* max: 0.09044674910251294\n",
240 "* min: 0.0"
241 ]
242 },
243 {
244 "cell_type": "code",
245 "execution_count": 8,
246 "metadata": {},
247 "outputs": [
248 {
249 "name": "stdout",
250 "output_type": "stream",
251 "text": [
252 "../input/Human\\288_run_1.csv\n",
253 "../input/Human\\288_run_1.csv\n"
254 ]
255 }
256 ],
257 "source": [
258 "na_rep_index = findRep(models, lambda m: m.na)\n",
259 "print(list(modelToFileName.values())[na_rep_index])\n",
260 "na_rep_model = models[na_rep_index]\n",
261 "print(modelToFileName[na_rep_model])\n"
262 ]
263 },
264 {
265 "cell_type": "code",
266 "execution_count": 9,
267 "metadata": {},
268 "outputs": [
269 {
270 "name": "stdout",
271 "output_type": "stream",
272 "text": [
273 "average distance: 0.046794293118067494\n",
274 "median: 0.03898868458274401\n",
275 "std: 0.02880119213919405\n",
276 "max: 0.18702970297029703\n",
277 "min: 0.0\n"
278 ]
279 }
280 ],
281 "source": [
282 "distances = []\n",
283 "for model in models:\n",
284 " distances.append(ks_value(na_rep_model.na, model.na))\n",
285 "print('average distance: ', np.mean(distances))\n",
286 "print('median: ', np.median(distances))\n",
287 "print('std: ', np.std(distances))\n",
288 "print('max:', max(distances))\n",
289 "print('min:', min(distances))"
290 ]
291 },
292 {
293 "cell_type": "markdown",
294 "metadata": {},
295 "source": [
296 "## Find Representative for MPC"
297 ]
298 },
299 {
300 "cell_type": "markdown",
301 "metadata": {},
302 "source": [
303 "### For Yakindumm\n",
304 "\n",
305 "#### For all human models\n",
306 "* the rep found is ../input/humanOutput\\R_2015246_run_1.csv\n",
307 "* the average distance between it and others is 0.08556632702185384\n",
308 "\n",
309 "#### For human models with $100 \\pm 10$ nodes\n",
310 "* the rep found is ../input/human_output_100\\R_2016324_run_1.csv\n",
311 "* the average distance between it and others is $0.07028909225833631$\n",
312 "\n",
313 "#### for human model with $100 \\pm 10$ nodes and new metric\n",
314 "* average distance: 0.054782550772603904\n",
315 "* median: 0.048330503678551184\n",
316 "* std: 0.028208257424907526\n",
317 "* max: 0.21181525241675614\n",
318 "* min: 0.0"
319 ]
320 },
321 {
322 "cell_type": "code",
323 "execution_count": 10,
324 "metadata": {},
325 "outputs": [
326 {
327 "name": "stdout",
328 "output_type": "stream",
329 "text": [
330 "../input/Human\\151_run_1.csv\n",
331 "../input/Human\\151_run_1.csv\n"
332 ]
333 }
334 ],
335 "source": [
336 "mpc_rep_index = findRep(models, lambda m: m.mpc)\n",
337 "print(list(modelToFileName.values())[mpc_rep_index])\n",
338 "mpc_rep_model = models[mpc_rep_index]\n",
339 "print(modelToFileName[mpc_rep_model])"
340 ]
341 },
342 {
343 "cell_type": "code",
344 "execution_count": 11,
345 "metadata": {},
346 "outputs": [
347 {
348 "name": "stdout",
349 "output_type": "stream",
350 "text": [
351 "average distance: 0.07028909225833632\n",
352 "median: 0.06254480286738351\n",
353 "std: 0.037281890512224164\n",
354 "max: 0.21961550993809065\n",
355 "min: 0.0\n"
356 ]
357 }
358 ],
359 "source": [
360 "distances = []\n",
361 "for model in models:\n",
362 " distances.append(ks_value(mpc_rep_model.mpc, model.mpc))\n",
363 "print('average distance: ', np.mean(distances))\n",
364 "print('median: ', np.median(distances))\n",
365 "print('std: ', np.std(distances))\n",
366 "print('max:', max(distances))\n",
367 "print('min:', min(distances))"
368 ]
369 }
370 ],
371 "metadata": {
372 "kernelspec": {
373 "display_name": "Python 3",
374 "language": "python",
375 "name": "python3"
376 },
377 "language_info": {
378 "codemirror_mode": {
379 "name": "ipython",
380 "version": 3
381 },
382 "file_extension": ".py",
383 "mimetype": "text/x-python",
384 "name": "python",
385 "nbconvert_exporter": "python",
386 "pygments_lexer": "ipython3",
387 "version": "3.7.3"
388 }
389 },
390 "nbformat": 4,
391 "nbformat_minor": 2
392}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore
new file mode 100644
index 00000000..b3934b01
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/input/.gitignore
@@ -0,0 +1,3 @@
1# ignore everything in this folder
2*
3!.gitignore \ No newline at end of file
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb
new file mode 100644
index 00000000..b4e3432a
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/Node Type Analysis.ipynb
@@ -0,0 +1,435 @@
1{
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 2,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import os, sys\n",
10 "import glob\n",
11 "lib_path = os.path.abspath(os.path.join('..', '..', 'utils'))\n",
12 "sys.path.append(lib_path)\n",
13 "import matplotlib.pyplot as plt\n",
14 "from GraphType import GraphStat\n",
15 "import readCSV as reader\n",
16 "import constants"
17 ]
18 },
19 {
20 "cell_type": "code",
21 "execution_count": 3,
22 "metadata": {},
23 "outputs": [],
24 "source": [
25 "def getModels(folderName, numberOfModels):\n",
26 " filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
27 " graphStats = [GraphStat(filename) for filename in filenames]\n",
28 " return graphStats"
29 ]
30 },
31 {
32 "cell_type": "code",
33 "execution_count": 4,
34 "metadata": {},
35 "outputs": [],
36 "source": [
37 "def drawTypeDistributions(folderName, numberOfModels):\n",
38 " graphStats = getModels(folderName, numberOfModels)\n",
39 " typeMap = {}\n",
40 " keys = set()\n",
41 " for g in graphStats:\n",
42 " keys = keys.union(set(g.nodeTypeStat.keys()))\n",
43 " for key in keys:\n",
44 " typeMap[key] = [float(g.nodeTypeStat.get(key,0)) for g in graphStats]\n",
45 " print(list(typeMap.keys()))\n",
46 " for i, key in enumerate(typeMap.keys()):\n",
47 " plt.figure(i)\n",
48 " plt.hist(typeMap[key], range = (0,1), bins=50)\n",
49 " plt.title(key)\n",
50 " plt.plot()"
51 ]
52 },
53 {
54 "cell_type": "code",
55 "execution_count": 4,
56 "metadata": {
57 "scrolled": true
58 },
59 "outputs": [
60 {
61 "name": "stdout",
62 "output_type": "stream",
63 "text": [
64 "['EPackage', 'EAttribute', 'EEnumLiteral', 'EGenericType', 'EAnnotation', 'EOperation', 'EEnum', 'ETypeParameter', 'EParameter', 'EReference', 'EClass', 'EStringToStringMapEntry', 'EDataType']\n"
65 ]
66 },
67 {
68 "data": {
69 "image/png": "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\n",
70 "text/plain": [
71 "<Figure size 432x288 with 1 Axes>"
72 ]
73 },
74 "metadata": {
75 "needs_background": "light"
76 },
77 "output_type": "display_data"
78 },
79 {
80 "data": {
81 "image/png": "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\n",
82 "text/plain": [
83 "<Figure size 432x288 with 1 Axes>"
84 ]
85 },
86 "metadata": {
87 "needs_background": "light"
88 },
89 "output_type": "display_data"
90 },
91 {
92 "data": {
93 "image/png": "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\n",
94 "text/plain": [
95 "<Figure size 432x288 with 1 Axes>"
96 ]
97 },
98 "metadata": {
99 "needs_background": "light"
100 },
101 "output_type": "display_data"
102 },
103 {
104 "data": {
105 "image/png": "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\n",
106 "text/plain": [
107 "<Figure size 432x288 with 1 Axes>"
108 ]
109 },
110 "metadata": {
111 "needs_background": "light"
112 },
113 "output_type": "display_data"
114 },
115 {
116 "data": {
117 "image/png": "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\n",
118 "text/plain": [
119 "<Figure size 432x288 with 1 Axes>"
120 ]
121 },
122 "metadata": {
123 "needs_background": "light"
124 },
125 "output_type": "display_data"
126 },
127 {
128 "data": {
129 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAATl0lEQVR4nO3df7Ddd13n8eeLxlIVaFqSdmsSCB2DQ3WG0rkDddgfQNRpi0uqtm4ZtbFGo25lWXFciuy4uj9bd6DSkUGzlDVFKC1VbBaKbC3tgK4tpPYHhYqNtTR3UprbX2FrQe3y3j/O55aT5Cb33Nxz78395PmYOXO+38/3c+73/cm5eZ3v+Zzv+d5UFZKkvjxvqQuQJI2f4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXVpAST6ZZPNS16Fjj+Guo1qSh5J8PcnTQ7ffadvWJvlQkseT/F2SzyX54SWs9TeS/MFwW1WdW1Xbl6omHbsMdy0H/7KqXjB0+6UkJwN/BvwD8L3AKuBK4MNJLhh3AUlWjPtnSgvJcNdy9cvA08CWqvpqVX29qq4F/gvwriQBSFJJ/k2SB5M8luS/J3nu9z7JzyS5P8mTST6V5KVD2yrJpUkeAB5obe9JsjvJ15LcmeSftfZzgF8D/lV7d3FPa78tyc+25ecl+fdJvpJkb5JrkpzYtq1v+9uc5OFW6zsX4d9RnTLctVz9IPCHVfXNA9qvB14CvHyo7UeACeAsYBPwMwBJzmcQyD8KrAY+C1x7wM87H3gNcEZb/zxwJnAy8GHgo0lOqKo/Af4rcF17d/HKGWr+6XZ7PXA68ALgdw7o80+B7wE2Ar+e5BWH+0eQDsVw13Lwx0meGrr9HINpmEdm6Dvdtmqo7YqqeqKqHgZ+G3hza/954L9V1f1V9SyDcD5z+Oi9bX+iqr4OUFV/UFWPV9WzVfUu4PkMwngUPwG8u6oerKqngXcAFx0w5fOb7V3IPcA9wEwvEtKsDHctB+dX1cqh2/8AHgNOm6HvdNtjQ227h5a/AnxXW34p8J7pFw3gCSDAmkM8liS/0qZx9rXHnMj+LySH811t/8O1rABOHWr76tDyMwyO7qU5M9y1XP0p8GPD8+fNjzMI5L8eals3tPwSYE9b3g38/AEvHN9eVf9nqP9zl01t8+tvb/s4qapWAvsYvCDs1/cQ9jB4QRmu5Vng0VkeJ82Z4a7l6krgRcDVSf5JkhOSvBl4J/Crtf+1rH81yUlJ1gFvBa5r7b8LvCPJ9wIkOTHJhYfZ5wsZhPEUsCLJr7capj0KrJ/hBWfatcAvJ3lZkhfwrTn6Z+cycGkUhruWg/91wHnuH6uqxxl8+HgC8CXgceBtwE9V1XUHPP5G4E7gbuATwNUAVfUx4ArgI0m+BtwHnHuYOj4FfJLBu4KvAN9g/2mbj7b7x5P85QyP/wDwQeAzwN+2x79lhPFLcxb/WId6lqSADVW1a6lrkRaTR+6S1CHDXZI65LSMJHVopCP3JCuT3JDkr9o5vt+f5OQkNyd5oN2f1PomyVVJdiW5N8lZCzsESdKBRjpyT7Id+GxVvT/J8cB3MPja9hNVdXmSyxic9/v2JOcxOAPgPAZf235PVb3mcD9/1apVtX79+nkORZKOLXfeeedjVbV6pm2zhnuSFzH4GvTpw+cOJ/ky8LqqeiTJacBtVfU9SX6vLV97YL9D7WNiYqJ27tw554FJ0rEsyZ1VNTHTtlGmZU5n8KWN/5nkriTvT/KdwKnTgd3uT2n917D/ub+T7P917umitibZmWTn1NTUHIYjSZrNKOG+gsHV9N5XVa8C/g647DD9M0PbQW8PqmpbVU1U1cTq1TO+q5AkHaFRwn0SmKyqO9r6DQzC/tE2HUO73zvUf/haHmv51rU8JEmLYNZwr6qvAruTTF/WdCODr3vvAKb/NuRmBl/xprVf3M6aORvYd7j5dknS+I36p8PeAnyonSnzIHAJgxeG65NsAR4Gpi+4dBODM2V2Mbhk6SVjrViSNKuRwr2q7mbwl2wOtHGGvgVcOs+6JEnz4OUHJKlDhrskdchwl6QOjfqB6lFr/WWfmLH9ocvfuMiVSNLRwyN3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOmS4S1KHDHdJ6pDhLkkdMtwlqUOGuyR1yHCXpA4Z7pLUIcNdkjo0UrgneSjJF5LcnWRnazs5yc1JHmj3J7X2JLkqya4k9yY5ayEHIEk62FyO3F9fVWdW1URbvwy4pao2ALe0dYBzgQ3tthV437iKlSSNZj7TMpuA7W15O3D+UPs1NXA7sDLJafPYjyRpjkYN9wL+d5I7k2xtbadW1SMA7f6U1r4G2D302MnWtp8kW5PsTLJzamrqyKqXJM1oxYj9XltVe5KcAtyc5K8O0zcztNVBDVXbgG0AExMTB22XJB25kY7cq2pPu98LfAx4NfDo9HRLu9/buk8C64YevhbYM66CJUmzmzXck3xnkhdOLwM/BNwH7AA2t26bgRvb8g7g4nbWzNnAvunpG0nS4hhlWuZU4GNJpvt/uKr+JMnngeuTbAEeBi5s/W8CzgN2Ac8Al4y9aknSYc0a7lX1IPDKGdofBzbO0F7ApWOpTpJ0RPyGqiR1yHCXpA4Z7pLUIcNdkjpkuEtShwx3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOmS4S1KHDHdJ6pDhLkkdMtwlqUOGuyR1yHCXpA4Z7pLUoZHDPclxSe5K8vG2/rIkdyR5IMl1SY5v7c9v67va9vULU7ok6VDmcuT+VuD+ofUrgCuragPwJLCltW8Bnqyq7waubP0kSYtopHBPshZ4I/D+th7gDcANrct24Py2vKmt07ZvbP0lSYtk1CP33wb+HfDNtv5i4KmqeratTwJr2vIaYDdA276v9d9Pkq1JdibZOTU1dYTlS5JmMmu4J/lhYG9V3TncPEPXGmHbtxqqtlXVRFVNrF69eqRiJUmjWTFCn9cCb0pyHnAC8CIGR/Irk6xoR+drgT2t/ySwDphMsgI4EXhi7JVLkg5p1iP3qnpHVa2tqvXARcCnq+ongFuBC1q3zcCNbXlHW6dt/3RVHXTkLklaOPM5z/3twNuS7GIwp351a78aeHFrfxtw2fxKlCTN1SjTMs+pqtuA29ryg8CrZ+jzDeDCMdQmSTpCfkNVkjpkuEtShwx3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOmS4S1KHDHdJ6pDhLkkdMtwlqUOGuyR1yHCXpA4Z7pLUIcNdkjpkuEtShwx3SerQrOGe5IQkn0tyT5IvJvnN1v6yJHckeSDJdUmOb+3Pb+u72vb1CzsESdKBRjly/3vgDVX1SuBM4JwkZwNXAFdW1QbgSWBL678FeLKqvhu4svWTJC2iWcO9Bp5uq9/WbgW8AbihtW8Hzm/Lm9o6bfvGJBlbxZKkWY00557kuCR3A3uBm4G/AZ6qqmdbl0lgTVteA+wGaNv3AS+e4WduTbIzyc6pqan5jUKStJ+Rwr2q/l9VnQmsBV4NvGKmbu1+pqP0OqihaltVTVTVxOrVq0etV5I0gjmdLVNVTwG3AWcDK5OsaJvWAnva8iSwDqBtPxF4YhzFSpJGM8rZMquTrGzL3w78AHA/cCtwQeu2GbixLe9o67Ttn66qg47cJUkLZ8XsXTgN2J7kOAYvBtdX1ceTfAn4SJL/DNwFXN36Xw18MMkuBkfsFy1A3ZKkw5g13KvqXuBVM7Q/yGD+/cD2bwAXjqU6SdIR8RuqktQhw12SOmS4S1KHDHdJ6pDhLkkdMtwlqUOGuyR1yHCXpA4Z7pLUIcNdkjpkuEtShwx3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOmS4S1KHZg33JOuS3Jrk/iRfTPLW1n5ykpuTPNDuT2rtSXJVkl1J7k1y1kIPQpK0v1GO3J8FfqWqXgGcDVya5AzgMuCWqtoA3NLWAc4FNrTbVuB9Y69aknRYs4Z7VT1SVX/Zlv8vcD+wBtgEbG/dtgPnt+VNwDU1cDuwMslpY69cknRIc5pzT7IeeBVwB3BqVT0CgxcA4JTWbQ2we+hhk63twJ+1NcnOJDunpqbmXrkk6ZBGDvckLwD+EPi3VfW1w3Wdoa0OaqjaVlUTVTWxevXqUcuQJI1gpHBP8m0Mgv1DVfVHrfnR6emWdr+3tU8C64YevhbYM55yJUmjGOVsmQBXA/dX1buHNu0ANrflzcCNQ+0Xt7Nmzgb2TU/fSJIWx4oR+rwW+CngC0nubm2/BlwOXJ9kC/AwcGHbdhNwHrALeAa4ZKwVS5JmNWu4V9WfMfM8OsDGGfoXcOk865IkzYPfUJWkDhnuktQhw12SOmS4S1KHDHdJ6pDhLkkdMtwlqUOGuyR1yHCXpA4Z7pLUIcNdkjpkuEtShwx3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOjRruCf5QJK9Se4bajs5yc1JHmj3J7X2JLkqya4k9yY5ayGLlyTNbJQj998Hzjmg7TLglqraANzS1gHOBTa021bgfeMpU5I0F7OGe1V9BnjigOZNwPa2vB04f6j9mhq4HViZ5LRxFStJGs2RzrmfWlWPALT7U1r7GmD3UL/J1naQJFuT7Eyyc2pq6gjLkCTNZNwfqGaGtpqpY1Vtq6qJqppYvXr1mMuQpGPbkYb7o9PTLe1+b2ufBNYN9VsL7Dny8iRJR+JIw30HsLktbwZuHGq/uJ01czawb3r6RpK0eFbM1iHJtcDrgFVJJoH/AFwOXJ9kC/AwcGHrfhNwHrALeAa4ZAFqliTNYtZwr6o3H2LTxhn6FnDpfIuSJM2P31CVpA4Z7pLUIcNdkjpkuEtShwx3SeqQ4S5JHTLcJalDhrskdchwl6QOGe6S1CHDXZI6ZLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDhnuktQhw12SOmS4S1KHDHdJ6pDhLkkdWrHUBSy29Zd94pDbHrr8jYtYiSQtHI/cJalD3R65H+4Ifa6P8Yhe0nLTbbiPk6EvablxWkaSOrQgR+5JzgHeAxwHvL+qLl+I/RytjmRKaCa+M5B0pMYe7kmOA94L/CAwCXw+yY6q+tK497XUxhXiC71fXySkY89CHLm/GthVVQ8CJPkIsAnoLtwX2rhePBbjRWiuLyBz/RzDzz2kuVmIcF8D7B5anwRec2CnJFuBrW316SRfPsL9rQIeO8LHLldH3ZhzxYL/nBnHPK79HqWOuud5ETjmuXnpoTYsRLhnhrY6qKFqG7Bt3jtLdlbVxHx/znLimI8NjvnYsFBjXoizZSaBdUPra4E9C7AfSdIhLES4fx7YkORlSY4HLgJ2LMB+JEmHMPZpmap6NskvAZ9icCrkB6rqi+Pez5B5T+0sQ4752OCYjw0LMuZUHTQdLkla5vyGqiR1yHCXpA4tm3BPck6SLyfZleSyGbY/P8l1bfsdSdYvfpXjNcKY35bkS0nuTXJLkkOe87pczDbmoX4XJKkky/60uVHGnOTH23P9xSQfXuwax22E3+2XJLk1yV3t9/u8pahzXJJ8IMneJPcdYnuSXNX+Pe5Ncta8d1pVR/2NwQezfwOcDhwP3AOccUCffw38blu+CLhuqetehDG/HviOtvyLx8KYW78XAp8BbgcmlrruRXieNwB3ASe19VOWuu5FGPM24Bfb8hnAQ0td9zzH/M+Bs4D7DrH9POCTDL4ndDZwx3z3uVyO3J+7pEFV/QMwfUmDYZuA7W35BmBjkpm+ULVczDrmqrq1qp5pq7cz+E7BcjbK8wzwn4DfAr6xmMUtkFHG/HPAe6vqSYCq2rvINY7bKGMu4EVt+USW+XdlquozwBOH6bIJuKYGbgdWJjltPvtcLuE+0yUN1hyqT1U9C+wDXrwo1S2MUcY8bAuDV/7lbNYxJ3kVsK6qPr6YhS2gUZ7nlwMvT/LnSW5vV11dzkYZ828AP5lkErgJeMvilLZk5vr/fVbL5Y91jHJJg5Eue7CMjDyeJD8JTAD/YkErWniHHXOS5wFXAj+9WAUtglGe5xUMpmZex+Dd2WeTfF9VPbXAtS2UUcb8ZuD3q+pdSb4f+GAb8zcXvrwlMfb8Wi5H7qNc0uC5PklWMHgrd7i3QUe7kS7jkOQHgHcCb6qqv1+k2hbKbGN+IfB9wG1JHmIwN7ljmX+oOurv9o1V9Y9V9bfAlxmE/XI1ypi3ANcDVNVfACcwuMBWr8Z+2ZblEu6jXNJgB7C5LV8AfLraJxXL1KxjblMUv8cg2Jf7PCzMMuaq2ldVq6pqfVWtZ/A5w5uqaufSlDsWo/xu/zGDD89JsorBNM2Di1rleI0y5oeBjQBJXsEg3KcWtcrFtQO4uJ01czawr6oemddPXOpPkefwafN5wF8z+JT9na3tPzL4zw2DJ/+jwC7gc8DpS13zIoz5T4FHgbvbbcdS17zQYz6g720s87NlRnyeA7ybwd9E+AJw0VLXvAhjPgP4cwZn0twN/NBS1zzP8V4LPAL8I4Oj9C3ALwC/MPQcv7f9e3xhHL/XXn5Akjq0XKZlJElzYLhLUocMd0nqkOEuSR0y3CWpQ4a7JHXIcJekDv1/r5fejWS3rgkAAAAASUVORK5CYII=\n",
130 "text/plain": [
131 "<Figure size 432x288 with 1 Axes>"
132 ]
133 },
134 "metadata": {
135 "needs_background": "light"
136 },
137 "output_type": "display_data"
138 },
139 {
140 "data": {
141 "image/png": "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\n",
142 "text/plain": [
143 "<Figure size 432x288 with 1 Axes>"
144 ]
145 },
146 "metadata": {
147 "needs_background": "light"
148 },
149 "output_type": "display_data"
150 },
151 {
152 "data": {
153 "image/png": "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\n",
154 "text/plain": [
155 "<Figure size 432x288 with 1 Axes>"
156 ]
157 },
158 "metadata": {
159 "needs_background": "light"
160 },
161 "output_type": "display_data"
162 },
163 {
164 "data": {
165 "image/png": "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\n",
166 "text/plain": [
167 "<Figure size 432x288 with 1 Axes>"
168 ]
169 },
170 "metadata": {
171 "needs_background": "light"
172 },
173 "output_type": "display_data"
174 },
175 {
176 "data": {
177 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEICAYAAABGaK+TAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAQS0lEQVR4nO3da5BlVXnG8f8jIyIi4TINhcOlsYJGY8VLdSFGo0ZINBgdPqCFkWQwU0zU8hI1EaJV0YpJCiwVTcpIJqJODFEIXph4SQSEMiEycUZQBKJcxGEUYVBBvIO8+XA20vZ0T+/p7nO6V8//V9XV56yz9t7v6tM8rF577zOpKiRJ7XnQYhcgSZobA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuJatJAcn+VySu5O8fbHrkRbaisUuQEpyM3Aw8PNJzR8ANgPnAD8G7gO+Dryxqj7Rc9frgDuAfcsbHrQMOQPXUvG8qtpn0tcruvbPV9U+wH7APwAfTrJfz30eAVw7l/BO4uRGS54BriZU1X3AB4GHAUfd357kmCT/k+TOJF9K8syu/QPAGuD1SX6Q5LgkD0pyepIbk3wnyflJDuj6jyepJGuTbAU+u7P9d69dluQtSS7vlmk+k2TlpNefNmnbW5Kc0rU/JMnbkmxNcluSs5M8dLg/QS1HBriakGQP4CXAPcA3urZVwCeBvwYOAP4M+EiSsao6BTgXeGs3o78YeBVwAvAM4BHA94B3TznUM4DHAM/e2f4n9f+Drq6DgD27PiQ5HPg08PfAGPAE4KpumzOBR3VtvwqsAv5yXj8g7ZYMcC0VH+9mqvd/ndq1H5PkTuAnwNuAk6vq9u61k4FPVdWnquq+qrqIwbr58TMc408YrKFvq6qfAm8GTpyyXPLmqvphVf245/7fX1Vf6/qfzyCUAV4MXFxVH6qqe6rqO1V1VZIApwKvqarvVtXdwN8CJ83x56bdmOt8WipO6GbJv9AtOVxRVU9Lsg+DE5q/xSAoYbDG/YIkz5u02YOBS2c4xhHAx5LcN6nt5wxOoN7vlin9Z9v/tyc9/hGwT/f4MODGaWoYA/YGtgyyHIAAe8xQszQjA1xNqKofJHk5cGOS91XVlQzC9oNVdeosm9/vFuCPq+ryqS8kGb//UFP678r+px7r6Gna72BwVc2vV9U357Bf6RdcQlEzquo7wHt5YL34X4DnJXl2kj2S7JXkmUkOnWEXZwN/k+QIgCRjSVbv5JC7uv/JzgWOS/LCJCuSHJjkCd3J2H8CzkpyUFfHqiTP7rFP6ZcY4Foq/r27WuT+r4/N0O+dwPFJfqOqbgFWA28AtjOY9f45M/9evwvYCHwmyd3AFcCTZypoDvufvO1WBmvlrwO+y+AE5uO7l08DbgCuSPJ94GLg0bPtU5oq3t8gSW1yBi5JjTLAJalRBrgkNcoAl6RGjfQ68JUrV9b4+PgoDylJzduyZcsdVTU2tX2kAT4+Ps7mzZtHeUhJal6Sb0zX7hKKJDXKAJekRhngktQoA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuCQ1qpl/Um389E9O237zGc8dcSWStDQ4A5ekRhngktQoA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRvUK8CSvSXJNkq8k+VCSvZIcmWRTkuuTnJdkz2EXK0l6wKwBnmQV8CpgoqoeB+wBnAScCZxVVUcB3wPWDrNQSdIv67uEsgJ4aJIVwN7ArcCzgAu61zcAJyx8eZKkmcwa4FX1TeBtwFYGwX0XsAW4s6ru7bptA1ZNt32SdUk2J9m8ffv2halaktRrCWV/YDVwJPAI4GHA703TtabbvqrWV9VEVU2MjY3Np1ZJ0iR9llCOA75eVdur6h7go8BvAvt1SyoAhwLfGlKNkqRp9AnwrcAxSfZOEuBY4FrgUuDErs8a4MLhlChJmk6fNfBNDE5WfhG4uttmPXAa8NokNwAHAucMsU5J0hQrZu8CVfUm4E1Tmm8Cjl7wiiRJvXgnpiQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktQoA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1KheAZ5kvyQXJPm/JNcleUqSA5JclOT67vv+wy5WkvSAvjPwdwH/UVW/BjweuA44Hbikqo4CLumeS5JGZNYAT7Iv8HTgHICq+llV3QmsBjZ03TYAJwyrSEnSjvrMwB8JbAfen+TKJO9N8jDg4Kq6FaD7ftB0GydZl2Rzks3bt29fsMIlaXfXJ8BXAE8C3lNVTwR+yC4sl1TV+qqaqKqJsbGxOZYpSZqqT4BvA7ZV1abu+QUMAv22JIcAdN9vH06JkqTpzBrgVfVt4JYkj+6ajgWuBTYCa7q2NcCFQ6lQkjStFT37vRI4N8mewE3ASxiE//lJ1gJbgRcMp0RJ0nR6BXhVXQVMTPPSsQtbjiSpL+/ElKRGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktQoA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktQoA1ySGmWAS1Kjegd4kj2SXJnkE93zI5NsSnJ9kvOS7Dm8MiVJU63Yhb6vBq4D9u2enwmcVVUfTnI2sBZ4zwLXt+DGT//ktO03n/HcEVciSfPTawae5FDgucB7u+cBngVc0HXZAJwwjAIlSdPru4TyTuD1wH3d8wOBO6vq3u75NmDVdBsmWZdkc5LN27dvn1exkqQHzBrgSX4fuL2qtkxunqZrTbd9Va2vqomqmhgbG5tjmZKkqfqsgT8VeH6S44G9GKyBvxPYL8mKbhZ+KPCt4ZUpSZpq1hl4Vf1FVR1aVePAScBnq+rFwKXAiV23NcCFQ6tSkrSD+VwHfhrw2iQ3MFgTP2dhSpIk9bErlxFSVZcBl3WPbwKOXviSJEl9eCemJDXKAJekRhngktSoXVoD1y/ztnxJi8kZuCQ1atnOwGeaHUvScuEMXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDVq2V5GuBx4o5CknXEGLkmNMsAlqVEGuCQ1yjXwWXhLvqSlyhm4JDXKAJekRhngktQo18C1A68/l9rgDFySGmWAS1KjDHBJapQBLkmN8iTmCA375OCu3nTkSUmpbc7AJalRBrgkNcoAl6RGuQbe8UOr5meh1ve9iUjqzxm4JDXKAJekRhngktQoA1ySGuVJzAYt1glXT/RKS8usM/AkhyW5NMl1Sa5J8uqu/YAkFyW5vvu+//DLlSTdr88M/F7gdVX1xSQPB7YkuQg4Bbikqs5IcjpwOnDa8Eqd3nKYFS6HMUgavVln4FV1a1V9sXt8N3AdsApYDWzoum0AThhWkZKkHe3SGniSceCJwCbg4Kq6FQYhn+SgGbZZB6wDOPzww+dTazNamVGPok5vzJGGp/dVKEn2AT4C/GlVfb/vdlW1vqomqmpibGxsLjVKkqbRawae5MEMwvvcqvpo13xbkkO62fchwO3DKlLLTyt/pUhLWZ+rUAKcA1xXVe+Y9NJGYE33eA1w4cKXJ0maSZ8Z+FOBPwSuTnJV1/YG4Azg/CRrga3AC4ZToiRpOrMGeFX9N5AZXj52YcuRJPXlrfSS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktQoA1ySGuW/iamm+Xnj2p05A5ekRjkDVxP8/HBpR87AJalRzsC1LLk2rt2BM3BJapQBLkmNMsAlqVEGuCQ1ypOYEp70VJucgUtSo5yBa7fiDUFaTpyBS1KjnIFLO+HauJYyZ+CS1Chn4NIcODPXUuAMXJIaZYBLUqMMcElqlAEuSY3yJKa0yDwhqrlyBi5JjTLAJalRBrgkNco1cGkB7ezDsnZ1TXtX18ZdS9/9OAOXpEbNK8CTPCfJV5PckOT0hSpKkjS7VNXcNkz2AL4G/A6wDfgC8KKqunambSYmJmrz5s1zOp6f4yyNhksuS0+SLVU1MbV9PjPwo4EbquqmqvoZ8GFg9Tz2J0naBfM5ibkKuGXS823Ak6d2SrIOWNc9/UGSr87xeCuBO+a4basc8+5hSY05Z47kMEtqzCMw3/EeMV3jfAI807TtsB5TVeuB9fM4zuBgyebp/oRYzhzz7sExL3/DGu98llC2AYdNen4o8K35lSNJ6ms+Af4F4KgkRybZEzgJ2LgwZUmSZjPnJZSqujfJK4D/BPYA3ldV1yxYZTua9zJMgxzz7sExL39DGe+cLyOUJC0u78SUpEYZ4JLUqCUX4LPdnp/kIUnO617flGR89FUurB5jfm2Sa5N8OcklSaa9JrQlfT+GIcmJSSpJ05ec9Rlvkhd27/M1Sf511DUutB6/14cnuTTJld3v9vGLUedCSvK+JLcn+coMryfJ33U/ky8nedK8DlhVS+aLwcnQG4FHAnsCXwIeO6XPy4Gzu8cnAectdt0jGPNvA3t3j1+2O4y56/dw4HPAFcDEYtc95Pf4KOBKYP/u+UGLXfcIxrweeFn3+LHAzYtd9wKM++nAk4CvzPD68cCnGdxHcwywaT7HW2oz8D63568GNnSPLwCOTTLdTUWtmHXMVXVpVf2oe3oFg2vuW9b3YxjeArwV+MkoixuCPuM9FXh3VX0PoKpuH3GNC63PmAvYt3v8KyyD+0iq6nPAd3fSZTXwzzVwBbBfkkPmerylFuDT3Z6/aqY+VXUvcBdw4EiqG44+Y55sLYP/g7ds1jEneSJwWFV9YpSFDUmf9/hRwKOSXJ7kiiTPGVl1w9FnzG8GTk6yDfgU8MrRlLaodvW/951aav+gQ5/b83vdwt+Q3uNJcjIwATxjqBUN307HnORBwFnAKaMqaMj6vMcrGCyjPJPBX1j/leRxVXXnkGsblj5jfhHwgap6e5KnAB/sxnzf8MtbNAuaX0ttBt7n9vxf9EmygsGfXjv7k2Wp6/WRBEmOA94IPL+qfjqi2oZltjE/HHgccFmSmxmsFW5s+ERm39/rC6vqnqr6OvBVBoHeqj5jXgucD1BVnwf2YvChT8vZgn4EyVIL8D63528E1nSPTwQ+W93ZgUbNOuZuOeEfGYR362ujMMuYq+quqlpZVeNVNc5g3f/5VTW3D5NffH1+rz/O4GQ1SVYyWFK5aaRVLqw+Y94KHAuQ5DEMAnz7SKscvY3AH3VXoxwD3FVVt855b4t91naGs7RfY3AG+41d218x+A8YBm/yvwE3AP8LPHKxax7BmC8GbgOu6r42LnbNwx7zlL6X0fBVKD3f4wDvAK4FrgZOWuyaRzDmxwKXM7hC5Srgdxe75gUY84eAW4F7GMy21wIvBV466X1+d/czuXq+v9feSi9JjVpqSyiSpJ4McElqlAEuSY0ywCWpUQa4JDXKAJekRhngktSo/wfZt4/hpJ7VYAAAAABJRU5ErkJggg==\n",
178 "text/plain": [
179 "<Figure size 432x288 with 1 Axes>"
180 ]
181 },
182 "metadata": {
183 "needs_background": "light"
184 },
185 "output_type": "display_data"
186 },
187 {
188 "data": {
189 "image/png": "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\n",
190 "text/plain": [
191 "<Figure size 432x288 with 1 Axes>"
192 ]
193 },
194 "metadata": {
195 "needs_background": "light"
196 },
197 "output_type": "display_data"
198 },
199 {
200 "data": {
201 "image/png": "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\n",
202 "text/plain": [
203 "<Figure size 432x288 with 1 Axes>"
204 ]
205 },
206 "metadata": {
207 "needs_background": "light"
208 },
209 "output_type": "display_data"
210 },
211 {
212 "data": {
213 "image/png": "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\n",
214 "text/plain": [
215 "<Figure size 432x288 with 1 Axes>"
216 ]
217 },
218 "metadata": {
219 "needs_background": "light"
220 },
221 "output_type": "display_data"
222 }
223 ],
224 "source": [
225 "drawTypeDistributions('../input/human/', 1500)"
226 ]
227 },
228 {
229 "cell_type": "code",
230 "execution_count": 5,
231 "metadata": {
232 "scrolled": true
233 },
234 "outputs": [
235 {
236 "name": "stdout",
237 "output_type": "stream",
238 "text": [
239 "[]\n"
240 ]
241 }
242 ],
243 "source": [
244 "drawTypeDistributions('../input/viatra_75/', 50)"
245 ]
246 },
247 {
248 "cell_type": "markdown",
249 "metadata": {},
250 "source": [
251 "## Extract Human Models with size [90, 101]"
252 ]
253 },
254 {
255 "cell_type": "code",
256 "execution_count": 6,
257 "metadata": {},
258 "outputs": [],
259 "source": [
260 "def extractModel():\n",
261 " from shutil import copy\n",
262 " list_of_files = reader.readmultiplefiles('../input/humanOutput/', 5000)\n",
263 " num_nodes_list =[]\n",
264 " human_size_dic = {}\n",
265 " for file in list_of_files:\n",
266 " contents = reader.readcsvfile(file)\n",
267 " num_of_node = contents[constants.NUMBER_NODES]\n",
268 " # human_size_dic[file] = int(num_of_node[0])\n",
269 " # num_nodes_list.append(int(num_of_node[0]))\n",
270 " if 90 <= num_of_node[0] <= 110:\n",
271 " copy(file, '../input/human_output_100/')"
272 ]
273 },
274 {
275 "cell_type": "markdown",
276 "metadata": {},
277 "source": [
278 "## Multinomial Distribution Analysis"
279 ]
280 },
281 {
282 "cell_type": "code",
283 "execution_count": 7,
284 "metadata": {},
285 "outputs": [
286 {
287 "name": "stdout",
288 "output_type": "stream",
289 "text": [
290 "0.9999999999999998\n",
291 "{'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n"
292 ]
293 }
294 ],
295 "source": [
296 "import numpy as np\n",
297 "import scipy.stats as stats\n",
298 "graphStats = getModels('../input/human_30_500_no_xml/', 1500)\n",
299 "totalNodes = 0\n",
300 "typeMap = {}\n",
301 "for g in graphStats:\n",
302 " gKeys = g.nodeTypeStat.keys()\n",
303 " size = g.numNodes[0]\n",
304 " totalNodes += size\n",
305 " for key in gKeys:\n",
306 " curNum = typeMap.get(key, 0)\n",
307 " typeMap[key] = curNum + float(g.nodeTypeStat[key]) * size\n",
308 " \n",
309 "for key in typeMap.keys():\n",
310 " typeMap[key] /= totalNodes\n",
311 "print(sum(typeMap.values()))\n",
312 "print(typeMap)"
313 ]
314 },
315 {
316 "cell_type": "code",
317 "execution_count": 8,
318 "metadata": {},
319 "outputs": [],
320 "source": [
321 "def chiSquareMultinomialTest(freq, prob):\n",
322 " freq = np.array(freq)\n",
323 " prob = np.array(prob)\n",
324 " size = sum(freq)\n",
325 " e = prob * size\n",
326 " return stats.chisquare(freq, e)"
327 ]
328 },
329 {
330 "cell_type": "code",
331 "execution_count": 9,
332 "metadata": {},
333 "outputs": [],
334 "source": [
335 "def typeDistributionTest(g):\n",
336 " size = g.numNodes[0]\n",
337 " freq = []\n",
338 " prob = []\n",
339 " for key in typeMap.keys():\n",
340 " value = float(g.nodeTypeStat.get(key, 0))\n",
341 " freq.append(np.round(value * size))\n",
342 " prob.append(typeMap[key])\n",
343 " test = chiSquareMultinomialTest(freq, prob)\n",
344 " return test"
345 ]
346 },
347 {
348 "cell_type": "code",
349 "execution_count": 32,
350 "metadata": {},
351 "outputs": [
352 {
353 "name": "stdout",
354 "output_type": "stream",
355 "text": [
356 "[7.26359261e+01 6.82490355e-02]\n",
357 "[3.31848655e+01 1.59841378e-03]\n"
358 ]
359 }
360 ],
361 "source": [
362 "test = [typeDistributionTest(graphStats[i]) for i in range(len(graphStats))]\n",
363 "print(np.mean(test, 0))\n",
364 "print(np.median(test, 0))"
365 ]
366 },
367 {
368 "cell_type": "markdown",
369 "metadata": {},
370 "source": [
371 "## Node Counts Distribution"
372 ]
373 },
374 {
375 "cell_type": "code",
376 "execution_count": 5,
377 "metadata": {},
378 "outputs": [],
379 "source": [
380 "import matplotlib.pyplot as plt\n",
381 "from shutil import copyfile\n",
382 "import statistics \n",
383 "\n",
384 "graphStats = getModels('../input/human/', 1500)\n",
385 "sizes = []\n",
386 "filenames = reader.readmultiplefiles('../input/human/', 1500, False)\n",
387 "count = 1\n",
388 "for filename in filenames:\n",
389 " graphStat = GraphStat(filename)\n",
390 " size = graphStat.numNodes[0]\n",
391 " if size >= 30 and size <= 500 and not ('EAnnotation' in graphStat.nodeTypeStat.keys() and 'EStringToStringMapEntry' in graphStat.nodeTypeStat.keys()):\n",
392 " copyfile(filename, filename.replace('human', 'human_30_500_no_xml'))\n",
393 " \n",
394 " \n",
395 "# for g in graphStats:\n",
396 "# size = g.numNodes[0]\n",
397 "# if size >= 30 and size <= 500 and not ('EAnnotation' in g.nodeTypeStat.keys() and 'EStringToStringMapEntry' in g.nodeTypeStat.keys()):\n",
398 "# sizes.append(g.numNodes[0])\n",
399 "# print(max(sizes))\n",
400 "# print(min(sizes))\n",
401 "# print(statistics.mean(sizes))\n",
402 "# print(len(sizes))\n",
403 "# plt.hist(sizes, bins=10)\n"
404 ]
405 },
406 {
407 "cell_type": "code",
408 "execution_count": null,
409 "metadata": {},
410 "outputs": [],
411 "source": []
412 }
413 ],
414 "metadata": {
415 "kernelspec": {
416 "display_name": "Python 3",
417 "language": "python",
418 "name": "python3"
419 },
420 "language_info": {
421 "codemirror_mode": {
422 "name": "ipython",
423 "version": 3
424 },
425 "file_extension": ".py",
426 "mimetype": "text/x-python",
427 "name": "python",
428 "nbconvert_exporter": "python",
429 "pygments_lexer": "ipython3",
430 "version": "3.7.3"
431 }
432 },
433 "nbformat": 4,
434 "nbformat_minor": 2
435}
diff --git a/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py
new file mode 100644
index 00000000..e5e12f42
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/type_analysis/src/plot_violation.py
@@ -0,0 +1,77 @@
1import matplotlib.pyplot as plt
2import numpy as np
3import cdf_histogram as cdf
4import readCSV as reader
5import constants
6import csv
7from shutil import copy
8
9
10# viatra_controlled = np.genfromtxt('../statistics/violations/viatra_controlled.csv', delimiter='\n')
11# viatra_controlled_mean = np.mean(viatra_controlled)
12# viatra_nocons = np.genfromtxt('../statistics/violations/viatra_no_cons_violation.csv', delimiter='\n')
13# viatra_nocons_mean = np.mean(viatra_nocons)
14# human = np.genfromtxt('../statistics/violations/human_violation.csv', delimiter='\n')
15# human_mean = np.mean(human)
16# print('viatra controlled violation mean: ' + str(viatra_controlled_mean))
17# print('viatra no cons violation mean: ' + str(viatra_nocons_mean))
18# print('human output violation mean: ' + str(human_mean))
19
20
21def read_violation_file(file_name):
22 violation = {}
23 with open(file_name) as f:
24 for i, line in enumerate(f):
25 line = int(line.rstrip())
26 if line in violation:
27 violation[line] += 1
28 else:
29 violation[line] = 1
30 f.close()
31 return violation
32
33# violation = read_violation_file('../statistics/violations/viatra_controlled.csv')
34# print(violation)
35# fig, ax = plt.subplots()
36# rects = ax.bar(violation.keys(), violation.values())
37# cdf.autolabel(rects, ax)
38# ax.set_title('viatra controlled violation distribution')
39# ax.set_xlabel('number of violations')
40# ax.set_ylabel('number of occurrence')
41# plt.show()
42# fig.savefig('../statistics/violations/viatra_controlled_violation_distribution.png')
43
44
45def plot_violation():
46 v = np.array([0,1,1,0,0])
47 print(v)
48 (n, bins) = np.histogram(v, bins=v.size, density=True) # NumPy version (no plot)
49 # plt.plot(.5 * (bins[1:] + bins[:-1]), n)
50 plt.hist(v, bins=50, density=1)
51 plt.show()
52
53
54def human_output_size():
55 list_of_files = reader.readmultiplefiles('../statistics/humanOutput/', 5000)
56 num_nodes_list =[]
57 human_size_dic = {}
58 for file in list_of_files:
59 contents = reader.readcsvfile(file)
60 num_of_node = contents[constants.NUMBER_NODES]
61 # human_size_dic[file] = int(num_of_node[0])
62 # num_nodes_list.append(int(num_of_node[0]))
63 if 90 <= num_of_node[0] <= 110:
64 copy(file, '../statistics/human_output_100/')
65
66 # mean = np.mean(num_nodes_list)
67 # std = np.std(num_nodes_list)
68 # with open('../statistics/human_output_size.csv', 'w', newline='') as csvfile:
69 # spamwriter = csv.writer(csvfile, delimiter=',',
70 # quotechar='|', quoting=csv.QUOTE_MINIMAL)
71 # spamwriter.writerow(['mean', mean])
72 # spamwriter.writerow(['standard deviation', std])
73 # for key, value in human_size_dic.items():
74 # spamwriter.writerow([key, value])
75
76
77
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
new file mode 100644
index 00000000..cf532bc5
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
@@ -0,0 +1,53 @@
1from scipy import stats
2from scipy.spatial import distance
3
4def ks_distance(samples1, samples2):
5 value, p = stats.ks_2samp(samples1, samples2)
6 return (value, p)
7
8def manual_ks(pdf1, pdf2):
9 result = 0
10 sum1 = 0
11 sum2 = 0
12 for(a, b) in zip(pdf1, pdf2):
13 sum1 += a
14 sum2 += b
15 result = max(result, abs(sum1-sum2))
16 return result
17
18def js_distance(samples1, samples2):
19 map1 = fromSamples(samples1)
20 map2 = fromSamples(samples2)
21 allKeys = set(map1.keys()) | set(map2.keys())
22 dist1 = distributionFromMap(map1, allKeys)
23 dist2 = distributionFromMap(map2, allKeys)
24 return distance.jensenshannon(dist1, dist2, 2)
25
26def euclidean_distance(samples1, samples2):
27 map1 = fromSamples(samples1)
28 map2 = fromSamples(samples2)
29 allKeys = set(map1.keys()) | set(map2.keys())
30 dist1 = distributionFromMap(map1, allKeys)
31 dist2 = distributionFromMap(map2, allKeys)
32 distance = 0
33 for i in range(len(dist2)):
34 distance += pow(dist1[i] - dist2[i], 2)
35 return pow(distance, 0.5)
36
37def fromSamples(samples):
38 m = {}
39 length = len(samples)
40 for sample in samples:
41 value = m.get(sample, 0)
42 m[sample] = value + 1
43 for key in list(m.keys()):
44 m[key] /= length
45 return m
46
47def distributionFromMap(m, allKeys):
48 dist = []
49 for key in allKeys:
50 value = m.get(key, 0)
51 dist.append(value)
52 return dist
53
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
new file mode 100644
index 00000000..48d96ccc
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
@@ -0,0 +1,46 @@
1import readCSV as reader
2import constants
3import numpy as np
4
5# graph stats for a collection of graphs
6class GraphCollection:
7
8 # init with path contrain files and number of files to read reader is imported from (readCSV)
9 def __init__(self, path, number, name, shouldShuffle = True):
10 self.out_ds = []
11 self.nas = []
12 self.mpcs = []
13 self.nts = []
14 self.name = name
15 self.tccs = []
16 self.violations = []
17 models = reader.readmultiplefiles(path, number, shouldShuffle)
18 print(len(models))
19 self.size = len(models)
20 for i in range(len(models)):
21 contents, out_d, na, mpc = reader.getmetrics(models[i])
22 self.out_ds.append(out_d)
23 self.nas.append(na)
24 self.mpcs.append(mpc)
25 if(constants.Node_TYPE_KEY in contents):
26 self.nts.append(contents[constants.Node_TYPE_KEY])
27 if(constants.TCC_VALUE in contents):
28 self.tccs.append(contents[constants.TCC_VALUE])
29 if(constants.VIOLATION in contents):
30 self.violations.append(contents[constants.VIOLATION][0])
31
32#Graph stat for one graph
33class GraphStat:
34 # init with teh file name of the stat
35 def __init__(self, filename):
36 contents, self.out_d, self.na, self.mpc = reader.getmetrics(filename)
37 self.numNodes = np.array(contents[constants.NUMBER_NODES])
38 if constants.STATE_ID in contents:
39 self.id = (contents[constants.STATE_ID])[0]
40 if constants.Node_TYPE_KEY in contents:
41 self.nodeTypeStat = contents[constants.Node_TYPE_KEY]
42 if constants.VIOLATION in contents:
43 self.violations = int(contents[constants.VIOLATION][0])
44 if(constants.TCC_VALUE_KEY in contents):
45 self.tcc = contents[constants.TCC_VALUE_KEY]
46
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py
new file mode 100644
index 00000000..e30cc583
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/constants.py
@@ -0,0 +1,35 @@
1NUMBER_EDGE_TYPES = 'Number of Edge types'
2
3NUMBER_NODES = 'Number Of Nodes'
4
5OUT_DEGREE_COUNT = 'OutDegreeCount'
6
7OUT_DEGREE_VALUE = 'OutDegreeValue'
8
9NA_COUNT = 'NACount'
10
11NA_VALUE = 'NAValue'
12
13MPC_VALUE = 'MPCValue'
14
15MPC_COUNT = 'MPCCount'
16
17METAMODEL = 'Meta Mode'
18
19STATE_ID = 'State Id'
20
21NODE_TYPE = 'Node Type'
22
23Node_TYPE_KEY = 'NodeType'
24
25HUMAN_OUT_D_REP = '../input/humanOutput/R_2015225_run_1.csv'
26
27HUMAN_MPC_REP = '../input/humanOutput/R_2016324_run_1.csv'
28
29HUMAN_NA_REP = '../input/humanOutput/R_2017419_run_1.csv'
30
31VIOLATION = 'violations'
32
33TCC_VALUE= 'TCCValue'
34
35TCC_COUNT = 'TCCCount'
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
new file mode 100644
index 00000000..a56caf45
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
@@ -0,0 +1,186 @@
1import numpy as np
2import matplotlib.pyplot as plt
3from scipy import stats
4import glob
5import random
6import constants
7
8#
9# read csvfile returns outdegree, node activity, mpc
10# as matrix with the first row of values and second row of count
11#
12def readcsvfile(filename):
13
14 contents = {}
15 with open(filename) as f:
16 data = list(f)
17 f.close()
18 for i, line in enumerate(data):
19 arr = line.replace('\n', '').split(',')
20 # if there is no element in the line, continue
21 if len(line) < 0: continue
22 # else check for contents
23 # if it is MPC then use float
24 if arr[0] == constants.MPC_VALUE:
25 contents[constants.MPC_VALUE] = list(map(float, arr[1:]))
26 # meta models are string
27 elif(arr[0] == constants.METAMODEL):
28 contents[constants.METAMODEL] = arr[1:]
29 # Node types
30 elif(arr[0] == constants.NODE_TYPE):
31 types = data[i+1].replace('\n', '').split(',')
32 numbers = data[i+2].replace('\n', '').split(',')
33 #convert number to floats
34 numbers = [float(n) for n in numbers]
35 contents[constants.Node_TYPE_KEY] = {t : n for t, n in zip(types, numbers)}
36 elif(arr[0] == constants.TCC_VALUE):
37 contents[constants.TCC_VALUE] = list(map(float, arr[1:]))
38 # NA and OD are integers, and store other information as string
39 else:
40 try:
41 contents[arr[0]] = list(map(int, arr[1:]))
42 except:
43 contents[arr[0]] = arr[1:]
44 return contents
45
46def checkAndReshape(arr):
47 if len(arr.shape) < 2:
48 arr = np.reshape(arr, (arr.shape[0],1))
49 return arr
50
51def readTrajectory(filename):
52 state_codes = []
53 with open(filename) as f:
54 for i, line in enumerate(f):
55 if(line == ''): continue
56 state_codes.append(int(line))
57 return state_codes
58#
59# take a matrix as input
60# return the sample array
61#
62def getsample(dataMatrix):
63 data = []
64 value = dataMatrix[0, :]
65 count = dataMatrix[1, :]
66 for i, v in enumerate(value):
67 for x in range(0, int(count[i])):
68 data.append(v)
69 return data
70
71def reproduceSample(values, counts):
72 arr = np.array([values, counts])
73 return getsample(arr)
74
75#
76# take an array of filenames as input
77# return the samples of outdegree, na, mpc
78#
79def getmetrics(filename):
80 contents = readcsvfile(filename)
81 outdegree_sample = reproduceSample(contents[constants.OUT_DEGREE_VALUE], contents[constants.OUT_DEGREE_COUNT])
82 na_sample = reproduceSample(contents[constants.NA_VALUE], contents[constants.NA_COUNT])
83 mpc_sample = reproduceSample(contents[constants.MPC_VALUE], contents[constants.MPC_COUNT])
84
85 if(constants.TCC_VALUE in contents):
86 contents[constants.TCC_VALUE] = reproduceSample(contents[constants.TCC_VALUE], contents[constants.TCC_COUNT])
87
88 return contents,outdegree_sample, na_sample, mpc_sample
89
90#
91# read number of files in the given path RANDOMLY
92#
93def readmultiplefiles(dirName, maxNumberOfFiles, shouldShuffle = True):
94 list_of_files = glob.glob(dirName + '*.csv') # create the list of file
95 if shouldShuffle:
96 random.shuffle(list_of_files)
97 #if the number of files is out of bound then just give the whole list
98 file_names = list_of_files[:maxNumberOfFiles]
99 # print(file_names)
100 return file_names
101
102
103def plotlines(x, y, ax):
104 l1, = ax.plot(x, y)
105
106
107def testgetsamplesfromfiles():
108 files = readmultiplefiles('../statistics/viatraOutput/', 2)
109 for file in files:
110 getmetrics(file)
111
112def probability(data):
113 sum = np.sum(data)
114 probabilityList = []
115 for d in data:
116 p = d/sum
117 probabilityList.append(p)
118 a = np.array(probabilityList)
119 return a
120
121
122def cumulativeProbability(p):
123 cdf = np.cumsum(p)
124 return cdf
125
126
127def plot():
128 fig, ax = plt.subplots()
129 fig, ax1 = plt.subplots()
130 fig, ax2 = plt.subplots()
131 fig, ax3 = plt.subplots()
132 fig, ax4 = plt.subplots()
133 fig, ax5 = plt.subplots()
134 list_of_files = readmultiplefiles('../statistics/iatraOutput/')
135 for file_name in list_of_files:
136 contents = readcsvfile(file_name)
137 outdegree = [contents[constants.OUT_DEGREE_VALUE], contents[constants.OUT_DEGREE_COUNT]]
138 na = [contents[constants.NA_VALUE], contents[constants.NA_COUNT]]
139 mpc = [contents[constants.MPC_VALUE], contents[constants.MPC_COUNT]]
140 outV = outdegree[0, :]
141 outC = outdegree[1, :]
142 outP = probability(outC)
143 outCumP = cumulativeProbability(outP)
144 plotlines(outV, outP, ax)
145 naV = na[0, :]
146 naC = na[1, :]
147 naP = probability(naC)
148 naCumP = cumulativeProbability(naP)
149 plotlines(naV, naP, ax1)
150 mpcV = mpc[0, :]
151 mpcC = mpc[1, :]
152 mpcP = probability(mpcC)
153 mpcCumP = cumulativeProbability(mpcP)
154 plotlines(mpcV, mpcP, ax2)
155 plotlines(outV, outCumP, ax3)
156 plotlines(naV, naCumP, ax4)
157 plotlines(mpcV, mpcCumP, ax5)
158 ax.set_xlabel('ourdegree')
159 ax.set_ylabel('pdf')
160 ax.grid()
161
162 ax1.set_xlabel('node activity')
163 ax1.set_ylabel('pdf')
164 ax1.grid()
165
166 ax2.set_xlabel('multiplex participation coefficient')
167 ax2.set_ylabel('pdf')
168 ax2.grid()
169
170 ax3.set_xlabel('ourdegree')
171 ax3.set_ylabel('cdf')
172 ax3.grid()
173
174 ax4.set_xlabel('node activity')
175 ax4.set_ylabel('cdf')
176 ax4.grid()
177
178 ax5.set_xlabel('multiplex participation coefficient')
179 ax5.set_ylabel('cdf')
180 ax5.grid()
181
182 plt.show()
183
184
185# plot()
186