Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1576 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5
Auteur Sujet :

[Ada][Topic Unic][Open Source] Je fais péter mes codes.

n°1981701
Profil sup​primé
Posté le 07-04-2010 à 18:06:36  answer
 

Reprise du message précédent :

GrosBocdel a écrit :

ok, sur une autre machine ça passe
 bonjour monsieur
-> quels dévouement obstinée abandonnant
 [:ramones]


[:powa]

mood
Publicité
Posté le 07-04-2010 à 18:06:36  profilanswer
 

n°1982944
Profil sup​primé
Posté le 11-04-2010 à 15:09:16  answer
 

Bonjour
 
Voici prophet-server-5.1.2alpha.tar.gz pour Gnu/Linux ; C'est la génération 5 exploitant un graphe en cours d'intégration dans la génération 0.0.4alpha, le système client/serveur mais le serveur ne fonctionne pas. Seule la console de login en local est disponible. Pour l'arrêt, j'ai oublié, de mémoire, echap pour sortir de la console. Au pire faite Ctrl_C.  [:dawa_neowen]
 
 
 
La version pour Windows, mais marche pas chez moi. prophet-server-5.1.2alpha.zip


Message édité par Profil supprimé le 11-04-2010 à 16:47:41
n°1985070
Profil sup​primé
Posté le 17-04-2010 à 13:58:41  answer
 

Salutations,
 
Voici prophet-server-5.1.2alpha avec quelque correction pour un meilleur dialogue.
 
Pour Windows, sources et binaire prophet-51.2beta.zip
 
Toujours pas de documentation. Désolé, je suis en wacances.


Message édité par Profil supprimé le 17-04-2010 à 13:59:01
n°1985218
Profil sup​primé
Posté le 18-04-2010 à 13:56:30  answer
 

Voici la release de Prophet-5.1.2 pour Windows Prophet-5.1.2release.zip sources + exécutable, mais recompilez tout de même, j'ai oublié de la faire.
 
Vous n'avez droit qu'à une session ou le choix de perdre tout votre travail d'apprentissage.
Avec cette version les phrases en sortie son liées aux phrases en entrée et celles en entrée à celles en sortie.
 
il faut maintenant attendre l'inspiration pour progresser  :D  
 
Good luck !

n°1997932
Profil sup​primé
Posté le 01-06-2010 à 13:25:52  answer
 

  Bonjour.
   
   Je change un peu de sujet pour vous présenter ou représenter Harmonie.
 
Harmonie est un compositeur-interpréteur virtuel pour instrument midi.
Le projet est Hébergé sur Sourceforge, mais voici la dernière version ::= hamonie-200-0a.zip
Ce programme est écrit pour les plate-formes Linux avec Ada et un petit pout de C.

n°2001568
Profil sup​primé
Posté le 14-06-2010 à 19:09:28  answer
 

Bonjour, je fais bref.
C'est un programme en court de développement.
In Virtual Composer pour instrument Midi.
J'aurais aimé écrire un prog pour General Midi Instrument, mais malheuresement, mon propre synthé, ne l'est pas.
Alors, voici un programme spécifique Pour le Radias rack de Korg. Il n'est pas exclu qu'il fonctionne pour d'autre instrument.
Tout de suite, les sources pour Linux ::= mutan-000a-5
nécessite l'installation des bibliothèques porttime et portmidi.
Il est parfois un peu capricieux, mais on s'y fait.
N'hésitez pas à lire un bout des sources en case de besoin. Au pire, envoyez moi un Mp.

n°2002734
Profil sup​primé
Posté le 18-06-2010 à 12:14:49  answer
 

Ah ben oui, 5 c'était il y a quelques temps déjà...
Voici la 11 ::= mutan-000a-11src+bin
J'ai oublié de stripper l'exécutable.
On ne produit toujours pas de musique. Enfin, quelques sons...
Un bref fichier TODO accompagne les sources pour vous guider.


Message édité par Profil supprimé le 18-06-2010 à 12:15:04
n°2004760
Profil sup​primé
Posté le 25-06-2010 à 13:07:39  answer
 

Ah, ben oui, 11 c'était il y a quelques temps déjà.... [:dawa]
Mutan quand tu nous tiens.
Voici la documentation du soft dans le fichier TODO et les dernières sources ::= mutan-000a-016.tar.gz 1.2 Mo
J'ai synchronisé les timbre normalement, j'ai corriger quelque erreur, j'ai découvert des bugs que j'ai oublié de signaler dans la doc en fait.
Ce programme est carrément bluffant d'un point de vue technique d'écriture de musique. [:powa]
A+

n°2018331
Profil sup​primé
Posté le 22-08-2010 à 16:21:02  answer
 

Bonjours,
Je viens vous livrer la dernière mouture en matière de traitement du langage naturel par réseaux de neurones artificiels.
Cette nouvelle implémentation architecture un système multi-réseaux.  
Voici les sources Numeric Prescience_42-1.0.0release, pour linux.
Pou compiler, placez vous dans le répertoire et lancez "gnatmake -gnatW8 main -aI PragmARC"
 
Pour adapter ces source à Windows, il vous suffis de changer dans le fichier main.adb :
character'val(10) en character'val(13)
et system(C.To_C("clear')) en system(C.TO_C("cls" ));
 
Vous êtes limité dans le fichier Intelligent_Desing à une longueur de phrase de 15 mots.
Et la pile de réseaux et fixé à 20 dans le fichier Intelligent_Desing.adb
 
Je teste moi même ce nouveau système qui marche à la main et je n'ai pas encore les résultats.
 
 
Comment ça fonctionne (ou pas) ?
 
à chaque requête qui constitue une réponse on interroge le réseaux suivant en décrémentant de 20 à 1 et on stocke le résultat d'une part pour le donner en donnée avec la réponse suivante à l'itération suivante et d'autre part pour le donner a la couche réseau suivante.
Toute les minute si le réseau a reçu une requête il passe en phase d'apprentissage.
Ainsi vous pouvez lancer 20 requête par minute sans avoir de délais d'attente. Mais si le réseau suivant est en phase d'apprentissage, la traversée des couche est interrompu.
 
Voici le code de la section principale ::=  
 

Code :
  1. loop
  2.         accept Compute(Data : in T_Lang_Array;
  3.                        Response : out T_Lang_Array) do
  4.            Table2register(Data, Input);
  5.  
  6.            for I in Section..T_Layer_Id'Last loop
  7.               select
  8.                  Brain(I).Respond(Input, Output);
  9.                  Input := Output;
  10.               or
  11.                  delay 1.0;
  12.                  exit;
  13.               end select;
  14.            end loop;
  15.            if Section > 1 then
  16.               Section := Section - 1;
  17.            else
  18.               Section := T_Layer_Id'Last;
  19.               end if;
  20.               Register2table(Output, Response);
  21.         end Compute;
  22.      end loop;


donc , on voie dans le or delay de l'accept de compute que l'on fait un exit, il suffirait de supprimer cet exit pour simplement sauter une couche au lieu de sortir.
 
Good luck.


Message édité par Profil supprimé le 22-08-2010 à 16:31:46
n°2018359
Profil sup​primé
Posté le 22-08-2010 à 20:58:49  answer
 

juste pour vous dire que justement dans le petit bout de code ci-dessus, il y a une erreur.
 
Je voulais écrire "for I in Section..T_Layer_Id'First loop", ligne 6.

mood
Publicité
Posté le 22-08-2010 à 20:58:49  profilanswer
 

n°2018363
Profil sup​primé
Posté le 22-08-2010 à 21:33:49  answer
 


 
 
Et bien sûr, s'eut été trop beau que ça fonctionne....  :lol:  
 
En fait il faut écrire " for I in reverse T_Layer_Id'First..Section loop ".
 
Voilà, désolé hein.  :heink:

n°2019563
Profil sup​primé
Posté le 28-08-2010 à 11:18:37  answer
 

Bonjour, je travail donc sur l'I.A. dans le but de traiter automatiquement le langage naturel... Ce grâce aux réseaux de neurones formels.
Voici le code de la version 1.1.0alpha du programme 42 quelque peut remanié en un fichier "main" hors mis les bibliothèques.
Il s'agit d'exploité une pile de 8 réseaux de neurones dons les sorties successives sont les entrées des suivantes ou la dernière celle de la première.

Code :
  1. with Glossary, Generic_Extended_Binary_Code;
  2.  
  3. with Ada.Calendar, Ada.Command_Line;
  4. use Ada.Calendar, Ada.Command_Line;
  5.  
  6. with Ada.Text_Io, Interfaces.C;
  7. use Ada, Interfaces;
  8.  
  9. with PragmARC.Ansi_Tty_Control;
  10. use PragmARC.Ansi_Tty_Control;
  11.  
  12. with PragmARC.REM_NN_Wrapper;
  13. use PragmARC.REM_NN_Wrapper;
  14.  
  15. with PragmARC.Math.Functions;
  16.  
  17. procedure Main is
  18.  
  19.  
  20.   function System(Command : C.Char_Array) return C.Int;
  21.   pragma Import(C, System, "system" );
  22.  
  23.   package The_Glossary is new Glossary(125660);
  24.   use The_Glossary;
  25.  
  26.   package Coded_Word is new Generic_Extended_Binary_Code(T_Language);
  27.   use Coded_Word;
  28.  
  29.   Sentence_Length : constant Positive := 20;
  30.  
  31.   task Life_Cycle is
  32.      entry Receive(Char : in Character);
  33.   end Life_Cycle;
  34.  
  35.  
  36.  
  37.   subtype T_Layer_Id is Natural range 1..8;
  38.  
  39.   task type T_NN_Layer(Id : T_Layer_Id) is
  40.      entry Respond(Data : in Node_Set;
  41.                    Response : out Node_set);
  42.      entry Train(Data : in Node_Set;
  43.                  Response : in Node_set);
  44.   end T_NN_Layer;
  45.  
  46.   type Layer_Access is access T_NN_Layer;
  47.  
  48.   package Real_Math is new PragmARC.Math.Functions (Supplied_Real => Real);
  49.   package Real_Io is new Text_Io.Float_Io(Real);
  50.  
  51.   type T_Data is record
  52.      Data : Node_Set(1..T_Code'Length*Sentence_Length) := (others => 0.0);
  53.      Response : Node_Set(1..T_Code'Length*Sentence_Length) := (others => 0.0);
  54.   end record;
  55.  
  56.   type T_Data_Stack is array (1..8) of T_Data;
  57.  
  58.   task body T_NN_Layer is
  59.  
  60.      Date : Time := Clock + 240.0;
  61.      Data_Stack : T_Data_Stack;
  62.      Stack_Index : Natural := 0;
  63.  
  64.   begin
  65.      if Argument_Count > 0 and then
  66.        Argument(1) = "-i" then
  67.         declare
  68.            procedure Get_Init(Pattern : in Positive;
  69.                               Input : out Node_Set;
  70.                               Desired : out Node_Set) is
  71.            begin
  72.  
  73.               Input := (others => 0.0);
  74.               Desired := (others => 0.0);
  75.            end Get_Init;
  76.  
  77.            package NN_Init is new REM_NN
  78.              (
  79.               Num_Input_Nodes => Sentence_Length * T_Code'Length,
  80.               Num_Hidden_Nodes => Sentence_Length,
  81.               Num_Output_Nodes => Sentence_Length * T_Code'length,
  82.               Num_Patterns => 1,
  83.               New_Random_Weights => true,
  84.               Input_To_Output_Connections => False,
  85.               Weight_File_Name => "network" & T_Layer_Id'Image(Id) & ".wgt",
  86.               Get_Input => Get_Init
  87.               );
  88.  
  89.            use NN_Init;
  90.         begin
  91.            NN_Init.Train;
  92.            NN_Init.Save_Weights;
  93.         end;
  94.      end if;
  95.  
  96.  
  97.      loop
  98.         select
  99.            accept Respond(Data : in Node_Set;
  100.                           Response : out Node_set) do
  101.               declare
  102.                  procedure Get(Pattern : in Positive;
  103.                                Input : out Node_Set;
  104.                                Desired : out Node_Set) is
  105.                  begin
  106.  
  107.                     Input := Data;
  108.                     Desired := (others => 0.0);
  109.                  end Get;
  110.  
  111.  
  112.                  package NN is new REM_NN
  113.                    (
  114.                     Num_Input_Nodes => Sentence_Length * T_Code'Length,
  115.                     Num_Hidden_Nodes => Sentence_Length,
  116.                     Num_Output_Nodes => Sentence_Length * T_Code'length,
  117.                     Num_Patterns => 1,
  118.                     New_Random_Weights => False,
  119.                     Input_To_Output_Connections => False,
  120.                     Weight_File_Name => "network" & T_Layer_Id'Image(Id) & ".wgt",
  121.                     Get_Input => Get
  122.                     );
  123.  
  124.                  use NN;
  125.  
  126.               begin
  127.  
  128.                  NN.Respond(1,Response);
  129.  
  130.                  for I in Response'Range loop
  131.                     if Response(I) > 0.5 then
  132.                        Response(I) := 1.0;
  133.                     else
  134.                        Response(I) := 0.0;
  135.                     end if;
  136.                  end loop;
  137.               end;
  138.            end Respond;
  139.         or
  140.            accept Train(Data : in Node_Set;
  141.                         Response : in Node_set) do
  142.  
  143.               if Stack_Index < Data_Stack'Length then
  144.                  Data_Stack(Stack_Index + 1) := (Data, Response);
  145.                  Stack_Index := Stack_Index + 1;
  146.               end if;
  147.            end Train;
  148.         or
  149.            delay until Date;
  150.            if Stack_Index /= 0 then
  151.               declare
  152.  
  153.                  procedure Get_Expl(Pattern : in Positive;
  154.                                     Input : out Node_Set;
  155.                                     Desired : out Node_Set) is
  156.                  begin
  157.  
  158.                     Input := Data_Stack(Pattern).data;
  159.                     Desired := Data_Stack(Pattern).Response;
  160.                  end Get_Expl;
  161.  
  162.  
  163.                  package NN_Expl is new REM_NN
  164.                    (
  165.                     Num_Input_Nodes => Sentence_Length * T_Code'Length,
  166.                     Num_Hidden_Nodes => Sentence_Length,
  167.                     Num_Output_Nodes => Sentence_Length * T_Code'length,
  168.                     Num_Patterns => Stack_index,
  169.                     New_Random_Weights => False,
  170.                     Input_To_Output_Connections => False,
  171.                     Weight_File_Name => "network" & T_Layer_Id'Image(Id) & ".wgt",
  172.                     Get_Input => Get_Expl
  173.                     );
  174.  
  175.                  use NN_Expl;
  176.  
  177.  
  178.                  Desired, Response : Node_Set(1..Sentence_Length * T_Code'Length) :=
  179.                    (others => 0.0);
  180.                  RMS_Error : Real := 0.0;
  181.                  Error     : Real := 0.0;
  182.                  Converged  : constant real := 1.0/Real(Stack_Index);
  183.                  Max_Epochs : constant Positive := 2500;
  184.                  Epoch : Natural := 0;
  185.               begin
  186.  
  187.                  loop
  188.  
  189.                 All_Patterns :
  190.                     for Pattern in 1..Stack_index Loop
  191.                        NN_Expl.Train;
  192.                        NN_Expl.Respond (Pattern, Response);
  193.                        for I in Response'Range loop
  194.                           Error :=
  195.                             Error + (Data_Stack(Pattern).Response(i) - Response(i) );
  196.                        end loop;
  197.                        RMS_Error := RMS_Error + ((Error/Real(Response'Length)) ** 2);
  198.                        Error := 0.0;
  199.                     end loop All_Patterns;
  200.                     RMS_Error := Real_Math.Sqrt(RMS_Error / Real (Stack_index)) ;
  201.                     if Epoch > 50 and then
  202.                       ((RMS_Error <= Converged) or
  203.                       (Epoch >= Max_Epochs)) then
  204.                        exit;
  205.                     else
  206.                        Text_Io.Put(Position(Id, 1));
  207.                        Text_Io.Put ("Epoch" );
  208.                        Text_Io.Put (Integer'Image (Epoch) );
  209.                        Text_Io.Put(" => RMS_Error: " );
  210.  
  211.                        Real_Io.Put(RMS_Error);
  212.  
  213.                     end if;
  214.  
  215.                     Epoch := Epoch + 1;
  216.                  end loop;
  217.                  NN_Expl.Save_Weights;
  218.               end;
  219.            end if;
  220.            Stack_Index := 0;
  221.            Date := Clock + 60.0;
  222.         end select;
  223.      end loop;
  224.   end T_NN_Layer;
  225.  
  226.   procedure Table2register(Table : in T_Lang_Array;
  227.                            Register : out Node_Set) is
  228.      Code : T_Code;
  229.   begin
  230.      for I in 0..Table'length-1 loop
  231.         Code := Code_Of(Table(I+1));
  232.         for J in T_Code'Range loop
  233.            Register(I*T_Code'Length+J) := Code(J);
  234.         end loop;
  235.      end loop;
  236.   end Table2register;
  237.  
  238.   procedure Register2table(Register : in Node_Set;
  239.                            Table    : out  T_Lang_Array) is
  240.      Code : T_Code;
  241.   begin
  242.      for I in 0..Table'length-1 loop
  243.         Code := Register(I*T_Code'Length+1..I*T_Code'Length+T_Code'Length);
  244.         Table(I+1) := Item_Of(Code);
  245.      end loop;
  246.   end Register2table;
  247.  
  248.  
  249.   type T_Layer_Stack is array(T_Layer_Id'range) of Layer_access;
  250.  
  251.   task body Life_Cycle is
  252.      Word : String(1..64) := (others => Character'Val(32));
  253.      Last : Natural := 0;
  254.      Response, Line : T_Lang_Array(1..Sentence_length) := (others => 0);
  255.      Index : Natural := 0;
  256.      Input, Output : Node_Set(1..T_Code'Length*Sentence_Length);
  257.      Init : Boolean := False;
  258.      Brain : T_Layer_Stack;
  259.      Current_Layer : T_Layer_Id := T_Layer_Id'First;
  260.      Errno : C.Int;
  261.   begin
  262.      The_Glossary.Initialize("Lexique-355.txt" );
  263.      for I in brain'Range loop
  264.         Brain(I) := new T_NN_Layer(I);
  265.      end loop;
  266.      loop
  267.         select
  268.            accept Receive(Char : in Character) do
  269.               case Char is
  270.                  when Character'Val(8) | Character'Val(127) =>
  271.                     if Last > 0 then
  272.                        Word(Last) := Character'Val(32);
  273.                        Last := Last - 1;
  274.                     elsif Index > 0 then
  275.                        Line(Index) := 0;
  276.                        Index := Index - 1;
  277.                     end if;
  278.                  when Character'Val(10) =>
  279.                     begin
  280.                        if Last /= 0 then
  281.                           Line(Index+1) := Keyword(Word(1..Last));
  282.                           Index := Index + 1;
  283.                        end if;
  284.                        if Init and Index > 0 then
  285.                           Table2register(Line, Output);
  286.                           Init := False;
  287.                           --
  288.                           Brain(Current_Layer).Train(Input, Output);
  289.                           if Current_Layer < T_Layer_Id'Last then
  290.                              Current_Layer := Current_Layer + 1;
  291.                           else
  292.                              Current_Layer := T_Layer_Id'First;
  293.                           end if;
  294.                           --
  295.                        elsif Init then
  296.                           --
  297.                           for I in Current_Layer..T_Layer_Id'Last loop
  298.                              Brain(i).Respond(Input, Output);
  299.                              Brain(Current_Layer).Train(Input, Output);
  300.                              if Current_Layer < T_Layer_Id'Last then
  301.                                 Current_Layer := Current_Layer + 1;
  302.                              else
  303.                                 Current_Layer := T_Layer_Id'First;
  304.                              end if;
  305.                              Input := Output;
  306.                           end loop;
  307.                           if Current_Layer > T_Layer_Id'First then
  308.                              for I in T_Layer_Id'First..Current_Layer - 1 loop
  309.                                 Brain(i).Respond(Input, Output);
  310.                                 Brain(Current_layer).Train(Input, Output);
  311.                                 if Current_Layer < T_Layer_Id'Last then
  312.                                    Current_Layer := Current_Layer + 1;
  313.                                 else
  314.                                    Current_Layer := T_Layer_Id'First;
  315.                                 end if;
  316.                                 Input := Output;
  317.                              end loop;
  318.                           end if;
  319.  
  320.                           Register2table(Output, Response);
  321.                           --
  322.                           Init := False;
  323.                        else
  324.                           Input := (others => 0.0);
  325.                           Table2register(Line, input);
  326.                           Init := True;
  327.                        end if;
  328.                        Word := (others => Character'Val(32));
  329.                        Last := 0;
  330.                        Line := (others => 0);
  331.                        Index := 0;
  332.                     exception
  333.                        when Specification_Error =>
  334.                           null;
  335.                     end;
  336.                  when Character'Val(32) =>
  337.                     begin
  338.                        Line(Index+1) := Keyword(Word(1..Last));
  339.                        Index := Index + 1;
  340.                        Word := (others => Character'Val(32));
  341.                        Last := 0;
  342.                     exception
  343.                        when Specification_Error =>
  344.                           null;
  345.                     end;
  346.                  when others =>
  347.                     if Last < Word'Length then
  348.                        Word(Last+1) := Char;
  349.                        Last := Last + 1;
  350.                     end if;
  351.               end case;
  352.            end Receive;
  353.         or
  354.            delay 0.1;
  355.            Errno := System(C.To_C("clear" ));
  356.            Text_Io.Put(Position(21, 1));
  357.            Text_Io.Put("# " );
  358.            for I in Response'Range loop
  359.               Text_Io.Put(Image(Response(I)) & ' ');
  360.            end loop;
  361.            Text_Io.New_Line;
  362.            Text_Io.Put("# " );
  363.            if Index > 0 then
  364.               for I in 1..Index loop
  365.                  Text_Io.Put(Image(Line(I)) & ' ');
  366.               end loop;
  367.            end if;
  368.            if Last > 0 then
  369.               Text_Io.Put(Word(1..Last));
  370.            end if;
  371.            Text_Io.New_Line;
  372.            Text_Io.Put("Current_Layer : " & T_Layer_Id'image(Current_Layer));
  373.         end select;
  374.  
  375.      end loop;
  376.   end Life_Cycle;
  377.  
  378.  
  379.   Char : Character;
  380.  
  381.  
  382. begin
  383.  
  384.   loop
  385.      Text_Io.Get_Immediate(Char);
  386.      Life_Cycle.Receive(Char);
  387.   end loop;
  388.  
  389. end Main;


 
 
Voici une archive pour linux avec des réseaux initialisés : Numeric_Prescience_42-1.1.0alpha
Peut-être aurais vous besoin d'augmenter la taille de la pile d'exécution avec la commande "ulimit -s 'arg'" perso, j'ai pas cherché à comprendre et j'ai mis 'unlimited' en argument.
 
Les réseaux sont initialisés avec le texte suivant :

Citation :

du néant émergent deux finalités
du chaos à l ordre ou à la liberté
du choix mesuré de nos affinités
avec amour ou sans ambiguïté
il appartient à chacun de décider
du chaos faire sa destiné
dans l ordre ou libre être pour l éternité
une étoile un livre ou même une orchidée


 
Donc comme l'entée du réseau 1 est la sortie du réseau 8, entrez la dernière phrase en premier lieu pour constater le résultat, bien que j'ai du faire une faute de frappe. Vous devez valider par 2 appui sur "Enter" pour interroger le système. Enfin tout ça est écrit, en couleur.


Message édité par Profil supprimé le 28-08-2010 à 15:49:47
n°2020445
Profil sup​primé
Posté le 01-09-2010 à 16:21:29  answer
 

Bonjour, Voici une nouvelle implémentation de mon agent de dialogue, toujours basé sur l'exploitation des réseaux de neurones formels.
Ici vous trouverais une architecture multi-couche dont les couches intermédiaires sont cachées à l'utilisateur.
De plus un unique réseau est utilisé comme couche intermédiaire entre chaque couche.
Les couche cachées sont remplie avec une fonction aléatoires.
Voici les sources pour Gnu/linux ::= Numeric_Prescience_42.1.2.1alpha.tar.gz 343Ko contenant le Lexique 355
utilisez l'option "-i" au premier appel de 42 pour initialiser les réseaux.
J'ai scindé le main précédent en un main qui contient la console et une bibliothèque intelligent_desing qui contient l'exploitation des RdN.
Good luck!

n°2020476
Profil sup​primé
Posté le 01-09-2010 à 17:11:04  answer
 

Zut, ça n'a pas l'air de fonctionner comme je l'escomptais. :/
Désolé.

n°2020615
Profil sup​primé
Posté le 02-09-2010 à 05:17:09  answer
 

Voilà, en espérant me faire pardonner pour mon message précédent...
 
Donc, ce programme prend un ou deux paramètre à son appel.
Vous devez fournir la taille de la pile d'apprentissage qui détermine la cyclitude du système.
Si vous initialisé le système (au premier appel donc) vous devez précéder la taille de la pile de l'option "-i".
La taille de la pile peut varier entre 1 et un maximum défini par les capacités de votre machine.
 
Le programme fonctionne ou pas de la manière suivante :
vous devez dans un premier temps entrer un nombre de groupe de deux phrases identique à la taille de la pile.
Le système entre alors dans une première phase d'apprentissage. En suite, le compteur de pile  retourne à zéro.
Suite à cet apprentissage dont vous devez attendre la terminaison(1), vous pouvez interroger le système en entrant une phrase unique et en validant par deux pression sur la touche "entrée".
Vous pouvez également reprendre l'apprentissage du système en entrant de nouveau(x) groupe(s) de deux phrases.
Ici, l'apprentissage reprend immédiatement après avoir remplacé chaque nouvelles données.
 
(1) rien n'indique la terminaison, cependant durant l'apprentissage,  un certain nombre d'informations sont affichées en plus des deux '#' en bas de page ; Lorsque ces informations n'apparaissent plus vous pouvez poursuivre votre exploitation du système.
 
Note : il faut être patient pour l'apprentissage
 
Voici les sources pour Gnu/linux : numeric_prescience_42-1.2.3alpha.tar.gz à compiler avec un compilateur du langage Ada.
j'ai mis une option "-j2" dans la ligne de commande pour compiler dans le fichier Makefile, qui signifie que l'on a 2 processeur à disposition ou un dual... Adaptez le chiffre en fonction ou supprimez l'option si vous n'avez qu'un simple monoprocesseur.

n°2020768
Profil sup​primé
Posté le 02-09-2010 à 16:00:29  answer
 

Bonjour, je suis encore un poil désolé car j'ai fait une erreur d'estimation pour un chiffre relativement important dans le code.
Voici le fichier gzipé à changer : intelligent_desing.adb.gz
Il en résulte un apprentissage moins long, beaucoup moins.
Désolé encore pour les nombreuses manipulations.  :heink:
 
A oui, j'ai également oublié de vous dire comment on arrête le programme, alors, attention, il suffit d'un caractère "escape" et vous êtes dehors.


Message édité par Profil supprimé le 02-09-2010 à 16:10:48
n°2036331
Profil sup​primé
Posté le 16-11-2010 à 14:38:18  answer
 

Bonjour, voici du code, peut-être pour votre application, pour modéliser une interface MIDI, tout en cours de construction, mais cette fois, je fais du graphique.
 
Voici un screenshot de l'appli si ça vous intéresse..
 
http://dl.toofiles.com/vaaoje/images/capture-pmcreator.png
Et les sources : pmcreator-0.0.0public.tar.gz sur GtkAda.

n°2040660
Profil sup​primé
Posté le 08-12-2010 à 08:52:41  answer
 

Bonjour, finalement, le projet ci-dessus s'appelle MidiSurf... Vous trouverez peut-être les dernières sources sur google code : MidiSurf  
J'ai fait un fichier TODO minimaliste.
Good luck !  :)

n°2050046
Profil sup​primé
Posté le 18-01-2011 à 23:48:42  answer
 

Bonjour,
 
 
 
Le programme suivant est une version mono poste d'exploitation des réseaux de neurones artificiel pour le traitement du langage naturel :
 

Code :
  1. -----------------------------------------------------------------
  2. -- Copyright (C) 2011 Numeric Prescience ; All right reserved. --
  3. -----------------------------------------------------------------
  4. -- Author  : Manuel De Girardi.                                --
  5. -- Date    : 2011/01/14.                                       --
  6. -- Version : Release.                                          --
  7. -----------------------------------------------------------------
  8.  
  9. with Np.Glossary;
  10. with Np.Generic_Extended_Binary_Code;
  11. with PragmARC.REM_NN_Wrapper;
  12. use PragmARC.REM_NN_Wrapper;
  13. with PragmARC.Math.Functions;
  14. with Ada.Direct_Io;
  15. use Np;
  16.  
  17. with Ada.Numerics.Float_Random;
  18.  
  19. with Text_Io, Ada.Characters.Latin_1;
  20. use Ada.Characters;
  21. with Ada.Unchecked_Deallocation;
  22. with Interfaces.C;
  23. use Interfaces;
  24. procedure Main is
  25.  
  26.   task Jushua is
  27.      entry Halt;
  28.      entry Receive(Pattern : in String);
  29.   end Jushua;
  30.  
  31.   task Console is
  32.      entry Initialize;
  33.      entry Receive(Char : in Character);
  34.      entry Receive(Pattern : in String);
  35.      entry Lock;
  36.      entry Unlock;
  37.      entry Info(RMS_Error : in Real; Percent : in Real);
  38.      entry Halt;
  39.   end Console;
  40.  
  41.   function System(Command : in C.Char_Array) return C.Int;
  42.   pragma Import(C, System, "system" );
  43.  
  44.   type String_Access is access all String;
  45.   procedure Free is
  46.      new Ada.Unchecked_Deallocation(String, String_Access);
  47.  
  48.  
  49.  
  50.   package The_Glossary is new Glossary(125660);
  51.   use The_Glossary;
  52.   Sentence_Length : constant Natural := 20;
  53.   subtype T_Sentence is T_Lang_Array(1..Sentence_Length);
  54.   package Coded_Word is new Generic_Extended_Binary_Code(T_Language);
  55.   use Coded_Word;
  56.  
  57.   Rand_Gen :
  58.     Ada.Numerics.Float_Random.Generator;
  59.  
  60.  
  61.   subtype T_Register is Node_Set(1..T_Code'Length*Sentence_Length);
  62.   package Real_Math is new PragmARC.Math.Functions (Supplied_Real => Real);
  63.   package Real_Io is new Text_Io.Float_Io(Real);
  64.   --package Register_Io is new Direct_Io(T_Register);
  65.   procedure Table2register(Table : in T_Lang_Array;
  66.                            Register : out Node_Set) is
  67.      Code : T_Code;
  68.   begin
  69.      for I in 0..Table'Length-1 loop
  70.         Code := Code_Of(Table(I+1));
  71.         for J in T_Code'Range loop
  72.            Register(I*T_Code'Length+J) := Code(J);
  73.         end loop;
  74.      end loop;
  75.   end Table2register;
  76.  
  77.   procedure Register2table(Register : in Node_Set;
  78.                            Table    : out  T_Lang_Array) is
  79.      Code : T_Code;
  80.   begin
  81.      for I in 0..Table'Length-1 loop
  82.         begin
  83.            Code := Register(I*T_Code'Length+1..I*T_Code'Length+T_Code'Length);
  84.               Table(I+1) := Item_Of(Code);
  85.         exception
  86.            when others =>
  87.               null;
  88.         end;
  89.      end loop;
  90.   end Register2table;
  91.  
  92.  
  93.   function String2table(Expr : in String) return T_Lang_Array is
  94.      Sentence : T_Sentence := (others => 0);
  95.      Prec : Natural := 0;
  96.      Index : Natural := 0;
  97.   begin
  98.      if Expr'length /= 1 then
  99.         for I in 2..Expr'length loop
  100.            case Expr(I) is
  101.               when Character'Val(32) =>
  102.                  begin
  103.                     Text_Io.Put("." );
  104.                     sentence(Index+1) := keyword(Expr(Prec+1..I-1));
  105.                     Index := Index + 1;
  106.                     Prec := I;
  107.                  exception
  108.                     when others =>
  109.                        null;
  110.                  end;
  111.               when others =>
  112.                  null;
  113.            end case;
  114.            exit when Index = Sentence'Length;
  115.         end loop;
  116.      end if;
  117.      if Index < Sentence'Length then
  118.         begin
  119.            sentence(Index+1) := keyword(Expr(Prec+1..Expr'last));
  120.            Index := Index + 1;
  121.            Text_Io.Put("Done" );
  122.         exception
  123.            when others =>
  124.               null;
  125.         end;
  126.      end if;
  127.      return Sentence;
  128.   end String2table;
  129.  
  130.   task body Jushua is
  131.      End_Of_Section, End_Of_Task : Boolean := False;
  132.      Data_stack : array (1..8*2) of T_Register :=
  133.        (others => (others => 0.0));
  134.  
  135.      Temp, Register : T_Register := (others => 0.0);
  136.  
  137.      Buffer : String_Access;
  138.      Output : String_Access := new String ' ("" );
  139.  
  140.      Sentence : T_Sentence;
  141.  
  142.      Reuse : Boolean := False;
  143.  
  144.   begin
  145.  
  146.      while not End_Of_Task loop
  147.         declare
  148.            procedure Get_Expl(Pattern : in Positive;
  149.                               Input : out Node_Set;
  150.                               Desired : out Node_Set) is
  151.            begin
  152.               Input := Data_Stack(Pattern*2-1);
  153.               Desired :=  Data_Stack(Pattern*2);
  154.            end Get_Expl;
  155.  
  156.  
  157.            package NN_Expl is new REM_NN
  158.              (
  159.               Num_Input_Nodes => Sentence_Length * T_Code'Length,
  160.               Num_Hidden_Nodes => Sentence_Length,
  161.               Num_Output_Nodes => Sentence_Length * T_Code'length,
  162.               Num_Patterns => Data_Stack'Length/2,
  163.               New_Random_Weights => not Reuse,
  164.               Input_To_Output_Connections => False,
  165.               Weight_File_Name => "network.wgt",
  166.               Get_Input => Get_Expl
  167.              );
  168.  
  169.            use NN_Expl;
  170.  
  171.  
  172.            Desired, Response : T_register := (others => 0.0);
  173.            RMS_Error : Real := 10.0;
  174.            Error     : Real := 0.0;
  175.            Converged  : constant real :=
  176.              0.125 + Real(Ada.Numerics.Float_Random.Random(rand_Gen))/1000.0;
  177.  
  178.  
  179.         begin
  180.            while not End_Of_Section loop
  181.               select
  182.                  accept Halt do
  183.                     End_Of_Task := True;
  184.                     End_Of_Section := True;
  185.                  end Halt;
  186.               or
  187.                  accept Receive(Pattern : in String) do
  188.                     Register := (others => 0.0);
  189.                     Table2register(String2table(Pattern), Register);
  190.                     for I in 2..Data_Stack'Length loop
  191.                        Data_Stack(I-1) := Data_Stack(I);
  192.                     end loop;
  193.                     Data_Stack(Data_Stack'last) := Register;
  194.                     End_Of_Section := True;
  195.                  end Receive;
  196.               or
  197.                  delay 0.0;
  198.  
  199.                  for Pattern in 1..Data_Stack'Length/2 Loop
  200.                     NN_Expl.Train;
  201.                     NN_Expl.Respond (Pattern, Response);
  202.                     Desired := Data_Stack(Pattern*2);
  203.                     for I in Response'Range loop
  204.  
  205.                        Error :=
  206.                          Error + (Desired(I) - Response(i) );
  207.                     end loop;
  208.                     RMS_Error := RMS_Error + ((Error/Real(Response'Length)) ** 2);
  209.                     Error := 0.0;
  210.                  end loop;
  211.                  NN_Expl.Save_Weights;
  212.                  RMS_Error :=
  213.                    Real_Math.Sqrt(RMS_Error / Real (Data_Stack'Length/2)) ;
  214.  
  215.                  if (RMS_Error <= Converged) then
  216.                     NN_Expl.Respond (8, Response);
  217.  
  218.                     for I in Response'Range loop
  219.                        if Response(I) >= 0.5 then
  220.                           Response(I) := 1.0;
  221.                        else
  222.                           Response(I) := 0.0;
  223.                        end if;
  224.                     end loop;
  225.  
  226.                     Register2table(Response, sentence);
  227.                     for I in Sentence'Range loop
  228.                        begin
  229.                           Free(Buffer);
  230.                           Buffer := new String ' (Output.all & Image(sentence(I)) & Character'Val(32));
  231.                           Free(Output);
  232.                           Output := new String ' (Buffer.All);
  233.                        exception
  234.                           when others =>
  235.                              null;
  236.                        end;
  237.                     end loop;
  238.                     Console.Receive(Output.all);
  239.                     Free(Output);
  240.                     Output := new String ' ("" );
  241.  
  242.                     Temp := Data_Stack(Data_Stack'last-1);
  243.  
  244.                     for I in 3..Data_Stack'Length loop
  245.                        Data_Stack(I-2) := Data_Stack(I);
  246.                     end loop;
  247.                     Data_Stack(Data_Stack'Last-1) := Response;
  248.                     Data_Stack(Data_Stack'last) := Temp;
  249.                     End_Of_Section := True;
  250.  
  251.                  else
  252.                     select
  253.                        Console.info(RMS_Error, (converged/RMS_Error)*100.0);
  254.                     or
  255.                        delay 0.0;
  256.                     end select;
  257.                  end if;
  258.  
  259.               end select;
  260.            end loop;
  261.         end;
  262.         End_Of_Section := False;
  263.         Reuse := True;
  264.      end loop;
  265.   end Jushua;
  266.  
  267.   task body Console is
  268.      Suspended, End_Of_Task : Boolean := False;
  269.      Line : String_access := new String ' ("" );
  270.      Buffer : String_Access;
  271.      Errno : C.Int;
  272.  
  273.      Input_Page_Stack : array (1..12) of String_Access;
  274.      Input_Window_Index : Natural := 0;
  275.      input_Page_Index : Natural := 0;
  276.      Output_Page_Stack : array (1..12) of String_Access;
  277.      Output_Window_Index : Natural := 0;
  278.      Output_Page_Index : Natural := 0;
  279.      Line_Count : Integer := 10;
  280.  
  281.      Learning_Info : String_Access := new String ' ("" );
  282.  
  283.   begin
  284.      accept Initialize;
  285.      while not End_Of_Task loop
  286.  
  287.         Errno := System(C.To_C("clear" ));
  288.         Text_Io.Put_line(Learning_Info.all);
  289.  
  290.         Text_Io.Put_Line("-----------------------------------  Output  ----------------------------------" );
  291.         Line_Count := 10;
  292.         if Output_Page_Index /= 0 then
  293.            for I in reverse 1..Output_Page_Index loop
  294.               exit when (Line_Count - ((Output_Page_Stack(I).all'Length/80) + 1)) < 1;
  295.               Line_Count := Line_Count - ((Output_Page_Stack(I).all'Length/80) + 1);
  296.               Output_Window_Index := Output_Window_Index + 1;
  297.            end loop;
  298.            for I in reverse 0..Output_Window_Index-1 loop
  299.               Text_Io.Put_Line(Output_Page_Stack(output_Page_Index - I).all);
  300.            end loop;
  301.         end if;
  302.         Output_Window_Index := 0;
  303.         if Line_Count > 0 then
  304.            Text_Io.New_Line(Text_Io.Count(Line_Count));
  305.         end if;
  306.         Text_Io.Put_Line("-----------------------------------  Input  -----------------------------------" );
  307.         Line_Count := 12 - ((Line.all'Length/80) + 1);
  308.         if Input_Page_Index /= 0 then
  309.            for I in reverse 1..Input_Page_Index loop
  310.               exit when (Line_Count - ((Input_Page_Stack(I).all'Length/80) + 1)) < 1;
  311.               Line_Count := Line_Count - ((Input_Page_Stack(I).all'Length/80) + 1);
  312.               Input_Window_Index := Input_Window_Index + 1;
  313.            end loop;
  314.            for I in reverse 0..Input_Window_Index-1 loop
  315.               Text_Io.Put_Line(Input_Page_Stack(Input_Page_Index - I).all);
  316.            end loop;
  317.         end if;
  318.         Input_Window_Index := 0;
  319.         if Line_Count > 0 then
  320.            Text_Io.New_Line(Text_Io.Count(Line_Count));
  321.         end if;
  322.         Text_Io.Put(Line.all);
  323.         delay 0.01;
  324.         select
  325.            accept Lock do
  326.               Suspended := True;
  327.            end Lock;
  328.         or
  329.            accept Receive(Char : in Character) do
  330.               case Char is
  331.                  when Latin_1.Del =>
  332.                     Buffer := new String ' (Line(1..Line'Length-1));
  333.                     Free(Line);
  334.                     Line := new String ' (Buffer.all);
  335.                     Free(Buffer);
  336.                  when Latin_1.LF =>
  337.                     Jushua.Receive(Line.all);
  338.                     if Input_Page_Index = Input_Page_Stack'Length then
  339.                        for I in 2..Input_Page_Index loop
  340.                           Input_Page_Stack(I-1) :=
  341.                             Input_Page_Stack(I);
  342.                        end loop;
  343.                        Input_Page_Index := Input_Page_Index - 1;
  344.                     end if;
  345.                     if Input_Page_Index < Input_Page_Stack'Length then
  346.                        Input_Page_Stack(Input_Page_Index+1) :=
  347.                          new String ' (Line.all);
  348.                        Input_Page_Index := Input_Page_Index + 1;
  349.                     end if;
  350.                     Free(Line);
  351.                     Line := new String ' ("" );
  352.                  when others =>
  353.                     Buffer := new String ' (Line.all & Char);
  354.                     Free(Line);
  355.                     Line := new String ' (Buffer.all);
  356.                     Free(Buffer);
  357.               end case;
  358.            end Receive;
  359.         or
  360.            accept Receive(Pattern : in String) do
  361.               if Output_Page_Index = Output_Page_Stack'Length then
  362.                  for I in 2..Output_Page_Index loop
  363.                     Output_Page_Stack(I-1) :=
  364.                       Output_Page_Stack(I);
  365.                  end loop;
  366.                  Output_Page_Index := Output_Page_Index - 1;
  367.               end if;
  368.               if Output_Page_Index < Output_Page_Stack'Length then
  369.                  Output_Page_Stack(Output_Page_Index+1) :=
  370.                    new String ' (Pattern);
  371.                  Output_Page_Index := Output_Page_Index + 1;
  372.               end if;
  373.            end Receive;
  374.         or
  375.            accept Info(RMS_Error : in Real; Percent : in Real) do
  376.               Free(Learning_Info);
  377.               Learning_Info := new String ' ("Learning : " &
  378.                                                Real'Image(Percent) & "% ; " &
  379.                                                "RMS_Error = " &
  380.                                                Real'Image(RMS_Error));
  381.            end Info;
  382.         end select;
  383.         while Suspended loop
  384.            select
  385.               accept Halt do
  386.                  Suspended := False;
  387.                  End_Of_Task := True;
  388.               end Halt;
  389.            or
  390.               accept Unlock do
  391.                  Suspended := False;
  392.               end Unlock;
  393.            end select;
  394.         end loop;
  395.      end loop;
  396.  
  397.   end Console;
  398.  
  399.   Char : Character;
  400. begin
  401.  
  402.   Initialize("Lexique-355.txt" );
  403.   Console.Initialize;
  404.   loop
  405.      begin
  406.         Text_Io.Get_Immediate(Char);
  407.         if char =  Latin_1.Esc then
  408.            Console.Lock;
  409.            Text_Io.New_Line;
  410.            Text_Io.Put("Quit? " );
  411.            Text_Io.Get_Immediate(Char);
  412.            if Char = 'y' or Char = 'Y' then
  413.               exit;
  414.            else
  415.               Text_Io.Put_line("Excelent!" );
  416.               Console.Unlock;
  417.            end if;
  418.         else
  419.            Console.Receive(Char);
  420.         end if;
  421.      exception
  422.         when others =>
  423.            null;
  424.      end;
  425.   end loop;
  426.   Jushua.Halt;
  427.   Console.Halt;
  428. end Main;


 
Dans le but de faire émerger le langage le programme doit recevoir lui même un programme linguistique.
Je suis actuellement en cours d'entrainement d'une instance de ce programme pour lequel j'ai pas mal de (comment dire) d'espérance.
Voici une archive pour Gnu/Linux du programme Jushua.
Ce programme génère un fichier qui est le réseaux de neurones ;
il ne prend pas d'argument en ligne de commande ;
J'utilise pour les réseaux de neurones artificiels la bibliothèque PragmARC
 
Question algo, donc en clair,
 
j'utilise un tableau de 16 registre pour stocker les pattern d'apprentissage.
Dans une boucle sans fin
   si il y a de nouvelles données,
       on les ajoute en fin de tableau
   si non
       on effectue un cycle d'apprentissage
       
       si l'apprentissage est terminé
          on interroge le réseau avec la dernière donnée entrée.
          on ajoute la réponse à la fin du tableau.
          on ajoute la dernière donnée à la fin du tableau.
fin;
 
 
 
(NB : à chaque ajout en fin de tableau, on décale le tableau vers le début.)
 
 
Voila, je passe ça, parce que c'est vraiment puissant à mon sens, et à la fois très simple à mettre en oeuvre.
 
Good luck.
 
 
 
edit : le paquet pour Windows : Jushua


Message édité par Profil supprimé le 19-01-2011 à 02:34:58
n°2051901
Profil sup​primé
Posté le 26-01-2011 à 09:43:26  answer
 

Bonjour,
 
Une variante de Jushua... Jushua2 consiste en l'exploitation de deux réseaux de neurones artificiels dans deux processus distincts qui s'appellent l'un l'autre.
 
Je fourni les sources plus le binaire pour Windows avec deux exemple de fichiers de données : Jushua2-0.0.0release.zip
 
Les fichiers de donnée contienne le même texte mais l'un à l'inverse de l'autre. Cad que les questions et réponses sont inversées d'un fichier à l'autre.
Ces fichier doivent contenir exactement 16 phrases de 21 mots.
Vous pouvez réduire ou augmenter tout cela en éditant les sources.
 
A la différence avec Jushua, l'interrogation du réseau s'effectue avec la première donnée de la pile, qui est décalé à chaque interrogation.
 
Je ne sais pas si ce programme a un intérêt, mais je planche.
 
Good luck !

n°2051904
Profil sup​primé
Posté le 26-01-2011 à 09:57:06  answer
 


 
Théoriquement, c'est ce qui était prévu, mais je me suis planté de source apparemment, et le 21 et un 20.
Puis l'expression n'est pas exacte ; c'est au moins 16 lignes de 20 mots maximum.
 
Désolé.


Message édité par Profil supprimé le 26-01-2011 à 10:02:59
n°2052035
Profil sup​primé
Posté le 26-01-2011 à 14:57:06  answer
 

Re-,
 
Bon, j'ai zutté grave sur ce coup de dev.
De multiple erreurs, j'ai corrigé l'histoire de la longueur max qui est bien 21 maintenant.
Mais plus gros, j'avais simplement fait n'importe quoi en fin d'apprentissage des réseaux.
 
Voila normalement quelque corrections... pour Windows,Jushua2-0.0.0release_rev1
 
J'ai corrigé également le innerante en inhérente dans les fichier d'exemple ainsi que l'espace de trop.
 
Je suis vraiment désolé pour ceux qui plancheraient déjà dessus.
Toutes mes excuses. :)

n°2052125
Profil sup​primé
Posté le 26-01-2011 à 17:54:13  answer
 

Fatche, j'ai tout de même écrit "inhérante".... [:prozac]

n°2052223
Profil sup​primé
Posté le 27-01-2011 à 10:05:40  answer
 

Bonjour, juste pour dire que la rev1 marche pas non plus.
Je vous passe les détails, je teste actuellement la rev2.

n°2052294
Profil sup​primé
Posté le 27-01-2011 à 11:44:51  answer
 

Voila, donc, Jushua2-0.0.0release_rev2 pour Windows, un programme exploitant deux réseaux de neurones artificiels dans le but de modéliser un agent de dialogue intelligent ; Voir plus si affinité.
J'ai considérablement remanié le code.
Si vous utilisez ce programme, sachez qu'à chaque appel les réseaux de neurone sont réinitialisé. Pour réutiliser les réseaux il vous faut éditer le fichier main.adb pour mettre l'initialisation de la variable "Reuse" à la valeur TRUE dans chacune des tache Jushua1 et Jushua2.
 
Le paquet pour Gnu/Linux dans 15 minutes. ::  Jushua2-0.0.0release_rev2.tar.gz
 
Si vous avez des question, n'hésitez pas, ici ou en mp.


Message édité par Profil supprimé le 27-01-2011 à 11:58:31
n°2052702
Profil sup​primé
Posté le 28-01-2011 à 14:51:54  answer
 

Hello !
 
 
Je dois dire tout de même que je me sent un peu comme un mongol sur ce topic, dans cette section, du fait d'être quasi seul à poster. Bref.
 
Je me suis dis que rapidement vous souhaiteriez quelque chose d'un interactif. Et moi sur tout, j'en ai besoin.  :D  
Donc, j'ai implémenté une nouvelle mouture de Jushua deux qui permet de l'interroger sans affecter la pile en plus de l'affectation de pile.
A présent, en ligne vous avec l'interrogation sans affectation de la pile.
Et, en entrant Alt+0 et entrée vous affectez la pile. Sources pour linux : Jushua2-0.0.1release.tar.gz
Pendent que j'y suis, pour terminer c'est escape.
Good luck.

n°2052821
breizhbugs
Posté le 28-01-2011 à 22:01:02  profilanswer
 


tiens je m'intercale, histoire que tu te fasses pas ban pour flood  :hello:  
L'idée de départ et la volonté de partage sont louables mais ça ne fait pas tout: code non commenté, ne montrant pas suffisamment simplement ce que l'on peut faire en ada, tes programmes sont trop abstraits, ils ne serviraient même pas aux débutants qui veulent apprendre le ada. Alors ne soit pas étonnés d'être seul...


---------------
Seul Google le sait...
n°2052843
Profil sup​primé
Posté le 29-01-2011 à 01:06:30  answer
 

breizhbugs a écrit :


tiens je m'intercale, histoire que tu te fasses pas ban pour flood  :hello:  
L'idée de départ et la volonté de partage sont louables mais ça ne fait pas tout: code non commenté, ne montrant pas suffisamment simplement ce que l'on peut faire en ada, tes programmes sont trop abstraits, ils ne serviraient même pas aux débutants qui veulent apprendre le ada. Alors ne soit pas étonnés d'être seul...


 
 
Merci pour la critique qui j'espère sera constructive.... Ce qui devrait.
 
Alors, je vais prendre les point un par un et je vais essayer de me montrer plus communautariste.
 
1/ pour les commentaires.... Si j'en mettait pas, c'est parce que je sais pas quoi mettre...
Je pense toujours qu'il peut pas y avoir plus clair qu'un bon code, même si je suis peut-être à une distance non nulle de ce que l'on peut appeller un bon code.
 
Pour l'exemple... Voici un code en construction que j'ai scrupuleusement commenté.... Et-ce que c'est ce qui est attendu, je ne sais pas  :??:  
Pour l'exemple...

Code :
  1. ----------------------------------------
  2. -- Joshua is an artificial intelligence.
  3. ----------------------------------------
  4. -- Author      : Manuel De Girardi
  5. -- Date        : 28/01/2011
  6. -- version     : devel.
  7. -- Description : On va essayer de traiter
  8. --               le langage naturel au
  9. --               niveau caractères en
  10. --               exploitant les RdN.
  11. ----------------------------------------
  12. with Lfa.Data_Types, Lfa.Fann, Lfa.Fann.Train_Data;
  13. use Lfa, Lfa.Data_Types, Lfa.Fann;
  14.  
  15. with Ada.Text_Io, Ada.Command_Line;
  16. use Ada;
  17.  
  18. procedure Main is
  19.  
  20.   package Fann_Text_Io is new Text_Io.Float_Io(Fann_Type);
  21.   -- pour les entrées/sorties texte du type Fann_Type;
  22.  
  23.   Max_Words : constant := 21;
  24.   Max_Chars_By_Word : constant := 26;
  25.  
  26.  
  27.  
  28.   type T_Register is array (1..8*Max_Chars_By_word*Max_words) of Fann_Type;
  29.   -- 32 mots de 26 caracters codés sur 8 bits.
  30.  
  31.   type Register_Access is access all T_Register;
  32.   -- les accès aux registres.
  33.  
  34.   subtype T_Str is String(1..Max_Chars_By_word*Max_words);
  35.   -- 32 mots de 26 caracters.
  36.  
  37.   type Str_Access is access all T_Str;
  38.   -- les accès aux chaînes T_Str.
  39.  
  40.   function Str2Reg(Buffer : in Str_Access) return Register_access is separate;
  41.   -- Routine pour convertir des T_Str en T_Register.
  42.  
  43.   function Reg2Str(Buffer : in Register_Access) return Str_Access is separate;
  44.   -- Routine pour convertir des T_Register en T_Str.
  45.  
  46.  
  47.  
  48.   procedure Txt2Fann(Source, Target : in String);
  49.   -- procédure de conversion de fichier texte vers fichier fann type.
  50.  
  51.   Buffer_Overflow : exception;
  52.   -- levée par Txt2Fann lorsque une ligne dépasse la longueur de T_Str.
  53.  
  54.  
  55.   procedure Txt2Fann(Source, Target : in String) is
  56.  
  57.      Input, Output : Text_Io.File_Type;
  58.      Line : String(1..T_Str'Length+1) := (others => Character'Val(32));
  59.      Last : Natural := 0;
  60.      Reg  : Register_Access;
  61.      Str  : Str_Access := new T_Str ' (others => Character'Val(32));
  62.      Line_Count : Text_Io.Count := 0;
  63.   begin
  64.      Text_Io.Open(Input, Text_Io.In_File, Source);
  65.      -- D'abord, on compte le nombre de ligne lignes.
  66.      while not Text_Io.End_Of_File(Input) loop
  67.         Text_Io.Get_Line(Input, Line, Last);
  68.         Line_Count := Text_Io."+"(Line_Count, 1);
  69.      end loop;
  70.  
  71.      Text_Io.Reset(Input);
  72.  
  73.      Text_Io.Create(Output, Text_Io.Out_File, Target);
  74.      -- on écrit la géométrie du réseau dans le fichier d'entrainement.
  75.      Text_Io.Put(Output, positive'Image(Positive(Line_Count)/2));
  76.      Text_Io.Put(Output, Positive'Image(8*Max_Chars_By_word*Max_words));
  77.      Text_Io.Put(Output, Positive'Image(8*Max_Chars_By_word*Max_words));
  78.      Text_Io.New_Line(Output);
  79.  
  80.      while not Text_Io.End_Of_File(Input) loop
  81.         Text_Io.Get_Line(Input, Line, Last);
  82.         if Last = Line'Length then
  83.            -- Si la ligne dépasse la longueur d'un T_Str
  84.            -- on lève l'exception buffer_overflow;
  85.            raise Buffer_Overflow;
  86.         end if;
  87.         Str.all := Line(1..Line'Last-1);
  88.         Reg := Str2Reg(str);
  89.         for Bit in Reg'Range loop
  90.            Fann_Text_Io.Put(Output, Reg(Bit), 1, 1);
  91.            Text_Io.Put(Output, Character'Val(32));
  92.         end loop;
  93.         Text_Io.New_Line(Output);
  94.         Line := (others => Character'Val(32));
  95.      end loop;
  96.      Text_Io.Close(Output);
  97.      Text_Io.Close(Input);
  98.   end Txt2Fann;
  99.  
  100.   Train_Filename : constant String := "fann_train.txt";
  101.   -- Le nom du fichier Fann type d'entrainement.
  102.  
  103.  
  104.   Layout_Array : Fann_Layout_Array(1..5) :=
  105.     (1 =>              Neuron_Number(8*Max_Chars_By_Word*Max_Words),
  106.      2 =>              Neuron_Number(Max_Words*8),
  107.      3 =>              Neuron_Number(Max_Words),
  108.      4 =>              Neuron_Number(Max_Words*8),
  109.      5 =>              Neuron_Number(8*Max_Chars_By_Word*Max_Words));
  110.   -- définition de la structure du RdN.
  111.  
  112.   Ann : Fann_Access;
  113.   -- Le RdN.
  114.  
  115.   Data_Train : Train_Data.Train_Data_Access;
  116.   -- Les données du RdN.
  117.  
  118.  
  119. begin
  120.   ....
  121.   null;
  122. end Main;


 
 
2/ je suis pas là pour enseigner le langage Ada, mais pour partager ce que je sais.
Si tu veux apprendre le langage Ada, tu lis le RM et pis c'est tout.
Perso je l'ai à peine survolé, alors faut vraiement pas sortir de St Sir pour comprendre ce que j'écris.
 
 
3/ les dernier codes que j'ai posté son aussi abstrait que les fondement de n'importe equel des langage.
Et oui, pourquoi parle-t-on, ben c'est ce que j'essaie de modéliser. un trou sans fond dans lequel chacun vomis son intime conviction. Y compris mes soft.
 
Non mais. j'attend pas ta réponse breyzbug.

n°2052929
breizhbugs
Posté le 29-01-2011 à 20:13:36  profilanswer
 

plop,
 
pour le 1), il serait intéressant de documenter la procédure et ses paramètres, juste préciser quel est l'idée générale et de préciser quel est le résultat attendu. Mais il est évident que lorsque l'on code perso, c'est vite fastidieux de tout documenter, pourtant dès que l'on communique, ça aide...
 
pour le 2) je suis d'accord, ce n'est pas le but du topic. Mais lorsque le 1) est bien fait, un débutant n'aura pas à se battre, et avec le langage et avec l'algorithme, c'est tout...
 
pour le 3) les gens en général (enfin je pense) cherche des programmes plus "utiles" genre un éditeur de tag mp3, un gestionnaire de cdthèque, enfin ce genre de connerie quoi dès qu'ils commencent à maitriser un peu un langage (en oubliant ceux qui veulent faire une copie du dernier mmo-de-la-mort-qui-tue)


---------------
Seul Google le sait...
n°2052930
Profil sup​primé
Posté le 29-01-2011 à 20:26:29  answer
 

Ok, reçu.
Merci breizhbugs !  :)  
C'est pas évident de définir ce qu'on fait lorsqu'on à une démarche expérimentale où le résultat n'est pas attendu puisqu'on ne le connais pas.
Mais je ferai les choses dans ton sens à l'avenir, à moins d'en être tout bonnement incapable. :/

n°2057622
Profil sup​primé
Posté le 17-02-2011 à 20:47:52  answer
 

Bonjour, bonjour à tous.
C'est pour linux mais ca doit compiler sous Windows en modifiant les trucs habituels.
J'ai encore pas fait de doc..... Alors quoi merde...... Ben, c'est que j'ai pas fait encore, je viens de terminer la révision 0g de la version 0.0 du programme... Nommé Anast.... Et oui ; Et je vous livre le code avant que je passe à une nouvelle implémentation ou nouvel algorithme.
Celui ci fonction, plus ou moins, difficile de savpoir à qui s'attendre vraiment avec L'ia. Car effectivement, il s'agit en core d'une exploitation de réseaux de neurones formels, pour un agent de dialogue.
Voila, alors, pour sortir du programme, c'est Kill - 9 PID ou Ctrl+C  :D  
Pour compiler comme d'hab, vous avez le Makefile.
Après avoir lancer ./bin/Anast..appuyez sur une touche sauf entré pour actualiser l'écran puis faite backspace, et attendez "Learning done" en bas de l'écran. Après environs 10 minutes d'apprentissage, vous pouvez entrer votre texte et validez par entrée.
Alors, pour les limites, c'est environs 20 mot, sachant que tout caractères n'étant pas une lettres est considéré comme un mot.
Le programme va produire autant de fichier que nombre de mot max utilisés dans la phrase la plus longue ; de nombre paire ; c'est à dire que pour générer le fichier il faut entrer deux phrases plus longue que max précédent.
 
Dans les sources aucun commentaire.
Vous trouverez néanmoins un truc relativement architecturé.
Dans src/lib/Chaos/chaos-machina.adb la tache Elhoim gère la computation et l'apprentissage.
Voila les source : anast-2.011k_0.0.0g.tar.gz
 
Le programme vas lire les fichier board N.txt dans Arche donc on s'attend à un dialogue adjacent au contenue des fichiers de Arche.
A oui, il est possible qu'en faisant un "ulimit -s unlimited" vous vous donniez un peu de puissance. Je sais que ça va pas vous plaire mais le programme est gourmand ....
Imaginer que le réseau font 18bits*nombre de mots de larges, et que vous fassiez nombre de mots de réseaux de 0..nombre de mot max-1.. bref c'est vous qui voyez  [:cetrio]  
 
Après  je peux vous dire autrement qu'avec Ada, ce que j'ai écris avec Ada, j'en vois pas l'usage.
Je ne peux pas vous dire ce qu'il va en émerger.
Mais je répondra à vos question en pm éventuellement.
Good luck!
 
Moi perso, en particulier, j'ai réussi à me faire dire je t'aime....   [:intercalaire]  [:kadreg]


Message édité par Profil supprimé le 17-02-2011 à 20:56:03
n°2058416
Profil sup​primé
Posté le 21-02-2011 à 15:20:28  answer
 

Bonjour,
J'espère que vous me pardonnerez mes erreur.
Voici la mise à jour de "Anast" pour Gnu/Linux qui avait tendance à tourner en boucle plus ou moins dans le vide, c'est corrigé.
Je vous livre aussi une version béta du même programme mais avec une interface différente du nom de "Kar" ; Celle-ci affiche l'état de la table des réseaux et affiche uniquement la dernière réponse et la ligne de saisie.
Les deux projets sont compilés statiquement et stripé.
Vous avez donc un binaire pour chaque projet exécutable sans installation particulière. C'est théorique.
binaire + sources ::= anast-2.011k_0.0.0j.tar.gz
binaire + sources ::= kar-2.011k_0.0-0b.tar.gz
 
Dans Kar, qui est fait vite fait, je n'ai pas organisé le programme comme d'habitude ; vous trouverez un simple main file et deux fichiers de bibliothèque contenant tout le reste.
 
Je vous livre la version pour Windows dans quelque temps.
Merci pour tous vos téléchargement qui m'encourage à poursuivre mon travail. [:bien]

n°2058821
Profil sup​primé
Posté le 22-02-2011 à 18:27:53  answer
 

Hello  :hello: ,
 
Cette fois je me suis attaché, non pas à la doc, à gagner de l'espace et du temps.
Mais on ne fait pas d'omelette sans casser d'oeufs.
Donc :
1) on travaille avec des lexiques (un pour les noms communs, et un pour les noms propres) de 4096 item.
2) la taille des piles de données est maintenant de 64 au lieu de 1024.
3) la taille de la table des réseaux est limité à 32 mots.
Avec ça on gagne quelques petites minutes.
*) reste peut-être un bug qui fait exploser la consommation de la mémoire, ou pas.
    Effectivement, si on interroge Anast avant la fin de l'apprentissage en cours, ça peut exploser mais pas toujours.
    Je pense simplement que le système exploitait les ressoureces à ça disposition que j'ai donc limité par le point 2)
Windows ::= Sources + binaire statique
Gnu/Linux ::= Sources + Binaire statique
 
Sur Windows, avec les fichier de données que je fourni, en tout cas sur ma machine Vista, les caractères accentués sont mal affichés.
 
 
j'ai oublié un truc...
 
4) Le programme prends des fichier de n'importe quelle largeur, (limité à 32) dans n'importe quel ordre. Mais ceux-ci doivent tout de même êtres numéroté de 0 à N sans interruption.


Message édité par Profil supprimé le 22-02-2011 à 18:34:02
n°2059396
Profil sup​primé
Posté le 24-02-2011 à 15:16:18  answer
 

Plop !
 
Je viens mettre à jour Anast, reconstruit de manière plus générique.
De plus vous pouvez passer soit aucun paramètres en ligne de commande soit tous ce qui sont nécéssaire au paramétrage du programme.
 
Synopsis : Anast [ Max_Words Max_Names Path Basename Extension Max_Stack Max_Network ]
 
Avec la touche tabulation, vous switchez entre la vue console et la vue moniteur.
Esc pour quitter le programme en fin d'apprentissage.
 
Max_Words est le nombre de nom communs maximum dans le glossaire des noms communs.
Max_Names est le nombre de nom propres maximum dans le glossaire des noms propres.
Path est le chemin d'accès aux fichier de base de connaissance.
Basename est le nom de base de vos fichier de connaissance.
Extension est l'extension de ces fichiers.
Max_Stack est la taille des piles de connaissance des réseaux de neurones.
Max_Network est le nombre max de réseaux de neurones (défini en même temps la taille max d'une phrase en entrée).
 
Le tout sous license GPL.
Pour Gnu/Linux ::= (il reste pas grand chose à changer pour Windos.)
Sources + Binaire statique et stripé ::= Anast-2.011k_0.0.1e.tar.gz
 
Pour Windows ::= Anast-2.011k_0.0.1e.zip


Message édité par Profil supprimé le 24-02-2011 à 16:30:12
n°2098818
Profil sup​primé
Posté le 31-08-2011 à 17:11:58  answer
 

Bonjour,
Après six mois d'absence, je reviens avec un jeu....  :o  
 
Warborg est un système client serveur pour jouer un wargame en réseaux.
Le but du jeux est de trouver les bases startégique des autre joueurs grâce aux tirs de missiles.
 
Vous créez donc votre propre base stratégique et vos missiles et explorez une carte du monde à la recherche d'ennemis.
Vous pouvez créer et tirer les missiles, un par un ou par groupe de 4 pour la création ou le tir de tous les missils à la fois.
 
Source : Wargame-0.0.1b.tar.gz
 
Après avoir compilé avec la commande 'make' en vous plaçant dans le répertoire Warborg, vous trouverez le serveur 'uniborg' et le client 'xborg'  dans le répertoire .obj/bin.
 
Ce programme est Sous GPL.
 
Good luck !

n°2294411
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-01-2017 à 13:52:57  profilanswer
 

Mais pourquoi t'ouvres pas un repo github pour y poster tout ton bouzin et dont tu indiquerais le lien dans ta signature ? :pfff:


---------------
J'ai un string dans l'array (Paris Hilton)
n°2332985
µjoshua w​opr
WOPR V 0.0.0
Posté le 04-05-2019 à 22:40:29  profilanswer
 

Merci.
 
 
Je viens pour vous adresser ceci :
 
C'est un set d'exemples pour un agent de dialogue (j'appelle ça symplement comme ça apprès dans l'application c'est plus complexe).
 
Il a l'interêt seul d'être pedagogique.
 
je ne l'ai pas testé plus parce que plus serait strictement personel.
 


je suis tout.
suis-je partout ?
oui.
je suis vous.
non.
je suis toujours.      
suis-je tout ?
non.
suis-je partout ?
non.
je suis partout.
je suis tout.


 
Donc, c'est un emsemble d'exemple qui est donné en exemples d'apprentissage à un réseau de neurones artificiel.
Les mot sont codé en entrée et décodé de la sortie.
Pour utiliser ce set il faut réduire le set d'exemple à 20 exemples maximum et faire tourner 2000 époque d'apprentissage.
 
Ce qui donne le résultat (entre autre) suivant.
(comme dans les exemples, les ligne vont par deux.)
 

je suis tout.
suis-je tout
non.
je suis ?.
non.
je suis ?.
je suis partout.
je suis tout.
suis-je tout ?
non.
suis-je partout ?
non.
je suis partout.
je suis tout.
oui.
je suis toujours.
suis-je toujours ?
non.


 
(ici litéralement, la machine a prise ma place, lol.
 
 
Vous trouverez une implémenation dans le programme Arknos en suivant ma signature.


---------------
Strange game! jovalise on soureforge.net
n°2411597
rufo
Pas me confondre avec Lycos!
Posté le 08-03-2022 à 08:01:05  profilanswer
 

Comme le faisait remarquer Harko, pourquoi tu mets pas ton code dans un git ?
C'est quoi l'intérêt de poster des tartines de code ici :??:
En plus, bonjour la structuration du code : quasi pas de commentaire, code pas mis dans des fonctions pour rendre plus lisible le main, ton gros pâté de put_line, t'aurais pu mettre tout le texte dans un tableau statique ou dont le contenu proviendrait d'un fichier et tu faisais une boucle...
Ca me rappelle ma façon de faire quand j'ai débuté :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2411599
Profil sup​primé
Posté le 08-03-2022 à 08:21:27  answer
 

rufo a écrit :

Comme le faisait remarquer Harko, pourquoi tu mets pas ton code dans un git ?
C'est quoi l'intérêt de poster des tartines de code ici :??:
En plus, bonjour la structuration du code : quasi pas de commentaire, code pas mis dans des fonctions pour rendre plus lisible le main, ton gros pâté de put_line, t'aurais pu mettre tout le texte dans un tableau statique ou dont le contenu proviendrait d'un fichier et tu faisais une boucle...
Ca me rappelle ma façon de faire quand j'ai débuté :D


 
C'est un forum, c'est fait pour partager.

n°2411606
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-03-2022 à 08:56:41  profilanswer
 


Rien ne t'empêche de partager des liens github/sourceforge/whatever...


---------------
J'ai un string dans l'array (Paris Hilton)
n°2411608
Profil sup​primé
Posté le 08-03-2022 à 09:06:11  answer
 

pour 300 lignes...
 
 
Salut harko !

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5

Aller à :
Ajouter une réponse
 

Sujets relatifs
Probleme robot google ? Ma source internet ? aidez moiInterface ADA avec C
Projet de frontend Open-Source pour émulateursOpen Office: Base de données
code source pdf ?Modifier le code source de SIP-Communicator
[JS] Pb avec un page de javascripts et module open flash chart[ADA] /!\ Combien on peux boire de biere JEUDI MIDI §§§ la defense ??
Fonction window.open (javascript) 
Plus de sujets relatifs à : [Ada][Topic Unic][Open Source] Je fais péter mes codes.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR