Étape 4 : Validation expérimentale
Afin de valider la démonstration il faut que l'hypothèse soit vraie :
À l'aide d'un algorithme développé sur Google Colab, on vérifie que tous les nombres de 2 jusqu'à 10^9 finissent par se transformer en 1 selon les règles de Collatz. Cette validation permet de valider l'hypothèse selon laquelle tous les nombres peuvent être transformés en 1.
Voici le code (il est un peu sophistiqué mais il devait servir à tester les nombre jusqu'a 10^100) :
import pickle
from google.colab import drive
import concurrent.futures
drive.mount('/content/drive')
def collatz(n, cache={}):
if n in cache:
return cache[n]
original_n = n
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = n * 3 + 1
cache[original_n] = n
return n
def load_cache(filename='/content/drive/My Drive/collatz_cache4.pkl'):
try:
with open(filename, "rb") as f:
return pickle.load(f)
except FileNotFoundError:
return {} # Retourne un cache vide si le fichier n'est pas trouvé
except EOFError:
return {} # Retourne un cache vide si le fichier est vide
def save_cache(cache, filename='/content/drive/My Drive/collatz_cache4.pkl'):
with open(filename, "wb") as f:
pickle.dump(cache, f)
# Chargement du cache au démarrage
cache = load_cache()
# Trouver le dernier nombre traité dans le cache
last_n = 0
for n_key in cache.keys():
if n_key > last_n:
last_n = n_key
n = last_n + 1 # Commence au nombre suivant le dernier traité
try:
with concurrent.futures.ThreadPoolExecutor() as executor:
while True:
future = executor.submit(collatz, n, cache)
print(f"{n}")
future.result()
n += 1
# Sauvegarde du cache périodiquement (par exemple, tous les 100 nombres)
if n % 10000 == 0:
save_cache(cache)
except KeyboardInterrupt:
print("L'exécution a été interrompue par l'utilisateur.")
save_cache(cache) # Sauvegarde du cache avant de quitter
Le code est des plus ingénieux
RépondreSupprimerje suis tout à fait d'accord avec Anonyme l'utilisation du threadpool et du cache est très intelligentes
RépondreSupprimerthe code is quite ingenious
RépondreSupprimer