# \[POO\]\[Ada\] Path Finding sur un arbre N -aire d'activité : comptable et annexe

**URL:** <https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528>\
**Category:** Programmation\
**Created:** [Mai 3, 2021, 2:24 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528 "2021-05-03T02:24:45Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 3, 2021, 2:24 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/1 "2021-05-03T02:24:45Z")

</div>

Bonjour !  
J’arrive à l’étape décisive du développement de mon programme.  
En effet, je dois implémenté un Path\_Finding.  
A\* pour être précis.  
C’est pas tant A\* qui m’inquiète le plus, mais la génération des successeur et l’heuristique qui va de paire pour exploiter A\*.

Avant de me lancer dans ce développement je voulais vous présenter un projet level 10 (dans la classification des sytème). Son petit nom dans cette version est adaline.  
Le programme est écrit avec Ada comme vous le pensiez.  
J’utilise la bibliothèque REM\_NN\_Wrapper de PramgARC qui implémente un réseau de neurone.

Ce programme vous permettra de créer des objets parmis la 10ne de classes disponible.  
Les objet sont gérés par un arbre N - air.  
Tout objet peut contenir tout autre objet.  
Il est possible en plus d’ajouter jusqu’à 4 attributs supplémentaire à un objet.  
Les attributs peuvent être de type :

- boolean
- integer
- float
- string

Le programme est téléchargeable sur [sourceforge.net](http://sourceforge.net) :  
[Adaline level 10](https://sourceforge.net/projects/level10/)

Si je vous adresse ce message c’est pour vous laisser aujourd’hui la possibilité d’implémenter vous même les éléments manquant selon votre entendemment.

J’allais oublier ; La version corespondante à l’objet de ce message est la 1.2.1pre-alpha.

Good luck.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 3, 2021, 2:42 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/2 "2021-05-03T02:42:32Z")

</div>

En espérant que ce programme vous séduise, voici le petit HOWTO rédigé à l’attention des utilisateurs :

```
Quick start :
Do ulimit -s unlimited or other value
-----------------------------------------------------

Control keys :
-----------------------------------------------------
Ctrl+A to save
Ctrl+P to list prevision object in list
Ctrl+O to list next object in list
Ctrl+L to refresh screen
-----------------------------------------------------
quit with Ctrl+D.

You can reload your Prehander.txt file.

-----------------------------------------------------
add TRUE at the end off command line if you want call
network train in reuse mode.

-----------------------------------------------------
give the Result Filename at the command line ;

```

Default is Prehander.txt  
Neural network :

- you must write a samples set, to fix the network geometry to words size \* line width

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 3, 2021, 11:12 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/3 "2021-05-03T11:12:22Z")

</div>

Bonjour,  
J’ai corrigé deux ou trois erreur/oublis ; Du coup j’ai une une floppé de problème.  
J’ai corrigé vite fait mais l’idéal serait de réécrire, pour les courageux, dans la procédure read de chaque classe dans les paquet prehand-class-\*\_class.adb, les lecture de chaîne qui sont faite directement dans la variable cible.

Donc l’idéal serait de lire une variable de cette manière :

```
declare
       chaine : wide_string := W_Io.Get_Line(File);
begin
       Wide_Fixed.Move(chaine, var);
end;

```

Du coup j’ai posté un nouveau paquet sur [sourceforge.net](http://sourceforge.net) : Adaline\_level\_10-1.2.1alpha\_pre.tgz.  
Subtile nuance ; La aussi je me suis gouré.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 3, 2021, 11:25 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/4 "2021-05-03T11:25:47Z")

</div>

Autre chose, j’ai oublié d’exposer le fonctionnement de base :

- la commande «&nbsp;switch INDEX&nbsp;» permet de passer de l’objet courant à l’objet indexé INDEX.

- la command «&nbsp;list&nbsp;» permet de lister les objets contenus dans l’objet courant ; Ctrl+O pour l’objet suivant ; Ctrl+P pour l’obkjet précédent.

- la commande «&nbsp;parent&nbsp;» permet de revenir à l’objet parent.

- la command «&nbsp;print&nbsp;» affiche l’objet courant.

- la commande «&nbsp;search NAME&nbsp;» permet d’aller à la première occurance d’un objet nommé NAME.

- la commande «&nbsp;help&nbsp;» permet d’avoir de l’aide.

- la commande «&nbsp;help TAG\_NAME&nbsp;» permet d’avoir de l’aide pour la creation d’un objet de type TAG\_NAME.

- la commande «&nbsp;atribute name=value&nbsp;» permet d’ajouter un attribut typé à l’objet courant.

- la commande «&nbsp;dump&nbsp;» n’est pas implémenté.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 5, 2021, 11:02 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/5 "2021-05-05T11:02:55Z")

</div>

Bonjour,

Juste pour vous dire ;

J’ai uploadé une archive avec les correction qui s’imposaient. La version 1.2.4b.

J’ai rédigé une petite release note dans laquel je me suis trompé.

La release note indique que le réseau de neurone entre en periode d’apprentissage après 16 requettes.  
En fait c’est 8.

L’index est bien à 16 à ce moment là mais comme j’ajoute deux sample à chaque requête…

Merci pour votre compréhension.  
Veuillez m’excuser pour la confusion.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 5, 2021, 5:54 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/6 "2021-05-05T17:54:37Z")

</div>

Je vous parles deux secondes du réseau de neurones.  
Il fait office d’agent de dialogue.  
toute les 8 requête donc il entre en période d’apprentissage.  
Il connait le beaba de l’agèbre de bool.  
il apprend, en tout cas il utilise avec précision le noveau vocabulaire.  
il sais de quoi il parle dans la mesure où on lui parle concrètement de quelque chose de réel.  
il sais ce que apprendre et sais ce que répondre et interroger.

Bien sûr ce qu’il sait dépend directement de l’ensemble d’exemple.  
Je me suis appliqué trois mois pour faire la version actuelle.  
il faut pour entamer le dialogue, utiliser le maximum de ses mots et introduire petit à petit un autre dialogue.

Donc l’initialisation est minimale.

J’ai commencé l’apprentissage de la bible sur une machine actuellement à l’arrêt mais je ferai passer le réseaux lorsque l’apprentissage sera suffisant.  
Ceci dit c’est très long.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 6, 2021, 10:30 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/7 "2021-05-06T10:30:02Z")

</div>

Bonjour,

En espérant que vous me permétiez la question.  
J’ai eu des difficulté à sauvegarder pour restaurer un arbre N-air.  
Depuis j’ai constaté plusieurs fois qu’il y avait un problème.  
Comme j’ai éllaboré l’algo moi même, je vousdrais vous le soumettre pour vérificartion.

voici la sauvegarde :

```
procedure Save_Object (Object : Abstracted_Access;
                          File : W_Io.File_Type;
                          Index : Natural := 0) is
      O : Abstracted_Access := Object;
      New_Index : Natural := Index;
   begin

      O.all.Write(File);

      for I in 1..Index-2 loop
         W_Io.Put_Line(File, Wide_Character'Val(7) & "");
      end loop;

      if not Is_Empty(O.Vector) then

         for I in 1..Last_Index(O.Vector) loop
            declare
               E : constant Abstracted_Access :=
                 Element(O.Vector, I);
            begin

               Save_Object(E, File, New_Index+1);

            end;
         end loop;

      end if;

   end Save_Object;

```

Le caractère bell ici improbable dans les données est utilisé pour la gestion de la restaurationde l’arbre.

Merci pour votre expertise. S’il vous plait.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 6, 2021, 6:30 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/8 "2021-05-06T18:30:27Z")

</div>

> [@anon30990328](#):
>
> ```auto
> procedure Save_Object (Object : Abstracted_Access;
> File : W_Io.File_Type;
> Index : Natural := 0) is
> O : Abstracted_Access := Object;
> New_Index : Natural := Index;
> begin
> 
> O.all.Write(File);
> 
> for I in 1..Index-2 loop
> W_Io.Put_Line(File, Wide_Character'Val(7) & "");
> end loop;
> 
> if not Is_Empty(O.Vector) then
> 
> for I in 1..Last_Index(O.Vector) loop
> declare
> E : constant Abstracted_Access :=
> Element(O.Vector, I);
> begin
> 
> Save_Object(E, File, New_Index+1);
> 
> end;
> end loop;
> 
> end if;
> 
> end Save_Object;
> 
> ```

Je viens de modifier, parce qu’en vérifiant, ça marchais pas ;

```
 procedure Save_Object (Object : Abstracted_Access;
                          File : W_Io.File_Type;
                          Index : Natural := 0) is
      O : Abstracted_Access := Object;
      New_Index : Natural := Index;
   begin

      O.all.Write(File);

      W_Io.Put_Line(File, Wide_Character'Val(7) & "");

      if not Is_Empty(O.Vector) then

         for I in 1..Last_Index(O.Vector) loop
            declare
               E : constant Abstracted_Access :=
                 Element(O.Vector, I);
            begin

               Save_Object(E, File, New_Index+1);

            end;
         end loop;

         for I in 1..Index loop
            W_Io.Put_Line(File, Wide_Character'Val(7) & "");
         end loop;

      end if;

   end Save_Object;

```

Ca semble aller mieux, peut-être que j’ai déjà fais ceci et il y a autre chose.  
Je vais poursuivre l’utilisation et vérifier l’état.

---

<div class="post-metadata">

**Author:** ![anon30990328](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/aeb1de/32.png) [@anon30990328](https://www.debian-fr.org/u/anon30990328)\
**Post date:** [Mai 9, 2021, 5:02 UTC](https://www.debian-fr.org/t/poo-ada-path-finding-sur-un-arbre-n-aire-dactivite-comptable-et-annexe/84528/9 "2021-05-09T17:02:50Z")

</div>

Re- bonjour.  
Je me demandais, peut - être êtes vous un peu timide sur ce forum.

Volià, ce soir je m’interroge sur le bien fondé de poursuivre ce programme tel qu’il est.

A t - il un interrêt quelconque ?  
Faut - il le réécrire ?  
Quelqu’un veux t -il me l’acheter ?  
Peu mieux faire ? Comment ?

Des question… ?
