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.
-
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
forwardpour :- 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_cachepour l'opérationRead(opcode 4) - Clamper les valeurs du
memory_cacheentre 0 et 1 pour la stabilité
- Supporter les mises à jour récurrentes via le routeur V5 (
- Mise à jour de
calculate_fitnesspour passer la config àforward - Mise à jour de la classe
Population:- Acceptation d'un paramètre optionnel
db(instance deKuzuDB) - Initialisation du
memory_cachepour chaque génome - Ajout d'un compteur de génération (
self.generation) - Synchronisation du meilleur génome avec KuzuDB à chaque
kzu_sync_intervalgénérations viasync_genome_to_kzu - Incrémentation du compteur de génération à chaque étape
- Acceptation d'un paramètre optionnel
- Ajout de champs à
-
src/seed_ai/mutation.py- Ajout d'un champ
memory_cache: np.ndarray = Noneà la classeGenome - Ce champ est initialisé dans
Population.__init__et porté lors du clonage
- Ajout d'un champ
-
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
Atomedans KuzuDB - Crée des relations
CONNECTE_Apour chaque connexion non nulle de la matrice de poidsW - Utilise un ID unique basé sur la génération et un hachage des poids pour éviter les duplications
- Stocke chaque neuronne du génome comme un nœud
- Fonction
load_genome_from_kzu(genome_id, db):- Placeholder pour le chargement futur (non implémenté pour l'instant)
- Fonction
-
main.py- Modification de l'instantiation de
Populationpour passer l'instance deKuzuDBcréée
- Modification de l'instantiation de
- 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
thresholdsest 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 relationsCONNECTE_A(une par connexion pondérée). Ceci permet la persistance et l'analyse des structures évolutives.
Le projet peut être exécuté comme auparavant avec :
python main.pyLes 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.
- Implémenter l'utilisation des seuils V6 dans les fonctions d'activation (par exemple,
ReLU(z - threshold)). - Définir une véritable détection de couches pour le mappage
per_layerdu bytecode. - Étendre la synchronisation KuzuDB pour inclure les gènes de mutation, le bytecode et d'autres métadonnées utiles pour l'analyse.
- Implémenter la fonction de chargement depuis KuzuDB pour réintroduire des génomes performants dans la population.