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 :
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.
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
you must train the network with the max epochs and a value for converged.
eventualy you must to fix reused condition.
– detail implementation
You can create the following classes :
animal
universe
contact
event
note
saved account
personal account
entpise account
car
house
content
activity
Deal (line) only 1xxxx and 2xxxx account num have states effects.
planning
for this class you can try « help NAME » where name is class name.
Implemented command
help [ CLASS ] to obtain CLASS help
create ARG1 … ARGN, … to create an object
list to list the current content of current object
switch INDEX to switch to object indexed INDEX
parent to back to parent.
print to print the current object
search NAME to search the 1st occurancy of object named NAME
Ctrl-? command :
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
Ctrl+D to quit
command line :
bin/adaline [ FILENAME [ BOOL ] ]
where FILENAME is the objects tree file
where BOOL is reused additional parameters to train reused network between FALSE | TRUE
you must eventualy run ulimit -s LIMIT before adaline call.
the file prehander-listing containe the adaline entered commands.
the Data/Human-Lexic.txt is the lexic file.
the Data/samples-set.txt is the samples set file.
the adaline.shared.sh_reused file is the persistant reused internal parameter after the network trainning.
the adaline-human_dialog.wgt is the neural network obtained with PragmARC.REM_NN_Wrapper. from ProgAda developpers.
to fix the neural network and others value of program, you can to edit the src/lib/adaline-shared.ads file.
to develop classes you can see the src/lib/prehander-classes* files ; in this case you must to edit the adaline-main.ads and adaline-main.adb file.
Fonctionment :
the natural language entry is read from input/command line to be interpreted by neural network.
the internal result is added with the input.
the output/Error is the response of neural network.
the response/internal is the response of output/error line.
At the 128 request, the network enterring in train period ; The counter renew at 1.
Structure :
the object tree is N-air tree.
the state is result of deal traitment.
the accounting list is the deal list in activity object.
– Global Read do this :
—> at the left_line = 0 the line is printed begining at the top of left_line.
the state period is between from the first deal line in the activity object to the last deal line in this same activity object.
usage :
you can create this : (an object can contain all another object.
universe
animal
house
content
personal account
saved account
enteprise account
contact
car
activity
event
planning
deal
deal
deal
…/…
the acc_line can be placed in account object.
the deal can must be placed in activity ;
Semantics :
the deal in is teh depense
the deal out is the recet
the tva in is the tva in
the tva out is the tva out
the result is HT.
you must to substract or to add the TVA to the result.
– Attribut –
you can create four attribut by object.
use attribute command (ex : attribute Name,Name,Name=value).
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 : Adaline_level_10-1.2.1alpha_pre.tgz.
Subtile nuance ; La aussi je me suis gouré.
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.
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.
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.