Maison >Périphériques technologiques >IA >Algorithmes de l'intelligence Swarm: trois implémentations Python
Imaginez regarder un troupeau d'oiseaux en vol. Il n'y a pas de leader, personne ne donne des instructions, mais ils se balançaient et glissent ensemble dans une parfaite harmonie. Cela peut ressembler au chaos, mais il y a un ordre caché. Vous pouvez voir le même schéma dans les écoles de poisson évitant les prédateurs ou les fourmis trouver le chemin le plus court vers la nourriture. Ces créatures s'appuient sur des règles simples et une communication locale pour lutter contre les tâches étonnamment complexes sans contrôle central.
C'est la magie de l'intelligence de l'essaim.
Nous pouvons reproduire ce comportement à l'aide d'algorithmes qui résolvent des problèmes difficiles en imitant l'intelligence de l'essaim.
L'optimisation des essaims de particules (PSO) tire son inspiration du comportement des troupeaux des oiseaux et des écoles de poisson. Dans ces systèmes naturels, les individus se déplacent en fonction de leurs propres expériences antérieures et des positions de leurs voisins, s'adaptant progressivement pour suivre les membres les plus performants du groupe. PSO applique ce concept aux problèmes d'optimisation, où les particules, appelées agents, se déplacent dans l'espace de recherche pour trouver une solution optimale.
Par rapport à l'ACO, le PSO fonctionne dans des espaces continus plutôt que discrets. Dans l'ACO, l'accent est mis sur les choix d'orientation et discrets, tandis que le PSO est mieux adapté aux problèmes impliquant des variables continues, telles que le réglage des paramètres.
Dans PSO, les particules explorent un espace de recherche. Ils ajustent leurs positions en fonction de deux facteurs principaux: leur position la plus connue personnelle et la position la plus connue de l'ensemble de l'essaim. Ce mécanisme de double rétroaction leur permet de converger vers l'optimum global.
Le processus commence par un essaim de particules initialisés au hasard à travers l'espace de solution. Chaque particule représente une solution possible au problème d'optimisation. Au fur et à mesure que les particules se déplacent, elles se souviennent de leurs meilleures positions personnelles (la meilleure solution qu'ils ont rencontrée jusqu'à présent) et sont attirées vers la meilleure position mondiale (la meilleure solution que toute particule ait trouvée).
Ce mouvement est entraîné par deux facteurs: l'exploitation et l'exploration. L'exploitation consiste à affiner la recherche autour de la meilleure solution actuelle, tandis que l'exploration encourage les particules à rechercher d'autres parties de l'espace de solution pour éviter de rester coincé dans l'optima local. En équilibrant ces deux dynamiques, PSO converge efficacement la meilleure solution.
Dans la gestion du portefeuille financier, trouver le meilleur moyen d'allouer des actifs pour obtenir le plus de rendements tout en maintenant les risques bas peut être délicat. Utilisons un PSO pour trouver le mélange d'actifs nous donneront le retour sur investissement le plus élevé.
Le code ci-dessous montre comment PSO fonctionne pour optimiser un portefeuille financier fictif. Il commence par des allocations d'actifs aléatoires, puis les modifie sur plusieurs itérations en fonction de ce qui fonctionne le mieux, trouvant progressivement le mélange optimal d'actifs pour le rendement le plus élevé avec le risque le plus bas.
import numpy as np import matplotlib.pyplot as plt # Define the PSO parameters class Particle: def __init__(self, n_assets): # Initialize a particle with random weights and velocities self.position = np.random.rand(n_assets) self.position /= np.sum(self.position) # Normalize weights so they sum to 1 self.velocity = np.random.rand(n_assets) self.best_position = np.copy(self.position) self.best_score = float('inf') # Start with a very high score def objective_function(weights, returns, covariance): """ Calculate the portfolio's performance. - weights: Asset weights in the portfolio. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. """ portfolio_return = np.dot(weights, returns) # Calculate the portfolio return portfolio_risk = np.sqrt(np.dot(weights.T, np.dot(covariance, weights))) # Calculate portfolio risk (standard deviation) return -portfolio_return / portfolio_risk # We want to maximize return and minimize risk def update_particles(particles, global_best_position, returns, covariance, w, c1, c2): """ Update the position and velocity of each particle. - particles: List of particle objects. - global_best_position: Best position found by all particles. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. - w: Inertia weight to control particle's previous velocity effect. - c1: Cognitive coefficient to pull particles towards their own best position. - c2: Social coefficient to pull particles towards the global best position. """ for particle in particles: # Random coefficients for velocity update r1, r2 = np.random.rand(len(particle.position)), np.random.rand(len(particle.position)) # Update velocity particle.velocity = (w * particle.velocity + c1 * r1 * (particle.best_position - particle.position) + c2 * r2 * (global_best_position - particle.position)) # Update position particle.position += particle.velocity particle.position = np.clip(particle.position, 0, 1) # Ensure weights are between 0 and 1 particle.position /= np.sum(particle.position) # Normalize weights to sum to 1 # Evaluate the new position score = objective_function(particle.position, returns, covariance) if score < particle.best_score: # Update the particle's best known position and score particle.best_position = np.copy(particle.position) particle.best_score = score def pso_portfolio_optimization(n_particles, n_iterations, returns, covariance): """ Perform Particle Swarm Optimization to find the optimal asset weights. - n_particles: Number of particles in the swarm. - n_iterations: Number of iterations for the optimization. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. """ # Initialize particles particles = [Particle(len(returns)) for _ in range(n_particles)] # Initialize global best position global_best_position = np.random.rand(len(returns)) global_best_position /= np.sum(global_best_position) global_best_score = float('inf') # PSO parameters w = 0.5 # Inertia weight: how much particles are influenced by their own direction c1 = 1.5 # Cognitive coefficient: how well particles learn from their own best solutions c2 = 0.5 # Social coefficient: how well particles learn from global best solutions history = [] # To store the best score at each iteration for _ in range(n_iterations): update_particles(particles, global_best_position, returns, covariance, w, c1, c2) for particle in particles: score = objective_function(particle.position, returns, covariance) if score < global_best_score: # Update the global best position and score global_best_position = np.copy(particle.position) global_best_score = score # Store the best score (negative return/risk ratio) for plotting history.append(-global_best_score) return global_best_position, history # Example data for 3 assets returns = np.array([0.02, 0.28, 0.15]) # Expected returns for each asset covariance = np.array([[0.1, 0.02, 0.03], # Covariance matrix for asset risks [0.02, 0.08, 0.04], [0.03, 0.04, 0.07]]) # Run the PSO algorithm n_particles = 10 # Number of particles n_iterations = 10 # Number of iterations best_weights, optimization_history = pso_portfolio_optimization(n_particles, n_iterations, returns, covariance) # Plotting the optimization process plt.figure(figsize=(12, 6)) plt.plot(optimization_history, marker='o') plt.title('Portfolio Optimization Using PSO') plt.xlabel('Iteration') plt.ylabel('Objective Function Value (Negative of Return/Risk Ratio)') plt.grid(False) # Turn off gridlines plt.show() # Display the optimal asset weights print(f"Optimal Asset Weights: {best_weights}")
Ce graphique montre à quel point l'algorithme PSO a amélioré le mélange d'actifs du portefeuille avec chaque itération.
PSO est utilisé pour sa simplicité et son efficacité dans la résolution de divers problèmes d'optimisation, en particulier dans les domaines continus. Sa flexibilité le rend utile pour de nombreux scénarios du monde réel où des solutions précises sont nécessaires.
Ces applications incluent:
La capacité de PSO à explorer efficacement les espaces de solution le rend applicable entre les champs, de la robotique à la gestion de l'énergie à la logistique.
L'algorithme de colonie d'abeille artificielle (ABC) est modélisé sur le comportement de nourriture des abeilles.
dans la nature, les abeilles recherchent efficacement des sources de nectar et partagent ces informations avec d'autres membres de la ruche. ABC capture ce processus de recherche collaboratif et l'applique aux problèmes d'optimisation, en particulier ceux impliquant des espaces complexes et à grande dimension.
Ce qui distingue ABC des autres algorithmes d'intelligence Swarm, c'est sa capacité à équilibrer l'exploitation, en se concentrant sur le raffinage des solutions actuelles et l'exploration, à la recherche de solutions nouvelles et potentiellement meilleures. Cela rend ABC particulièrement utile pour les problèmes à grande échelle où l'optimisation globale est essentielle.
Dans l'algorithme ABC, l'essaim des abeilles est divisé en trois rôles spécialisés: les abeilles employées, les spectateurs et les scouts. Chacun de ces rôles imite un aspect différent de la façon dont les abeilles recherchent et exploitent des sources alimentaires dans la nature.
Cette dynamique permet à ABC d'équilibrer la recherche entre explorer intensivement des zones prometteuses et explorer largement de nouveaux domaines de l'espace de recherche. Cela aide l'algorithme à éviter d'être piégé dans l'optima local et augmente ses chances de trouver un optimum global.
La fonction Rastrigin est un problème populaire d'optimisation, connu pour ses nombreux minima locaux, ce qui en fait un défi difficile pour de nombreux algorithmes. L'objectif est simple: trouver le minimum global.
Dans cet exemple, nous utiliserons l'algorithme artificiel des colonies d'abeilles pour résoudre ce problème. Chaque abeille de l'algorithme ABC explore l'espace de recherche, à la recherche de meilleures solutions pour minimiser la fonction. Le code simule les abeilles qui explorent, exploitent et éclairer pour de nouveaux domaines, assurant un équilibre entre l'exploration et l'exploitation.
import numpy as np import matplotlib.pyplot as plt # Define the PSO parameters class Particle: def __init__(self, n_assets): # Initialize a particle with random weights and velocities self.position = np.random.rand(n_assets) self.position /= np.sum(self.position) # Normalize weights so they sum to 1 self.velocity = np.random.rand(n_assets) self.best_position = np.copy(self.position) self.best_score = float('inf') # Start with a very high score def objective_function(weights, returns, covariance): """ Calculate the portfolio's performance. - weights: Asset weights in the portfolio. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. """ portfolio_return = np.dot(weights, returns) # Calculate the portfolio return portfolio_risk = np.sqrt(np.dot(weights.T, np.dot(covariance, weights))) # Calculate portfolio risk (standard deviation) return -portfolio_return / portfolio_risk # We want to maximize return and minimize risk def update_particles(particles, global_best_position, returns, covariance, w, c1, c2): """ Update the position and velocity of each particle. - particles: List of particle objects. - global_best_position: Best position found by all particles. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. - w: Inertia weight to control particle's previous velocity effect. - c1: Cognitive coefficient to pull particles towards their own best position. - c2: Social coefficient to pull particles towards the global best position. """ for particle in particles: # Random coefficients for velocity update r1, r2 = np.random.rand(len(particle.position)), np.random.rand(len(particle.position)) # Update velocity particle.velocity = (w * particle.velocity + c1 * r1 * (particle.best_position - particle.position) + c2 * r2 * (global_best_position - particle.position)) # Update position particle.position += particle.velocity particle.position = np.clip(particle.position, 0, 1) # Ensure weights are between 0 and 1 particle.position /= np.sum(particle.position) # Normalize weights to sum to 1 # Evaluate the new position score = objective_function(particle.position, returns, covariance) if score < particle.best_score: # Update the particle's best known position and score particle.best_position = np.copy(particle.position) particle.best_score = score def pso_portfolio_optimization(n_particles, n_iterations, returns, covariance): """ Perform Particle Swarm Optimization to find the optimal asset weights. - n_particles: Number of particles in the swarm. - n_iterations: Number of iterations for the optimization. - returns: Expected returns of the assets. - covariance: Covariance matrix representing risk. """ # Initialize particles particles = [Particle(len(returns)) for _ in range(n_particles)] # Initialize global best position global_best_position = np.random.rand(len(returns)) global_best_position /= np.sum(global_best_position) global_best_score = float('inf') # PSO parameters w = 0.5 # Inertia weight: how much particles are influenced by their own direction c1 = 1.5 # Cognitive coefficient: how well particles learn from their own best solutions c2 = 0.5 # Social coefficient: how well particles learn from global best solutions history = [] # To store the best score at each iteration for _ in range(n_iterations): update_particles(particles, global_best_position, returns, covariance, w, c1, c2) for particle in particles: score = objective_function(particle.position, returns, covariance) if score < global_best_score: # Update the global best position and score global_best_position = np.copy(particle.position) global_best_score = score # Store the best score (negative return/risk ratio) for plotting history.append(-global_best_score) return global_best_position, history # Example data for 3 assets returns = np.array([0.02, 0.28, 0.15]) # Expected returns for each asset covariance = np.array([[0.1, 0.02, 0.03], # Covariance matrix for asset risks [0.02, 0.08, 0.04], [0.03, 0.04, 0.07]]) # Run the PSO algorithm n_particles = 10 # Number of particles n_iterations = 10 # Number of iterations best_weights, optimization_history = pso_portfolio_optimization(n_particles, n_iterations, returns, covariance) # Plotting the optimization process plt.figure(figsize=(12, 6)) plt.plot(optimization_history, marker='o') plt.title('Portfolio Optimization Using PSO') plt.xlabel('Iteration') plt.ylabel('Objective Function Value (Negative of Return/Risk Ratio)') plt.grid(False) # Turn off gridlines plt.show() # Display the optimal asset weights print(f"Optimal Asset Weights: {best_weights}")
Ce graphique montre la forme physique de la meilleure solution trouvée par l'algorithme ABC avec chaque itération. Dans cette série, il a atteint sa forme physique optimale autour de la 64e itération.
Ici, vous pouvez voir la fonction Rastrigin tracée sur un tracé de contour, avec ses nombreux minima locaux. Le point rouge est les minima globaux trouvés par l'algorithme ABC que nous avons dirigé.
L'algorithme ABC est un outil robuste pour résoudre les problèmes d'optimisation. Sa capacité à explorer efficacement les espaces de recherche importants et complexes en fait un choix incontournable pour les industries où l'adaptabilité et l'évolutivité sont essentielles.
Ces applications incluent:
ABC est un algorithme flexible adapté à tout problème où des solutions optimales doivent être trouvées dans des environnements dynamiques et de grande dimension. Sa nature décentralisée le rend bien adapté aux situations où d'autres algorithmes peuvent avoir du mal à équilibrer efficacement l'exploration et l'exploitation.
Il existe plusieurs algorithmes d'intelligence Swarm, chacun avec différents attributs. Lorsque vous décidez lequel utiliser, il est important de peser leurs forces et leurs faiblesses pour décider quels répondent le mieux à vos besoins.
L'ACO est efficace pour les problèmes combinatoires comme le routage et la planification, mais peut nécessiter des ressources informatiques importantes. Le PSO est plus simple et excelle dans l'optimisation continue, comme le réglage de l'hyperparamètre, mais peut lutter avec l'optima local. ABC équilibre avec succès l'exploration et l'exploitation, bien qu'elle nécessite un réglage minutieux.
D'autres algorithmes d'intelligence Swarm, tels que l'algorithme Firefly et l'optimisation de la recherche de coucou, offrent également des avantages uniques pour des types spécifiques de problèmes d'optimisation.
algorithme |
Forces |
faiblesses |
bibliothèques préférées |
meilleures applications |
Optimisation des colonies de fourmis (ACO) |
efficace pour les problèmes combinatoires et gère bien les espaces discrets complexes |
Génératif en calcul et nécessite un réglage fin |
pyaco |
Problèmes de routage, planification et allocation des ressources |
Optimisation des essaims de particules (PSO) |
bon pour l'optimisation continue et simple et facile à implémenter |
peut converger vers l'optima local et est moins efficace pour les problèmes discrets |
pyswarms |
Tunage hyperparamètre, conception d'ingénierie, modélisation financière |
Colonie des abeilles artificielles (ABC) |
Adaptable à de grands problèmes dynamiques et à l'exploration et à l'exploration équilibrées |
Généramme en calcul et nécessite un réglage soigneux des paramètres |
beeColpy |
télécommunications, optimisation à grande échelle et espaces de grande dimension |
algorithme de feu (FA) |
excelle dans l'optimisation multimodale et a une forte capacité de recherche globale |
sensible aux paramètres des paramètres et à la convergence plus lente |
Fireflyalgorithme |
Traitement d'images, conception d'ingénierie et optimisation multimodale |
Cuckoo Search (CS) |
Efficace pour résoudre les problèmes d'optimisation et possède de fortes capacités d'exploration |
peut converger prématurément et les performances dépendent du réglage |
cso |
Planification, sélection des fonctionnalités et applications d'ingénierie |
Les algorithmes d'intelligence Swarm, comme de nombreuses techniques d'apprentissage automatique, rencontrent des défis qui peuvent affecter leurs performances. Ceux-ci incluent:
Une tendance notable est l'intégration de l'intelligence Swarm avec d'autres techniques d'apprentissage automatique. Les chercheurs explorent comment les algorithmes essaims peuvent améliorer les tâches telles que la sélection des caractéristiques et l'optimisation de l'hyperparamètre. Découvrez un algorithme d'optimisation des essaims de particules hybrides pour résoudre le problème d'ingénierie.
Les avancées récentes se concentrent également sur la résolution de certains des défis traditionnels associés à l'intelligence Swarm, tels que la convergence prématurée. De nouveaux algorithmes et techniques sont en cours de développement pour atténuer le risque de converger sur des solutions sous-optimales. Pour plus d'informations, consultez les approches basées sur la mémoire pour éliminer la convergence prématurée dans l'optimisation des essaims de particules
L'évolutivité est un autre domaine de recherche important. À mesure que les problèmes deviennent de plus en plus complexes et que les volumes de données se développent, les chercheurs travaillent sur des moyens de rendre les algorithmes d'intelligence Swarm plus évolutifs et efficaces. Cela comprend le développement d'algorithmes qui peuvent gérer plus efficacement les ensembles de données importants et les espaces de grande dimension, tout en optimisant des ressources informatiques pour réduire le temps et le coût associés à l'exécution de ces algorithmes. Pour en savoir plus à ce sujet, consultez les développements récents dans la théorie et l'applicabilité de la recherche d'essaims.
Les algorithmes d'essaims sont appliqués aux problèmes de la robotique aux modèles de langue importants (LLM) au diagnostic médical. Il existe des recherches en cours pour savoir si ces algorithmes peuvent être utiles pour aider les LLM à oublier stratégiquement les informations pour se conformer au droit d'être oublié. Et, bien sûr, les algorithmes d'essaim ont une multitude d'applications en science des données.
Swarm Intelligence offre de puissantes solutions pour les problèmes d'optimisation dans diverses industries. Ses principes de décentralisation, de rétroaction positive et d'adaptation lui permettent de s'attaquer aux tâches dynamiques complexes avec lesquelles les algorithmes traditionnels pourraient lutter.
Consultez cette revue de l'état actuel des algorithmes d'essaims, «Swarm Intelligence: une enquête sur la classification et les applications du modèle».
Pour une plongée plus profonde dans les applications commerciales de l'IA, consultez la stratégie d'intelligence artificielle (IA) ou l'intelligence artificielle pour les chefs d'entreprise. Pour en savoir plus sur d'autres algorithmes qui imitent la nature, consultez l'algorithme génétique: Guide complet avec implémentation Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!