Skip to content

Latest commit

 

History

History
62 lines (48 loc) · 4.05 KB

File metadata and controls

62 lines (48 loc) · 4.05 KB

Résumé de l'implémentation

Les modifications suivantes ont été apportées pour intégrer le routeur V5, le bytecode V6, les seuils de mémoire, et la synchronisation avec KuzuDB dans le projet AGIseed.

Fichiers modifiés

  1. src/seed_ai/evolution.py

    • Ajout de champs à EvolutionConfig :
      • num_recurrent_steps: int = 3 (nombre d'états récurrents)
      • bytecode_mapping: str = "per_node" (méthode de mappage du bytecode)
      • kzu_sync_interval: int = 1 (intervalle de synchronisation avec KuzuDB)
    • Mise à jour de la fonction forward pour :
      • Supporter les mises à jour récurrentes via le routeur V5 (W_router)
      • Sélectionner l'opération de chaque neurone à partir du bytecode selon le mode de mappage
      • Utiliser le memory_cache pour l'opération Read (opcode 4)
      • Clamper les valeurs du memory_cache entre 0 et 1 pour la stabilité
    • Mise à jour de calculate_fitness pour passer la config à forward
    • Mise à jour de la classe Population :
      • Acceptation d'un paramètre optionnel db (instance de KuzuDB)
      • Initialisation du memory_cache pour chaque génome
      • Ajout d'un compteur de génération (self.generation)
      • Synchronisation du meilleur génome avec KuzuDB à chaque kzu_sync_interval générations via sync_genome_to_kzu
      • Incrémentation du compteur de génération à chaque étape
  2. src/seed_ai/mutation.py

    • Ajout d'un champ memory_cache: np.ndarray = None à la classe Genome
    • Ce champ est initialisé dans Population.__init__ et porté lors du clonage
  3. src/seed_ai/kzu_sync.py (nouveau fichier)

    • Fonction sync_genome_to_kzu(genome, generation, db) :
      • Stocke chaque neuronne du génome comme un nœud Atome dans KuzuDB
      • Crée des relations CONNECTE_A pour chaque connexion non nulle de la matrice de poids W
      • Utilise un ID unique basé sur la génération et un hachage des poids pour éviter les duplications
    • Fonction load_genome_from_kzu(genome_id, db) :
      • Placeholder pour le chargement futur (non implémenté pour l'instant)
  4. main.py

    • Modification de l'instantiation de Population pour passer l'instance de KuzuDB créée

Fonctionnalités ajoutées

  • Routeur V5 : Le état récurrent du réseau est mis à jour à chaque étape en fonction des entrées et de la matrice W_router, permettant une forme de mémoire à court terme influencée par l'historique des entrées.
  • Bytecode V6 : Chaque neuronne peut maintenant avoir une opération différente (linéaire, ReLU, Sigmoid, Write, Read) spécifiée par le bytecode. Le mode de mappage permet de contrôler comment le bytecode est attribué aux neurones (par neurone, par couche, ou global).
  • Seuils de mémoire V6 : Le champ thresholds est conservé et muté, bien que non utilisé directement dans le forward pass actuel (il peut être facilement intégré plus tard).
  • Synchronisation KuzuDB : Le meilleur génome de chaque génération (ou selon l'intervalle défini) est sauvegardé dans la base de données KuzuDB sous forme de nœuds Atome (un par neuronne) et de relations CONNECTE_A (une par connexion pondérée). Ceci permet la persistance et l'analyse des structures évolutives.

Comment tester

Le projet peut être exécuté comme auparavant avec :

python main.py

Les nouvelles fonctionnalités seront activées avec les valeurs par défaut définies dans EvolutionConfig. Pour ajuster le comportement, modifiez les champs de EvolutionConfig dans main.py ou dans le code selon vos besoins.

Prochaine étapes suggérées

  1. Implémenter l'utilisation des seuils V6 dans les fonctions d'activation (par exemple, ReLU(z - threshold)).
  2. Définir une véritable détection de couches pour le mappage per_layer du bytecode.
  3. Étendre la synchronisation KuzuDB pour inclure les gènes de mutation, le bytecode et d'autres métadonnées utiles pour l'analyse.
  4. Implémenter la fonction de chargement depuis KuzuDB pour réintroduire des génomes performants dans la population.