-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPercolating_data_generation_script.py
88 lines (82 loc) · 3.04 KB
/
Percolating_data_generation_script.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 15 13:48:49 2022
IMPORTANT: download the DAG_data_files folder into the same directory as DAG_Library to save time on running the simulations
@author: kevin
"""
#%%
import DAG_Library.module_random_geometric_graphs as mod_rgg
import DAG_Library.module_path_algorithms as mod_paths
import pickle
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize as op
import math
import DAG_Library.module_percolation_generators as pg
# params = {
# 'axes.labelsize':28,
# 'axes.titlesize':28,
# 'font.size':28,
# 'figure.figsize': [22,22],
# 'mathtext.fontset': 'stix',
# }
# plt.rcParams.update(params)
# %%
RHO = [500, 1000, 2000]
V = 1
D = 2
P = [2, 1, 0.5]
M = 200
colors = iter(['firebrick', 'tomato', 'sienna', 'olivedrab', 'forestgreen', 'mediumaquamarine', 'navy', 'mediumblue', 'cornflowerblue'])
#Percolate Radius
for p in P:
R_intervals = pg.create_R_intervals(RHO, V, D, p)
for rho in RHO:
R, Mpi, var_Mpi = pg.num_percolating(rho, V, D, p, R_intervals[rho], M)
std_pi = np.sqrt(var_Mpi)/M
pi = Mpi/M
p0 = [R[0]*1.5, 50]
R_prime, pi_prime, params, _ = pg.criticality_function_fit(R, pi, p0 = p0, sigma = None)
R_infl = params[0]
R_scale = pg.R_analytic(p, D, rho)
R_res = (R - R_infl) / (R_scale)
# pi = [pi[i] for i in range(len(R)) if R[i] > R_infl]
# std_pi = [std_pi[i] for i in range(len(R)) if R[i] > R_infl]
# R_res = np.array([r for r in R_res if r > 0 and r < 0.5])
color = next(colors)
plt.errorbar(R_res, pi, yerr = std_pi, color = color, label = rf'$\rho$ = {rho}, p = {p}')
print(params)
plt.legend()
plt.xlabel(r"rescaled R' = $\frac{R - R_{inflection}}{R_{analytic}(\rho, p)}$")
plt.ylabel(r"$\pi$(R')")
plt.show()
#%%
RHO = [500, 1000, 2000]
V = 1
D = 2
P = [2, 1, 0.5]
M = 200
colors = iter(['firebrick', 'tomato', 'sienna', 'olivedrab', 'forestgreen', 'mediumaquamarine', 'navy', 'mediumblue', 'cornflowerblue'])
#Percolate degrees
for p in P:
R_intervals, degree_intervals = pg.create_R_degree_intervals(RHO, V, D, p)
for rho in RHO:
R, Mpi, var_Mpi = pg.num_percolating(rho, V, D, p, R_intervals[rho], M)
std_pi = np.sqrt(var_Mpi)/M
pi = Mpi/M
#p0 = [R[0]*1.5, 50]
#R_prime, pi_prime, params, _ = pg.criticality_function_fit(R, pi, p0 = p0, sigma = None)
#R_infl = params[0]
#R_scale = pg.R_analytic(p, D, rho)
#R_res = (R - R_infl) / (R_scale)
# pi = [pi[i] for i in range(len(R)) if R[i] > R_infl]
# std_pi = [std_pi[i] for i in range(len(R)) if R[i] > R_infl]
# R_res = np.array([r for r in R_res if r > 0 and r < 0.5])
color = next(colors)
plt.errorbar(degree_intervals[rho], pi,yerr = std_pi, color = color, label = rf'$\rho$ = {rho}, p = {p}')
#print(params)
plt.legend()
plt.grid()
plt.xlabel("Expected degree of connection")
plt.ylabel(r"$\pi$(R')")
# %%