Traitement de l'erreur IndexError et de la boucle infinie

Ajout automatique des valeurs dans un fichier exploitable par Excel et autres logiciels similaires
Création automatique de dossiers pour stocker les fichiers des runs et de leurs erreurs
Balisassions des endroits à modifiés dans le programme
Amélioration de l'interface de la commande
This commit is contained in:
Paul-Corbalan 2020-04-04 00:27:51 +02:00
parent 4e7032bd12
commit 3329177787
1 changed files with 59 additions and 29 deletions

View File

@ -1,7 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys import sys
import os.path
import random import random
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
@ -156,7 +157,9 @@ def majPotentielsCroissance(pixelsCroissance, potentielsCroissance, nbPart):
for c in range(len(pixelsCroissance)): for c in range(len(pixelsCroissance)):
potentielsCroissance[c] = potentielsBitmap[pixelsCroissance[c][0]][pixelsCroissance[c][1]] potentielsCroissance[c] = potentielsBitmap[pixelsCroissance[c][0]][pixelsCroissance[c][1]]
def main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart): def main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart):
Error=0
nbPart = 1
try: try:
run = True run = True
init() init()
@ -167,7 +170,6 @@ def main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart):
dessinBitmap[nouv[1]][nouv[0]] = 1 dessinBitmap[nouv[1]][nouv[0]] = 1
condInitBitmap[nouv[0]][nouv[1]] = -1 condInitBitmap[nouv[0]][nouv[1]] = -1
potentielsBitmap[nouv[0]][nouv[1]] = 0 potentielsBitmap[nouv[0]][nouv[1]] = 0
nbPart = 1
while run == True: while run == True:
# elimine les pixelsCroissance qui sont proche de nouv # elimine les pixelsCroissance qui sont proche de nouv
eliminePixelsPres(nouv, pixelsCroissance, potentielsCroissance) eliminePixelsPres(nouv, pixelsCroissance, potentielsCroissance)
@ -186,6 +188,8 @@ def main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart):
#print(cs, " : ", maxdelta) #print(cs, " : ", maxdelta)
cs += 1 cs += 1
# définition des nouveaux sites de croissance potentiels # définition des nouveaux sites de croissance potentiels
# if cs>=200:
# raise ValueError
croissanceRapide(nouv, pixelsBitmap, pixelsCroissance, potentielsCroissance) croissanceRapide(nouv, pixelsBitmap, pixelsCroissance, potentielsCroissance)
# mise à jour des potentiels des candidats à la croissance # mise à jour des potentiels des candidats à la croissance
majPotentielsCroissance(pixelsCroissance, potentielsCroissance, nbPart) majPotentielsCroissance(pixelsCroissance, potentielsCroissance, nbPart)
@ -203,13 +207,16 @@ def main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart):
nbPart += 1 nbPart += 1
if nouv[0] == 0 or nouv[0] == N-1 or nouv[1] == N-2 or nbPart > partMax : if nouv[0] == 0 or nouv[0] == N-1 or nouv[1] == N-2 or nbPart > partMax :
run = False run = False
print("N=", N, "eta=", eta, "nbpart=", nbPart, "MAXDELTA=", MAXDELTA) except ValueError:
return nbPart print("Bug boucle infini")
Error=1
except IndexError: except IndexError:
print("Bug") print("Bug IndexError")
Error = 2
print("N=", N, "eta=", eta, "nbpart=", nbPart, "MAXDELTA=", MAXDELTA) else:
return nbPart print("eta=" + str(eta) + " N=" + str(N) + " MAXDELTA=" + str(MAXDELTA) + " nbPart=" + str(nbPart))
finally :
return (nbPart, Error)
# Partie rajoutée # Partie rajoutée
@ -227,20 +234,20 @@ def Save_txt(y, N, fichier):
print("", file=f) print("", file=f)
f.close() f.close()
def Print_plt(Mat, N, eta, nbPart, fichier, afficher=False): def Print_plt(Mat, N, eta, nbPart, fichier, dossier, afficher=False):
x = [] x = []
y = [] y = []
c="blue" # <--- Couleur des icones c="blue" # <--- Couleur des icones
mk="o" # <--- Motifs des icones ("o", "x", "1") mk="o" # <--- Motifs des icones ("o", "x", "1")
size=30 # <--- Taille des icones size=30 # <--- Taille des icones
title=dossier + " nbPart="+str(nbPart)
for i in range(1, N-1): for i in range(1, N-1):
for j in range(1, N-1): for j in range(1, N-1):
if Mat[i][j]: if Mat[i][j]:
x.append(j) x.append(j)
y.append(N-i) y.append(N-i)
plt.scatter(x, y, color=c, s=size, marker=mk) plt.scatter(x, y, color=c, s=size, marker=mk)
# title="N="+str(N)+" eta="+str(eta)+" nbpart="+str(nbPart)+" MAXDELTA="+str(MAXDELTA) plt.title(title)
plt.title("N="+str(N)+" eta="+str(eta)+" nbpart="+str(nbPart)+" MAXDELTA="+str(MAXDELTA))
# plt.legend(loc='upper left') # plt.legend(loc='upper left')
plt.axis([0,N,0,N]) plt.axis([0,N,0,N])
plt.savefig(fichier+".png") plt.savefig(fichier+".png")
@ -248,18 +255,36 @@ def Print_plt(Mat, N, eta, nbPart, fichier, afficher=False):
plt.show() plt.show()
plt.close() plt.close()
def Save_csv(eta, N, MAXDELTA, nbPart, diracine, dossier, file=""):
doc = diracine + file + dossier
if not (os.path.exists(doc + ".csv")):
f=open(doc + ".csv", "a")
print("eta;N;MAXDELTA;nbPart", file=f)
f.close()
f=open(doc + ".csv", "a")
for i in [str(eta), str(N), str(MAXDELTA), str(nbPart)]:
print(i, file=f, end=";")
print("", file=f)
f.close()
eta = 6 # <--- eta
# [64, 128, 256, 512] # [64, 128, 256, 512]
for N in [128]: for N in [64, 128, 256, 512]: # <--- N
# MAXDELTA = MAXDELTA/1000.0
# [1, 0.1, 0.05, 0.017, 0.01, 0.005, 0.001, 0.0005, 0.0001] # [1, 0.1, 0.05, 0.017, 0.01, 0.005, 0.001, 0.0005, 0.0001]
for MAXDELTA in [0.0001]: for MAXDELTA in [0.001, 0.0005, 0.0001]: # <--- MAXDELTA
Premier = True
for i in range(50): diracine = "..\\Image\\"
dossier = "eta=" + str(eta) + " N=" + str(N) + " MAXDELTA=" + str(MAXDELTA)
if not(os.path.exists(diracine + dossier)):
os.mkdir(diracine + dossier)
if not (os.path.exists(diracine + dossier + "\\" + "Erreur")):
os.mkdir(diracine + dossier + "\\" + " Erreur ")
print("\t--- "+dossier+" ---")
for i in range(50): # <--- itération par run
nbPart = 1 nbPart = 1
dossier = "..\\Image\\"+"eta="+str(eta)+" N="+str(N)+" MAXDELTA="+str(MAXDELTA)+"\\"
if Premier:
Premier = False
print(dossier)
# la grille est de NxN mais en réalite la mesure d'une unité h est 1/N # la grille est de NxN mais en réalite la mesure d'une unité h est 1/N
pixelsBitmap = [[0 for j in range(N)] for i in range(N)] pixelsBitmap = [[0 for j in range(N)] for i in range(N)]
@ -271,13 +296,18 @@ for N in [128]:
pixelsCroissance = [] pixelsCroissance = []
potentielsCroissance = [] potentielsCroissance = []
nbPart=main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart) print(str(i+1), end="\t")
nbPart, Error = main(pixelsBitmap, pixelsCroissance, potentielsCroissance, nbPart)
# fichier = "foudre-"+str(N)+"-"+str(eta)+"-"+str(MAXDELTA)+"-"+str(nbPart)+"-"+datetime.now().strftime("%Y%m%d%H%M%S")
# eta=6 N=128 MAXDELTA=0,0001
fichier = dossier+"foudre-"+str(N)+"-"+str(eta)+"-"+str(MAXDELTA)+"-"+str(nbPart)+"-"+datetime.now().strftime("%Y%m%d%H%M%S") if Error != 2:
np.save(fichier,np.array(dessinBitmap)) if Error:
Save_txt(np.array(dessinBitmap), N, fichier) fichier = diracine + dossier + "\\Erreur\\"+"foudre-"+str(eta)+"-"+str(N)+"-"+str(MAXDELTA)+"-"+str(nbPart)+"-"+datetime.now().strftime("%Y%m%d%H%M%S")
Print_plt(np.array(dessinBitmap), N, eta, nbPart, fichier) else:
fichier = diracine + dossier + "\\foudre-"+str(eta)+"-"+str(N)+"-"+str(MAXDELTA)+"-"+str(nbPart)+"-"+datetime.now().strftime("%Y%m%d%H%M%S")
Save_csv(eta, N, MAXDELTA, nbPart, diracine, dossier)
np.save(fichier,np.array(dessinBitmap))
Save_txt(np.array(dessinBitmap), N, fichier)
Print_plt(np.array(dessinBitmap), N, eta, nbPart, fichier, dossier)
print("")
input("Fini")