import random # 1. Le problème : trouver la température qui donne la meilleure performance. # La "vraie" solution est 72.5, mais l'algorithme ne le sait pas. def tester_performance(temperature): # Plus on est proche de 72.5, meilleure est la performance (plus le score est bas) return abs(temperature - 72.5) # --- Initialisation --- essaim = [] gBest_position = 0 # La meilleure température trouvée par le groupe gBest_valeur = 1000 # La meilleure performance (on commence à l'infini) # Créer 20 "oiseaux" (particules) for _ in range(20): oiseau = { "position": random.uniform(10, 90), # Une température au hasard entre 10°C et 90°C "pBest_position": 0, # Son meilleur souvenir (température) "pBest_valeur": 1000 # Son meilleur souvenir (performance) } essaim.append(oiseau) # --- La Boucle de Recherche (L'algorithme) --- for iteration in range(50): # On fait 50 "tours de vol" for oiseau in essaim: # 1. L'oiseau teste la performance à sa position actuelle performance = tester_performance(oiseau["position"]) # 2. L'oiseau met à jour son souvenir personnel (pBest) if performance < oiseau["pBest_valeur"]: oiseau["pBest_valeur"] = performance oiseau["pBest_position"] = oiseau["position"] # 3. L'oiseau met à jour le souvenir du groupe (gBest) if performance < gBest_valeur: gBest_valeur = performance gBest_position = oiseau["position"] # 4. Mettre à jour la position de chaque oiseau # (C'est ici qu'ils "volent" vers pBest et gBest) for oiseau in essaim: # Chaque oiseau se rapproche un peu de son meilleur souvenir (pBest) # et un peu du meilleur souvenir du groupe (gBest) # (Ceci est une simplification de la formule de vitesse de PSO) tendance_pBest = (oiseau["pBest_position"] - oiseau["position"]) * random.random() tendance_gBest = (gBest_position - oiseau["position"]) * random.random() # Le poisson "vole" dans une nouvelle direction oiseau["position"] = oiseau["position"] + tendance_pBest + tendance_gBest # On s'assure qu'il reste dans les limites (10°C à 90°C) oiseau["position"] = max(10, min(90, oiseau["position"])) # --- Résultat --- print(f"La meilleure temperature trouvee par l'essaim est : {gBest_position:.2f}°C") print(f"La meilleure performance obtenue est : {gBest_valeur:.2f}")