Réseau de neurones artificiel basic: voiture sur un circuit

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Réseau de neurones artificiel basic: voiture sur un circuit

Message par Fig »

Ces voitures apprennent à conduire sur le circuit. Elles ont des télémtres laser (en quelque sorte) et chacune un reseau de neuron artificiel (2-3 couches selon comme on les compte)
L'algo génétique fonctionne bof, l'évaluation des voitures se base sur le temps pendant lequel elles restent sur la piste. Je les reproduit en moyennant les poids des synapse, pas sûr que ce soit très pertinent.

Quoiqu'il en soit, au bout de quelques dizaines de générations, une voiture devrait effectuer un tour complet.

On peut changer le nombre de laser (ça change le nombre de neurone aussi), la distance de détection et le taux de mutation avec les constantes.

La librairie élémentaire encore, permet de créer facilement des réseaux. Je vais m'atteler à rajouter la rétropropagation de gradiant pour l'apprentissage, maintenant.
A la fin de la dll, en commentaire un petit programme pour visualiser le réseau.


Code sur le forum anglais :
http://www.purebasic.fr/english/viewtop ... 16&t=70209

Edit: modification de l'algo génétique de sélection.
Edit2: ajout du bias aux neurones.
Dernière modification par Fig le lun. 19/févr./2018 0:27, modifié 8 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par comtois »

Je n'ai pas encore testé, mais c'est le genre de projet qui m'intéresse. Merci pour le partage, dès que je trouve du temps je me plonge dans le code.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par comtois »

ça commence bien , comment tu passes d'une dll à une lib ?

Dans un premier temps tu demandes de créer une dll à partir du premier code source
Save as Dll "NeuralNetLib"

Dans le second code source tu ouvres une lib ?
Import "NeuroNetLib.lib"

J'ai loupé un truc ?

[EDIT]

ok j'ai trouvé, il faut sauver sous le nom 'NeuroNetLib' et pas 'NeuralNetLib'

Je laisse le message pour les benêts comme moi qui appliquent scrupuleusement les instructions sans réfléchir

(la lib est créée en même temps que la dll)

Et maintenant ça marche !! à la 17e génération , pas mal , faut que j'analyse ça maintenant.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par Fig »

Bonjour Comtois,
J'ai corrigé le nom de la lib, j'ai inversé anglais et français.
17 genérations, tu as eu de la chance. L'algo génétique d'évolution et la fonction de fitness ne sont vraiment pas adaptés. Je vois des améliorations à faire, mais ce n'est pas le plus important dans l'immédiat (pas plus que les lourdeurs et les choses redondantes et inutiles qui sont dans le code des voitures) la retropropagation de gradient est le plus urgent. (à tester sur l'approximation d'une fonction XOR puis une reconnaissance de caractères manuscrites)

Ce n'est pas un code très didactique au sens où la mémoire n'est pas structurée clairement pour faciliter la lecture. Néanmoins, ce n'est guère complexe à suivre.

Ultimement, il faudrait traiter le réseau comme des matrices et utiliser un shader et opengl afin d'accélérer grandement le traitement d'un nombre faramineux de neurones. Pb nous permet d'écrire des shaders, nous verrons ...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par poshu »

Oh. Je suis intéressé. Très très TRES intéressé.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par Fig »

Dans le sujet sur retropropagation de gradian XOR,AND,OR. Il y a la dernière version de la librairie. http://www.purebasic.fr/french/viewtopi ... =2&t=17169

Je suis actuellement bloqué sur les réseaux de convolution car je ne sais pas propager à l'envers à travers cette @$^¨!§ de couche de convolution. Dès que j'ai trouvé la solution, on s'attaque (vraiment) à la reconnaissance d'images.
Actuellement avec un réseau FC (full connected) et apprentissage supervisé, je n'obtiens que des résultats médiocres sur la reconnaissance de chiffres manuscrits (75% sur MNIST https://en.wikipedia.org/wiki/MNIST_database ).
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Réseau de neurones artificiel basic: voiture sur un circ

Message par Ollivier »

Bonjour Fig,

si tu n'avais pas jeté un oeil sur ce partage de MiLoo, je te le recommande.

MiLoo a intégré la notion d'échelonnement au sein de chaque neurone.

http://www.purebasic.fr/english/viewtop ... 13&t=68406
Répondre