Maison >Périphériques technologiques >IA >Algorithmes de l'intelligence Swarm: trois implémentations Python

Algorithmes de l'intelligence Swarm: trois implémentations Python

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌original
2025-03-03 09:35:09213parcourir

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.

Optimisation des essaims de particules (PSO)

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.

comment fonctionne l'optimisation de l'essaim des particules

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.

Optimisation de l'essaim de particules Implémentation de Python

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}")

Algorithmes de l'intelligence Swarm: trois implémentations Python

Ce graphique montre à quel point l'algorithme PSO a amélioré le mélange d'actifs du portefeuille avec chaque itération.

Applications de l'optimisation des essaims de particules

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:

  • Apprentissage automatique: PSO peut être appliqué pour régler les hyperparamètres dans les algorithmes d'apprentissage automatique, aidant à trouver les meilleures configurations de modèle.
  • Conception d'ingénierie: le PSO est utile pour optimiser les paramètres de conception pour des systèmes comme les composants aérospatiaux ou les circuits électriques.
  • Modélisation financière: En finance, PSO peut aider à l'optimisation du portefeuille, en minimisant les risques tout en maximisant les rendements.

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.

Colonie d'abeille artificielle (ABC)

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.

comment fonctionne la colonie d'abeille artificielle

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.

  • abeilles employées: ces abeilles sont responsables de l'exploration de sources alimentaires connues, représentant les solutions actuelles dans le problème d'optimisation. Ils évaluent la qualité (condition physique) de ces sources et partagent les informations avec le reste de la ruche.
  • ABEES ONLOOKER: Après avoir recueilli des informations des abeilles employées, les spectateurs sélectionnent les sources de nourriture à explorer davantage. Ils fondent leurs choix sur la qualité des solutions partagées par les abeilles employées, en se concentrant davantage sur les meilleures options, affinant ainsi la recherche d'une solution optimale.
  • abeilles scoutes: lorsque la source de nourriture (solution) d'une abeille utilisée devient épuisée ou stagnante (lorsqu'aucune amélioration n'est trouvée après un certain nombre d'itérations), l'abeille devient un éclaireur. Les scouts explorent de nouveaux domaines de l'espace de la solution, à la recherche de sources de nourriture potentiellement inexplorées, injectant ainsi la diversité dans le processus de recherche.

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.

Implémentation artificielle de la colonie des abeilles Python

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}")

Algorithmes de l'intelligence Swarm: trois implémentations Python

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.

Algorithmes de l'intelligence Swarm: trois implémentations Python

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é.

Applications de la colonie des abeilles artificielles

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:

  • Télécommunications: ABC peut être utilisé pour optimiser le placement des ressources du réseau et des antennes, maximisant la couverture et la force du signal tout en minimisant les coûts.
  • Ingénierie: ABC peut affiner les paramètres dans l'optimisation de la conception structurelle.
  • Science des données: ABC peut être appliqué à la sélection des fonctionnalités, pour identifier les variables les plus importantes d'un ensemble de données pour l'apprentissage automatique.

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.

Comparaison des algorithmes d'intelligence Swarm

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

défis et limitations

Les algorithmes d'intelligence Swarm, comme de nombreuses techniques d'apprentissage automatique, rencontrent des défis qui peuvent affecter leurs performances. Ceux-ci incluent:

  1. Convergence prématurée: l'essaim peut s'installer sur une solution sous-optimale trop rapidement.
  2. Digne des paramètres: obtenir des résultats optimaux nécessite souvent un ajustement minutieux des paramètres d'algorithme.
  3. Ressources de calcul et évolutivité: ces algorithmes peuvent être à forte intensité de calcul, en particulier avec des problèmes plus importants et plus complexes, et leurs performances peuvent se dégrader à mesure que la complexité du problème augmente.
  4. Nature stochastique: l'aléatoire inhérent à ces algorithmes peut entraîner une variabilité des résultats.

Dernières recherches et avancées

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.

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn