Hallo Lennard,
Hierbij de codes v02 en v03 van het simpele model, waarbij het grid en de p-waarden vastliggen in de code. Bij de code v04 kunnen de afmetingen van het grid en de bezettingskans. worden opgegeven. Dit geeft gekleurde plots. Met v05 kan de afmeting van het grid worden opgegeven en het aantal iteraties bij een bepaalde waarde van p. Het gedeelte tussen 0 en 1 is hierbij opgesplistst in 50 p-waarden. Dat geeft een plot waarin te zien is bij welke drempelwaarde van p er percoltaie plaatsvindt.
Wat we zouden willen is dat er op een of ander manier iets van tijd in het proces in te bouwen is. Dan gaat het vooral om code v04. Als het zou gaan om de doorstroming van een hal in Schiphol heb je steeds een veranderend aantal instroom en uitstroom. De route kan geblokkeerd worden door personen die stoppen of in groepjes ergens staan. Ook zou je bepaalde cellen in het grid voortdurend willen blokkeren (p=0) omdat daar iets staat waar men omheen moet. En de bezettingskans kan ook samen hangen met de instroom. Dus bij hoge instroom zou de p laag zijn, omdat er weinig doorstroom is.
Mocht je suggesties hebben hoe dit in te bouwen is in onze code dan zou dat mooi zijn.
Vriendelijke groet,
Pascal en Matthias
PS het gebruk van de document-button geeft de melding : Fout Onvoldoende rechten om deze actie uit te voeren.
Dus hieronder de codes als tekst toegevoegd (dit ging de vorige keer niet helemaal goed).
Percolatie_v02
import random
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import label
def generate_percolation_matrix(n, p):
return np.random.rand(n, n) < p
def percolates(matrix):
labeled_matrix, num_labels = label(matrix)
top_labels = labeled_matrix[0, :]
bottom_labels = labeled_matrix[-1, :]
common_labels = np.intersect1d(top_labels, bottom_labels)
return len(common_labels) > 0
def visualize_percolation(matrix):
plt.imshow(matrix, cmap='binary')
plt.title("Percolation Matrix")
plt.colorbar()
plt.show()
Define matrix size and percolation probability
matrix_size = 10
percolation_probability = 0.7
Generate the percolation matrix
percolation_matrix = generate_percolation_matrix(matrix_size, percolation_probability)
Visualize the percolation matrix
visualize_percolation(percolation_matrix)
Check if percolation occurs
if percolates(percolation_matrix):
print("Percolation occurs!")
else:
print("No percolation.")
Percolatie_v03
import random
import numpy as np
import matplotlib.pyplot as plt
import sys
def generate_percolation_matrix(n, p):
return np.random.rand(n, n) < p
def percolates(matrix):
def dfs(x, y):
if x < 0 or x >= matrix.shape[0] or y < 0 or y >= matrix.shape[1]:
return False
if matrix[x, y] == 0:
return False
if visited[x, y]:
return False
visited[x, y] = True
if x == matrix.shape[0] - 1:
return True
# Recursively check neighboring cells
result = (dfs(x + 1, y) or
dfs(x - 1, y) or
dfs(x, y + 1) or
dfs(x, y - 1))
return result
visited = np.zeros_like(matrix, dtype=bool)
for y in range(matrix.shape[1]):
if matrix[0, y] == 1:
if dfs(0, y):
return True
return False
def visualize_percolation(matrix):
plt.imshow(matrix, cmap='binary')
plt.title("Percolation Matrix")
plt.colorbar()
plt.show()
Define matrix size and percolation probability
matrix_size = 10
percolation_probability = 0.4
Generate the percolation matrix
percolation_matrix = generate_percolation_matrix(matrix_size, percolation_probability)
Visualize the percolation matrix
visualize_percolation(percolation_matrix)
Check if percolation occurs
if percolates(percolation_matrix):
sys.stdout.write("Percolation occurs!\n")
else:
sys.stdout.write("No percolation.\n")
Percolatie_v04
import numpy as np
import imagesc as im
import matplotlib as plt
from scipy.ndimage import label
def union(a, b):
labels[find(b)] = find(a)
def find(a):
while labels[a] != a:
a = labels[a]
print (a)
return a
grid_size = input('Wat zijn de afmetingen van het grid? (gescheiden met komma) ')
grid_size = tuple(int(item) for item in grid_size.split(','))
p = float(input('Wat is de bezettingskans? '))
print(type(grid_size))
print(grid_size)
grid = np.empty(shape = grid_size, dtype= int)
for i in range(np.size(grid, 0)): # Gehele grid invullen met bezetting
for j in range(np.size(grid, 1)):
grid[i, j] = np.random.binomial(1, p)
# binominale verdeling uitvoeren met p als kans op succes
# print(labels)
label_grid, aantal_groepen = label(grid)
print(label_grid)
print(aantal_groepen)
im.plot(label_grid, origin='lower',cmap = 'rainbow')
cluster_nummers = np.arange(1,label_grid.max()+1)
print(cluster_nummers)
np.random.shuffle(cluster_nummers)
cluster_nummers = np.append(0,cluster_nummers)
print(cluster_nummers)
label_grid_shuffled = cluster_nummers[label_grid]
im.plot(label_grid_shuffled, origin='lower',cmap = 'rainbow')
a =np.intersect1d(label_grid[0,:],label_grid[len(label_grid)-1,:])
percolatie_clusters= a[a != 0]
if percolatie_clusters.any():
print("Er is sprake van percolatie")
print(percolatie_clusters)
else:
print("Er is geen sprake van percolatie")
percolatie_v05
import numpy as np
import imagesc as im
import matplotlib.pyplot as plt
from scipy.ndimage import label
grid_size = input('Wat zijn de afmetingen van het grid? (gescheiden met komma) ')
grid_size = tuple(int(item) for item in grid_size.split(','))
aantal_runs = input('Hoevaak itereren? ')
p = float(input('Wat is de bezettingskans? '))
p= np.linspace(0,1,num=50)
aantal_percolaties = np.zeros(len(p))
for l in range(len(p)):
for k in range (int(aantal_runs)):
grid = np.empty(shape = grid_size, dtype= int)
for i in range(np.size(grid, 0)): # Gehele grid invullen met bezetting
for j in range(np.size(grid, 1)):
grid[i, j] = np.random.binomial(1, p[l])
label_grid, aantal_groepen = label(grid)
# print(label_grid)
a =np.intersect1d(label_grid[0,:],label_grid[len(label_grid)-1,:])
# print(a)
percolatie_clusters= a[a != 0]
if percolatie_clusters.any():
aantal_percolaties[l] = aantal_percolaties[l] +1
print(aantal_percolaties)
plt.plot(p, aantal_percolaties)
naming the x axis
plt.xlabel('x - axis')
naming the y axis
plt.ylabel('y - axis')
giving a title to my graph
plt.title('Aantal percolatie vs p voor '+ aantal_runs +' runs')
function to show the plot
plt.show()