Aller au contenu


Didier

Inscrit(e) (le) 11 févr. 2017
Déconnecté Dernière activité août 08 2018 08:01
-----

Sujets que j'ai initiés

Le problème du voyageur de commerce ( Javascript )

15 mai 2018 - 09:29

 
Bonsoir à tous.
 
Il y a quelque temps, sur un autre fil de ce forum parlant d'intelligence artificielle, j'ai déposé 2 ou 3 fichiers/programmes utilisant un algorithme d'évolution génétique.
 
Mais après réflexion je me suis rendu compte qu'il n'était pas nécessaire d'utiliser un tel algorithme pour résoudre les problèmes posés. (Sinon juste pour comprendre comment fonctionne cet algorithme).
 
En effet, la solution de ces problèmes étant connue d'avance, il "suffirait" de la coder directement.
 
Il me fallait prendre un problème pour lequel il n'existe pas d'algorithme connu à ce jour permettant de trouver la solution exacte.
 
J'ai donc retenu le "problème du voyageur de commerce".
(Voir Wikipédia pour plus d'informations sur ce problème).
 
 
En résumé :
 
Pour un nombre de lieux X, déterminer un plus court chemin qui passe par chaque lieu une et une seule fois.
 
 
J'ai donc codé un programme écrit en HTML et Javascript (sans aucune librairie extérieure) qui, par plusieurs approches, tente de répondre au problème.
 
 
- L'approche mode Recherche par Force brute (ou recherche exhaustive) utilise un algorithme testant tous les circuits possibles.
 
Chaque circuit possible est évalué, si le circuit actuel est meilleur, il est conservé et défini comme étant le meilleur circuit puis on recommence avec le circuit suivant.
 
Cet algorithme se termine lorsque tous les circuits possibles ont été testés. Il permet de définir, à coup sûr, le meilleur circuit. Mais il peut mettre très,très longtemps pour arriver à son terme.
 
Compte tenu de "l'explosion" du nombre de circuits possibles en fonction du nombre de lieux, cet algorithme ne fonctionnera dans le fichier que pour 7 lieux au maximum. 
 
 
- L'approche mode Lieu proche utilise un algorithme glouton par insertion.
 
Pour chaque lieu, un circuit est construit pas à pas en y insérant de nouveaux lieux.
 
Le circuit est composé du lieu de départ et celui qui en est le plus proche.
 
Les étapes suivantes consistent à insérer un lieu supplémentaire dans le circuit de manière optimale, c'est-à-dire qu’elle augmente au minimum la longueur totale du circuit.
 
Cet algorithme se termine lorsque tous les lieux de départ et les lieux à parcourir ont été testés.
 
Si l’insertion d'un lieu dans un circuit est optimale et rapide à calculer la solution finale n’est pas nécessairement optimale.
 
 
- L'approche mode Algorithme d'évolution génétique.
 
Les algorithmes génétiques s’inspirent de la théorie de l’évolution des espèces.
 
Comme dans la vie, les espèces peuvent se reproduire pour créer de nouveaux individus, et leur ADN peut subir des mutations au cours de leur vie. De plus, comme dans la nature, plus un individu est "fort", plus il a de chance de se reproduire.
 
Les grandes étapes de l'algorithme :
 
-1- Création au hasard de la population initiale (génération 1).
-2- Evaluation des individus de cette population (calcul des circuits, des meilleurs individus, tri de la population).
-3- Sélection des meilleurs individus et de quelques individus moins bons.
-4- Création des nouveaux individus par croisements des individus sélectionnés.
-5- Mutation de certains de ces nouveaux individus.
-6- Validation de la nouvelle population pour la génération suivante et retour à l'étape 2.
 
Cet algorithme ne se termine jamais. (Mais les résultats obtenus se stabilisent à un niveau 'acceptables').
 
Il est impossible de savoir si le circuit sélectionné est le meilleur de tous les circuits possibles.
 
 
- L'approche mode Algorithme de colonie de fourmis.
 
Les algorithmes de colonie de fourmis s’inspirent du comportement d'une colonie de fourmis.
 
Les fourmis sont capables de sélectionner le plus court chemin pour aller du nid à une source de nourriture grâce au dépôts et au suivi de pistes de marqueurs appelés phéromones.
Les phéromones sont déposées par les fourmis sur leur chemin. les fourmis ont tendance à suivre le chemin le plus marqué.
Les phéromones s'évaporent mais au fil du temps les fourmis choisiront la piste la plus courte entre le nid et la nourriture.
 
Les grandes étapes de l'algorithme :
 
-1- Création de la population initiale : Chaque fourmi est déposée sur un lieu du circuit choisi au hasard.
-2- Les fourmis parcourent le circuit en choisissant l'ordre des lieux à parcourir selon la puissance du marquage ou la distance entre les lieux.
-3- Le circuit de chaque fourmi est évalué
-4- La fourmi ayant trouvé le chemin le plus court dépose ses phéromones.
-5- Les fourmis sont repositionnées à leur point de départ et retour à l'étape 2.
 
Cet algorithme ne se termine jamais. (Mais les résultats obtenus se stabilisent rapidement à un niveau 'acceptables').
 
Il est impossible de savoir si le circuit sélectionné est le meilleur de tous les circuits possibles.
 
 
Le plus difficile pour moi dans ce projet a été de déterminer les meilleures valeurs pour les variables déterminantes pour l'algorithme d'évolution génétique et celui de la colonie de fourmis.
 
Pour l'algorithme génétique :
- Nombre initial de voyageurs
- Nombre des meilleurs voyageurs à retenir pour la génération suivante
- Probabilité pour qu'un un peu moins bon voyageur soit tout de même retenu pour la génération suivante
- Probabilité de mutation et type de la mutation 
     Renversement d'une partie de l'ADN
     Permutation de 2 gènes
     Hasard
 
Pour l'algorithme de la colonie de fourmis
- Nombre initial de fourmis
- Valeur d'une dose de phéromones et taux d'évaporation
- Valeurs minimum et maximum du marquage pour un chemin entre deux lieux
- Seuils pour le choix des chemins à emprunter
     Selon le marquage
     Selon la distance
     Hasard
 
Mes différents tests m'ont également montré que pour le problème posé l'algorithme de la colonie de fourmi semble donner les meilleurs résultats en un nombre "raisonnable" d'itérations.
 
En codant ce programme en Javascript j'ai appris comment trier un tableau, comment trouver des doublons et/ou des manquants dans un tableau, permuter des données, utiliser les index et pleins d'autres choses.
(A noter, je n'ai pas trouvé sur le net de fichier écrit en pur javascript - cad sans librairie spécifique - traitant ce problème).
 
Je vous laisse tester par vous même si vous le souhaitez.
 
Voici en pièce joint le fichier livré "en l'état".
Le fichier est limité à 50 lieux maximum ( modifiable ) car au delà de cette limite mon ordinateur ( un peu ancien ) rame sérieusement.
 
Voili, voilà.
 
Didier.
 
 

Mon moteur CC tourne trop vite

13 février 2017 - 12:53

Bonjour à tous.

 

J'ai un petit moteur CC qui est alimenté par une pile 1,5 volts.

 

Celui-ci tourne trop vite pour mon besoin.

 

Comment  ralentir sa vitesse de rotation ?

 

des résistances ? un potentiomètre ? ou autres choses ?

 

Si vous pouviez me proposer une solution avec un schéma de branchements ça m'arrangerai bien.

 

D'avance merci.

 

Didier.
(A bientôt, peut-être)
 
 

Je vous présente KRT1

11 février 2017 - 04:54

Bonjour à tous.
 
Je vous annonce la naissance de mon premier robot et vous présente :
 
KRT1 (Prononcez Crétin !).
 
KRT1 est capable d'avancer, reculer, tourner à droite ou à gauche et, bien sûr stopper.
 
En plus de ces instructions de déplacements KRT1 sait obéir à quelques ordres simples.
 
Pour communiquer avec KRT1 plusieurs méthodes sont possibles :
Par les touches de sa page Web associée.
Par écrit sur cette même page Web.
Par la voix (Il faut que KRT1 soit assez proche car il est un peu sourdingue).
 
KRT1 voit et peut montrer ce qu'il voit.
KRT1 écoute et parle, il peut dialoguer.
KRT1 écrit ce qu'il dit mais apparemment il est pour la réphorme de l'ortograffe.
KRT1 est mal coiffé.
KRT1 sait se promener seul sans se cogner systèmatiquement la tronche dans les murs.
KRT1 assume son nom (Il n'a pas eu le choix, je le lui est imposé).
KRT1 reconnait les couleurs rouge et jaune ainsi que les points de lumière.
KRT1 peut jouer à "Cherche la baballe !".
KRT1 n'a pas de cerveau positronique.
KRT1 aime le chocolat mais n'y a pas droit car il n'a pas de bras.
KRT1 approche de son maître pour peu que celui-ci porte un nez rouge de clown.
KRT1 aime la musique du générique de la série Star Trek.
KRT1 énerve ma femme (Vire moi ce truc), amuse ma petite fille (C'est 'ligolo' Papy) et effraie le chat (Miaou).
KRT1 n'est pas beau mais il ne faut pas le lui dire.
KRT1 et moi aimons la bonne bière (Surtout moi).
KRT1 connait les 3 lois de la robotique mais s'en cogne royalement.
KRT1 n'apprécie pas qu'on lui parle en anglais (Il est vrai qu'ils nous ont quand même brulé la Jeanne).
 
En général KRT1 est respectueux mais il peut parfois être désobéissant et/ou grossier.
 
KRT1 est encore et sera toujours en phase d'apprentissages et réglages. Je lui apprends régulièrement de
nouveaux mots avec les réponses/actions associées (Je souhaite quand même qu'un jour il se rende vraiment utile).
 
Bref, KRT1 est loin d'être parfait mais je commence à bien aimer ce p'tit con.
 
 
Ses caractéristiques physiques :
 
KRT1 pèse 985 grammes, il mesure 20 cm de haut 23 cm de long et 18 cm de large.
Son IMC est de 24,625 : il est en limite du surpoids...
 
Il est composé de :
1 chassis équipé de 2 roues motorisées alimentées par 4 piles de 1,5v et 1 roue folle-dingue.
1 Rapberry Pi 3 lui servant de cerveau (Alimenté par une batterie de recharge pour portable).
1 caméra pour Raspberry montée sur une articulation "pan-tilt et 2 servos"
1 microphone usb.
1 haut parleur branché sur Jacques.
2 capteurs d'ultra-sons.
3 leds.
1 buzzer.
Des breadboards, des résistances et autres machins/bidules électroniques, des jumpers.
Un bout de planche de récupération recoupée et percée par moi même avec mes mimines.
De la quincaillerie, des scratchs auto-collants, un peu de fil de nylon, une paille.
De la ficelle et du papier... Ah non, ça c'est pour des marionnettes.
 
 
Ses caractéristiques intellectuelles :
 
KRT1 fontionne sur un Raspberry Pi 3 avec un Linux Rasbian Pixel.
Le programme principal de KRT1 est écrit en Python.
 
Les installations complémentaires nécéssaires et suffisantes sont :
WEB.PY pour la communication.
VLC pour la diffusion du flux vidéo.
OpenCV pour la reconnaissance visuelle.
PyAudio pour la gestion du son.
Pico TTS pour parler.
Et SpeechRecognition STT pour la reconnaissance vocale (BING).
 
Fichiers créés par moi tout seul avec l'aide de multiples sites Internet.
'THE' fichier Python ( Environ 1200 lignes ).
Un fichier HTML comprenant un soupçon de JavaScript.
Un fichier CSS.
 
Et enfin, quelques fichiers musicaux pour le fun. 
 
 
Pour finir voici quelques photos de KRT1 et de son interface de communication :
 
Fichier joint  KRT1-1.jpg   109,86 Ko   153 téléchargement(s)
Fichier joint  KRT1-2.jpg   111,58 Ko   130 téléchargement(s)
Fichier joint  KRT1-3.jpg   75,05 Ko   136 téléchargement(s)
Fichier joint  KRT1-4.jpg   28,1 Ko   136 téléchargement(s)
Fichier joint  KRT1-5.jpg   32,05 Ko   138 téléchargement(s)
Fichier joint  KRT1-6.jpg   62,64 Ko   161 téléchargement(s)
 
Voili-Voilà... C'est tout pour le moment.
(Je vais tenter de me lancer dans d'autres réalisations).
 
 
Didier.
(A bientôt, peut-être)
 

Je me présente : Didier...

11 février 2017 - 04:47

Bonjour à tous.
 
Depuis que j'ai découvert, il y a quelques semaines, ce site et son forum je lis régulièrement
les différentes échanges et trouve cela intéressant.
 
J'ai donc décidé de m'inscrire et comme il est d'usage je me présente.
 
Mon prénom : Didier.
 
Mon parcours :
Naissance.
Pleurs et biberons.
Crêche.
Scolarité.
Service national.
Début d'activité salariée (Chiffres et gestion).
Mariage.
Mon premier ordinateur : un ZX81 (1ko de mémoire !) que je possede toujours.
  (Il sera suivi d'un C64 puis de plusieurs PC tournant sous DOS puis Windows).
Printemps, été, automne, hiver, printemps, été, automne, hiver, ...
 
Tiens ! Et si j'essayais de construire des robots ?
 
J'aime bien les robots parce que :
Plus jeune j'ai vu Goldorak à la télé.
Plus tard j'ai lu du Asimov.
Et plus recemment j'ai découvert le Raspberry Pi.
 
C'est bon là comme présentation, ça va ?
 
Je vais donc de ce pas créer un nouveau message pour vous présenter ma première réalisation
plus ou moins aboutie...
 
 
Didier.
(A bientôt, peut-être)