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

  FORUM HardWare.fr
  Programmation
  Ada

  [Ada/Modélisation] Modélisation d'un cerveau bicéphale.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Ada/Modélisation] Modélisation d'un cerveau bicéphale.

n°1977928
Profil sup​primé
Posté le 27-03-2010 à 09:40:03  answer
 

Bonjour à tous et à chacun.
 
Je tente une nouvelle approche de modélisation de l'intelligence artificielle avec une architecture bicéphale.
Toute vos remarque et critique son les bien venu.
 
Je ne sais plus très bien ou j'en suis, c'est pourquoi je poste ici, f.h.fr est la clef de ma réussite.  [:talen]  

Code :
  1. with Ada.Characters.Handling;
  2. with Ada.Characters.Latin_1;            use Ada.Characters;
  3. with Ada.Wide_Text_Io;                  use Ada.Wide_Text_Io;
  4.  
  5. package body Prophet.Neural_Network is
  6.  
  7.   type T_Node;
  8.   type Node_Access is access T_Node;
  9.   type T_Connector is
  10.     record
  11.        Left, Right : Node_Access;
  12.     end record;
  13.   type Connector_Access is access T_Connector;
  14.  
  15.   type T_Get_Handler is access
  16.     procedure (Input  : out Wide_String; Last : out Natural);
  17.   type T_Put_Handler is access
  18.     procedure (Output : in Wide_String);
  19.  
  20.   type T_Mode is (In_Put, Out_Put);
  21.  
  22.   type T_Action(Mode : T_Mode) is
  23.      record
  24.         Register : Wide_String(1..4096);
  25.         Length   : Natural := 0;
  26.         case Mode is
  27.            when In_Put =>
  28.               Get_Action : T_Get_Handler;
  29.            when Out_Put =>
  30.               Put_Action : T_Put_Handler;
  31.         end case;
  32.      end record;
  33.   type Action_Access is access T_Action;
  34.   type T_Action_Handler is access procedure (Action : in out Action_Access);
  35.  
  36.   procedure Action (Action : in out Action_Access);
  37.  
  38.   subtype T_Key is Integer range -131071..131071;
  39.   type T_Node is
  40.      record
  41.         Action : Action_Access;
  42.         Key : T_Key := 0;
  43.         run : T_Action_Handler;
  44.         Connector : Connector_Access;
  45.      end record;
  46.  
  47.  
  48.   task Life_Cycle is
  49.      entry Ctrl_C;
  50.   private
  51.      entry Switch(Node : in Node_Access);
  52.   end Life_Cycle;
  53.  
  54.   procedure Ctrl_C is
  55.      Ctrl_C_Message : constant Wide_String :=
  56.        Handling.To_Wide_String(Latin_1.Cr & " Interruption, please wait!" );
  57.   begin
  58.  
  59.      Put_Line(Ctrl_C_Message);
  60.      Life_Cycle.Ctrl_C;
  61.   end Ctrl_C;
  62.  
  63.  
  64.   procedure Put_line(Output : in Wide_String);
  65.   procedure Get_line(Input  : out Wide_String; Last : out Natural);
  66.  
  67.   Input : Action_Access :=
  68.     new T_Action' (Register => (others => Wide_Character'Val(0)),
  69.                    Length => 0,
  70.                    Mode => In_Put,
  71.                    Get_Action => Prophet.Neural_Network.Get_Line'Access);
  72.  
  73.   output : Action_Access :=
  74.     new T_Action' (Register => (others => Wide_Character'Val(0)),
  75.                    Length => 0,
  76.                    Mode => Out_Put,
  77.                    Put_Action => Prophet.Neural_Network.put_Line'Access);
  78.  
  79.   task body Life_Cycle is
  80.  
  81.      task type T_Cortex is
  82.         entry Initialize(Root : in Node_Access; Env : in Node_access);
  83.         entry Reset;
  84.      end T_Cortex;
  85.  
  86.      task body T_Cortex is
  87.  
  88.         Root, Env, Current_Node : Node_Access;
  89.  
  90.         function Next_Key(Key : in Integer) return Integer is
  91.         begin
  92.  
  93.            return Root.Key * (abs(Key) + 1);
  94.         end Next_Key;
  95.  
  96.  
  97.      begin
  98.         accept Initialize(Root : in Node_Access; Env : in Node_access) do
  99.            T_Cortex.Root := Root;
  100.            T_Cortex.Current_Node := Root;
  101.            T_Cortex.Env := Env;
  102.         end Initialize;
  103.         loop
  104.            select
  105.               accept Reset do
  106.                  Current_Node := Root;
  107.               end Reset;
  108.            or
  109.               delay 0.01;
  110.               if Current_Node.Action.Mode /= Env.Action.Mode then
  111.                  Current_Node.Run(Current_Node.Action);
  112.                  Life_Cycle.Switch(Current_Node);
  113.                  if Current_Node.Key < 0 then
  114.                     Current_Node.Connector :=
  115.                       new T_Connector ' ((new T_Node '
  116.                                           (Current_Node.Action,
  117.                                            Next_Key(Current_Node.Key),
  118.                                            Action'Access,
  119.                                            null)),
  120.                                          null);
  121.                     Current_Node := Current_Node.Connector.Left;
  122.                  elsif Current_Node.Key > 0 then
  123.                     Current_Node.Connector :=
  124.                       new T_Connector ' (
  125.                                          null,
  126.                                          (new T_Node '
  127.                                           (Current_Node.Action,
  128.                                            Next_Key(Current_Node.Key),
  129.                                            Action'Access,
  130.                                            null))
  131.                                          );
  132.                     Current_Node := Current_Node.Connector.Right;
  133.                  else
  134.                     raise Program_Error;
  135.                  end if;
  136.  
  137.               end if;
  138.            end select;
  139.         end loop;
  140.      exception
  141.         when Program_Error =>
  142.            Put_Line("Cortex : id " &
  143.                     Handling.To_Wide_String(Integer'Image(Current_Node.Key)) &
  144.                     " := Program_Error" );
  145.      end T_Cortex;
  146.  
  147.      L_Root :  Node_Access :=
  148.        new T_Node ' (output,
  149.                      -1,
  150.                      Action'Access,
  151.                      null);
  152.      R_Root :  Node_Access :=
  153.        new T_Node ' (input,
  154.                      1,
  155.                      Action'Access,
  156.                      null);
  157.      L_Env    :  Node_Access :=
  158.        new T_Node ' (input,
  159.                      0,
  160.                      Action'Access,
  161.                      new T_Connector '
  162.                      (null, R_Root));
  163.      R_Env    :  Node_Access :=
  164.        new T_Node ' (output,
  165.                      0,
  166.                      Action'Access,
  167.                      new T_Connector '
  168.                      (L_Root, null));
  169.      Left : T_Cortex;
  170.      Right : T_Cortex;
  171.  
  172.      Current_L_Env : Node_Access := L_Env;
  173.      Current_R_Env : Node_Access := R_Env;
  174.  
  175.   begin
  176.  
  177.      Left.Initialize(L_Root, L_Env);
  178.      Right.Initialize(R_Root, R_Env);
  179.      loop
  180.         select
  181.            accept Ctrl_C do
  182.               null;
  183.               --Left.Reset;
  184.               --Right.Reset;
  185.            end Ctrl_C;
  186.         or
  187.            accept Switch(Node : in Node_Access) do
  188.  
  189.               if Node.Key < 0 then
  190.                  Put("From left key : " &
  191.                           Handling.To_Wide_String(Integer'Image(Node.Key))
  192.                           & ":" );
  193.                  Node.Run(Node.Action);
  194.  
  195.  
  196.               elsif Node.Key > 0 then
  197.                  Put("From right key : " &
  198.                           Handling.To_Wide_String(Integer'Image(Node.Key)) &
  199.                           ":" );
  200.                  Node.Run(Node.Action);
  201.  
  202.               else
  203.                  raise Program_Error;
  204.               end if;
  205.            end Switch;
  206.         end select;
  207.      end loop;
  208.   exception
  209.      when Program_Error =>
  210.         Put_Line("Life_Cycle ::= Program_Error" );
  211.   end Life_Cycle;
  212.  
  213.   procedure Action (Action : in out Action_Access) is
  214.   begin
  215.      case Action.Mode is
  216.         when In_Put =>
  217.            if Action.Get_Action /= null then
  218.               Action.Get_Action(Action.Register, Action.length);
  219.            end if;
  220.            Action :=
  221.              new T_Action' (Register => Action.Register,
  222.                             Length => Action.Length,
  223.                             Mode => Out_Put,
  224.                             Put_Action => Prophet.Neural_Network.put_Line'Access);
  225.         when Out_Put =>
  226.  
  227.            if Action.Put_Action /= null then
  228.  
  229.               if Action.Length /= 0 then
  230.  
  231.                  Action.Put_Action(Action.Register(1..Action.length));
  232.               else
  233.                  Action.Put_Action("String is left empty." );
  234.               end if;
  235.            end if;
  236.            Action := Input;
  237.      end case;
  238.   end Action;
  239.  
  240.  
  241.   procedure Put_line(Output : in Wide_String) is
  242.   begin
  243.      Ada.Wide_Text_Io.Put_Line(" Prophet > " & Output);
  244.   end Put_Line;
  245.  
  246.   procedure Get_line(Input  : out Wide_String; Last : out Natural) is
  247.   begin
  248.      Put(" Prophet < " );
  249.      Ada.Wide_Text_Io.Get_Line(Input, Last);
  250.   end Get_Line;
  251.  
  252.  
  253. end Prophet.Neural_Network;


Message édité par Profil supprimé le 30-03-2010 à 11:23:16
mood
Publicité
Posté le 27-03-2010 à 09:40:03  profilanswer
 

n°1977976
Profil sup​primé
Posté le 27-03-2010 à 15:04:08  answer
 

C'est pas mal, mais c'est encore pas à ça que je souhaite parvenir....
J'ai un problème de simultanéité de lecture et/ou d'écriture....

n°1978807
Profil sup​primé
Posté le 30-03-2010 à 11:26:24  answer
 

Bonjour,
 
J'ai toujours mon problème de simultanéité des opération à effectuer par les deux taches concourante.
 
C'est le problème du jour, voir de la semaine.
 
Je cherche le moyen de synchronisé ces deux tache pour n'effectuer qu'une seule opération d'écriture ou de lecture pour servir les deux taches.
 
Comment procéder ? S'il vous plaît. Merci pour votre aide.

n°1978822
breizhbugs
Posté le 30-03-2010 à 11:52:40  profilanswer
 

Bonjour,
Je connais pas trop le ada pour comprendre le problème mais si tu veux que 2 threads (c'est ca tes taches?) ne modifie pas une meme variable/tableau en même temps,renseigne toi sur les mutex/semaphiore.

Message cité 1 fois
Message édité par breizhbugs le 30-03-2010 à 11:54:45
n°1978850
Profil sup​primé
Posté le 30-03-2010 à 12:40:54  answer
 

breizhbugs a écrit :

Bonjour,
Je connais pas trop le ada pour comprendre le problème mais si tu veux que 2 threads (c'est ca tes taches?) ne modifie pas une meme variable/tableau en même temps,renseigne toi sur les mutex/semaphiore.


 
Merci, oui, je connait un peu... Mais la c'est le mécanisme inverse que je cherche, si je peux m'exprimer ainsi. (enfin je crois).
 
J'ai deux taches (thread) qui doivent lire ou écrire chacune une variable respective. Cependant, je ne doit effectuer qu'un lecture ou écriture pour ces deux taches. C'est à dire que le contenue des variables doit être le même pour les deux taches. De plus je doit synchroniser ces écriture et lecture. C'est à dire que je doit attendre que les deux tache demande la même opération pour l'accomplir.
 
Je crois que j'ai trouvé une solution. Je réviserait mas copie en faveur des mécanisme de mutex et sémaphore si j'échoue.
 
Merci.  :jap:

n°2050974
Hibou57
Posté le 22-01-2011 à 07:46:08  profilanswer
 

Bonjour Jovalise,
 
As-tu pensé aux objets protégés ? Type protégé, objet protégé, et compagnie ? C’est la première chose à laquelle on pense en Ada lorsqu’une question de synchronisation se pose.
 
Voir dans la référence de Ada 2005 (ou même Ada 95), la section 9.4, “Protected Units and Protected Objects”
 
 
P.S. Je ne connais pas trop ce forum, je n’y suis jamais, mais je viens de regarder la section Ada… ben t’es comme chez toi ici, je te vois partout  :bounce:


Message édité par Hibou57 le 22-01-2011 à 07:51:18
n°2050987
Profil sup​primé
Posté le 22-01-2011 à 10:53:45  answer
 

Bonjour Hibou, je connais un peut les objet protégé de ce que j'ai pu en lire dans la presse papier en français. Mais comme tu peux le voir, ce projet date un peux, j'y repenserais probablement cependant. Merci pour le lien.
C'est sympa ici, un peu violant parfois mais tranquille en dehors de ces saut d'humeur de certain forumeur. Par contre en catégorie Ada, comme tu peut le voir, c'est un peut à l'abandon.

n°2080642
pierrecado​unou
Posté le 06-06-2011 à 13:14:11  profilanswer
 

bonjour,
j'ai un programme avancé de compréhension du langage naturelle....plus de 100 000 DE CODE .si vous êtes intéressé pour donner vie à l'i a .peut être que votre connaissance plus la mienne en linguistique permettait de réaliser un jolie programme Homme machine.

n°2080775
Profil sup​primé
Posté le 06-06-2011 à 17:24:29  answer
 

Bonjour pierre,  
Pourquoi pas !

n°2081242
pierrecado​unou
Posté le 08-06-2011 à 10:42:39  profilanswer
 

avez vous une adresse mail pour vous envoyer une documentation de ce que réalise déjà ce petit programme.merci à bientôt

mood
Publicité
Posté le 08-06-2011 à 10:42:39  profilanswer
 

n°2081246
404 Not Fo​und
Posté le 08-06-2011 à 11:19:35  profilanswer
 

Jovalise, je suis convaincu qu'un jour, tu démontreras que P=NP par accident :D

n°2081318
Profil sup​primé
Posté le 08-06-2011 à 14:20:10  answer
 

pierrecadounou a écrit :

avez vous une adresse mail pour vous envoyer une documentation de ce que réalise déjà ce petit programme.merci à bientôt


jovalise@gmail.com, merci.


[:dpenche]

n°2208915
Profil sup​primé
Posté le 31-10-2013 à 19:01:29  answer
 

pierrecadounou a écrit :

avez vous une adresse mail pour vous envoyer une documentation de ce que réalise déjà ce petit programme.merci à bientôt


 
Je suis pas certain d'avoir répondu à la question. (10 ans plus tard). :/
Je ne sais plus ou j'en suis sur ce prog, je vais relire.
 
En tout cas, je repense à l'idée de faire un tel processus.
 
Je vous tiens au courant.
 
Mais je suis à la recherche d'un interlocuteur aussi.

n°2208944
gilou
Modérateur
Modzilla
Posté le 01-11-2013 à 12:53:38  profilanswer
 

Un cerveau bicéphale, c'est un seul cerveau dans deux têtes. Physiologiquement, ça ne me semble pas tenir la route... :whistle:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2208961
Profil sup​primé
Posté le 01-11-2013 à 17:20:34  answer
 

j'ai appris ça entre temps.
Je me suis mal exprimé.
Je sais pas comment dire mieux.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  [Ada/Modélisation] Modélisation d'un cerveau bicéphale.

 

Sujets relatifs
[GMF] Editeur graphique pour une modélisation sur plusieurs niveaux[POO] Modélisation & simulations physiques
Exécuter une commande externe avec Adaaide en modélisation
Problème de modélisation PowerDesignerProblème d'utilisation de Ada.Streams.Stream_Io;
[Ada][Topic Unic][Open Source] Je fais péter mes codes.Interface ADA avec C
[ADA] /!\ Combien on peux boire de biere JEUDI MIDI §§§ la defense ??Séquenceur MIDI avec Ada
Plus de sujets relatifs à : [Ada/Modélisation] Modélisation d'un cerveau bicéphale.


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