É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

Commentaires

  1. Le code est des plus ingénieux

    RépondreSupprimer
  2. je suis tout à fait d'accord avec Anonyme l'utilisation du threadpool et du cache est très intelligentes

    RépondreSupprimer
  3. the code is quite ingenious

    RépondreSupprimer

Enregistrer un commentaire