IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Simuler des besoins (humains ou animaux) comme dans les Sims


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai Avatar de myspanique
    Femme Profil pro
    Prof de maths + Stagiaire en informatique
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prof de maths + Stagiaire en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Simuler des besoins (humains ou animaux) comme dans les Sims
    Bonjour,

    dans le cadre de mon stage je suis amenée à étudier le comportement de souris dans une cage ; de fait, je tente en amont de proposer un modèle basique, mais crédible.
    En pratique, mon algo va faire un peu comme celui des Sims :
    chaque souris a des besoins (dormir, manger, faire de la roue, sociabiliser) qui augmentent avec le temps où ils ne sont pas assouvis. Au tour par tour, mon algo doit décider de ce que fait chaque souris présente dans la cage (virtuelles, s'entend )
    Pour info, je code en Perl. Pas idéal pour la POO, mais c'est faisable.
    Et ma cage virtuelle dispose de 4 salles reliées par des tubes, une salle par activité, elles sont spécialisées (elles le seront dans la vraie cage). Elles doivent donc s'y rendre pour assouvir le besoin correspondant.

    Je me demandais comment je pourrais m'y prendre pour mettre en place un truc pareil, tant sur le côté algorithmie, que mathématique, sur l'évolution des niveaux de besoin...

    Pour le moment, j'ai codé un objet Souris, qui possède un nom et lesdits 4 besoins, avec des méthodes correspondant (manger, dormir, papoter, courir, ainsi que se déplacer et ne rien faire).
    J'ai estimé très basiquement l'évolution des niveaux de besoin lors de la réalisation d'une action à chaque tour (par exemple, manger un tour diminue la faim de 4, augmente la fatigue de 1, etc)
    J'ai récupéré un bout de code qu'il me faut adapter depuis un autre site (voir plus bas).

    Auriez vous des idées, des conseils, ou autre? Ca me paraît assez énorme à mettre en place, du coup je prendrais volontiers tous les coups de main !
    D'avance merci !


    le code en question :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    abstract Need
    {
        numeric CurrentValue;        
        external function IncreasingRule;
     
        function Update()
        {
            IncreasingRule.Apply(this, Params);
        }
        ...
    }
     
    IncreasingRule HungerRule.Apply(HungerNeed, Subject)
    {
         if (Subject.Eating)
         {
                HungerNeed.CurrentValue -= Subject.FoodBeingEaten.HungerValue;
         }
         else
         {
                //Linear development as time passes.
                HungerNeed.CurrentValue = Subject.TimeSinceLastMeal; 
         }
    }
     
    IncreasingRule FunRule.Apply(FunNeed, Subject)
    {
         if (Subject.DoingSomethingThatCanBeFun)
         {
            //If the thing the subject is doing is among his favorites, the fun 
            //need goes down based on their favorite rank. If, instead, they're
            //doing something boring, or if they absolutely hate what they're doing,
            //the fun need goes up (return value of CalculateFun is negative).
            FunNeed.CurrentValue -= CalculateFunBasedOnListOfFavoriteThings(Subject.FunObjectInUse);
         }
         else
         {
            FunNeed.CurrentValue = Subject.TimeSinceLastDidSomething;
         }
    }
     
    //Similar to the one in The Sims.
    IncreasingRule RoomRule.Apply(RoomNeed, Subject)
    {
         if (Subject.JustEnteredRoom)
         {
             if (Subject.CurrentEnvironment.ContainsNewDecorations)
             {
                 RoomNeed.CurrentValue -= CalculateBeautyBasedOnSubjectPreferences(Subject, Subject.CurrentEnvironment.NewDecorations);
             }
         }
         else
         {
             RoomNeed.CurrentValue = Subject.TimeSinceSeenSomethingNew;
         }
    }

    Mes estimations super basiques :
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    my %eating_rates = {
    	"faim" 		=> -8,
    	"fatigue"	=> +1,
    	"ennui"		=> +1,
    	"solitude"	=> +2 	}
     
    my %sleeping_rates = {
    	"faim" 		=> +1,
    	"fatigue"	=> -4,
    	"ennui"		=> +2,
    	"solitude"	=> +1 	}
     
    my %running_rates = {
    	"faim" 		=> +2,
    	"fatigue"	=> +1,
    	"ennui"		=> -8,
    	"solitude"	=> +1 	}
     
    my %chatting_rates = {
    	"faim" 		=> +2,
    	"fatigue"	=> +1,
    	"ennui"		=> +1,
    	"solitude"	=> -4 	}

  2. #2
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Bonjour,
    Citation Envoyé par myspanique Voir le message
    ... Je me demandais comment je pourrais m'y prendre pour mettre en place un truc pareil, tant sur le côté algorithmie, que mathématique, sur l'évolution des niveaux de besoin ...
    J'ai lu il y a longtemps un article assez proche sur la vie de Doudou le hamster, et qui concernait les chaînes de Markov.
    Trois états étaient possibles, dont les probabilités dépendaient uniquement de l'état antérieur; aucune mémoire n'intervenait dans ce cas.
    Le passage de l'état actuel au suivant est-il aléatoire, ou strictement orienté vers l'activité la plus longtemps "inassouvie" ? Il y a alors cumul de données concernant les états antérieurs.
    La succession des états peut être programmée si l'on définit pour chaque souris 2 listes de 4 termes:

    a) un compteur comportant 4 entiers (K1, K2, K3, K4), qui résume l'historique récent de l'individu étudié, et dont un terme est remis à zéro pour l'activité réalisée, les trois autres augmentant de 1; on aurait ainsi, pour l'apparition initiale des états successifs (1, 3, 2, 2):
    (0, 0, 0, 0) - (E1) - (0, 1, 1, 1) - (E3) - (1, 2, 0, 2) - (E2) - (2, 0, 1, 3) - (E2) - (3, 0, 2, 4) ...

    b) une liste de 4 réels positifs (X1, X2, X3, X4) évaluant la "capitalisation des besoins" pour chaque activité, et fonction des entiers précédents; un combinaison linéaire est envisageable, mais ce n'est pas la seule possibilité, ni la plus appropriée.
    Je m'abstiendrais sur ce point des valeurs négatives ou nulles, et reviendrais pour tout besoin satisfait au niveau plancher Xi = 1.0 .

    Une évolution aléatoire pourrait par exemple résulter de l'association à chaque état (i) d'une probabilité Pi = Xi / (X1 + X2 + X3 + X4), ou si l'on veut favoriser l'activité la plus longtemps délaissée prendre: Pi = Yi / (Y1 + Y2 + Y3 + Y4) avec Yi = (Xin) ; le cas limite d'un strict déterminisme, pour lequel on aurait:
    Pi = 1 si Xi = Max(X1, X2, X3, X4) sinon Pi = 0 , revient à envisager (n) infiniment grand.

    Il y a donc un très large éventail de possibilités, tant au niveau de l'influence des états antérieurs que du mode de décision (ou, si l'on veut, de causalité).

    Le comportement d'un ensemble de (N) souris requiert évidemment l'emploi de deux matrices (4×N), l'une à coefficients entiers (K = [Kij]) et l'autre réels (X = [Xij]). Mais il faudrait probablement tenir compte d'effets collectifs (la sieste, les bisous et le grignotage sont des comportements incitatifs, c'est bien connu ! ), et cela commence à devenir lourd (algorithmiquement parlant - je n'ai personnellement rien contre la sieste). Il vaut mieux dans un premier temps se limiter à des individus strictement individualistes; cela peut déjà conduire à des résultats statistiques intéressants.

    L'évolution collective au cours du temps, sur (T) instants successifs, peut être visualisée par une image comportant (NT) pixels (ou carreaux) à 4 couleurs, transposition graphique de la matrice (N×T) des états de chaque souris à tous les instants.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Membre à l'essai Avatar de myspanique
    Femme Profil pro
    Prof de maths + Stagiaire en informatique
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prof de maths + Stagiaire en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour, merci pour ta réponse !
    Je m'étais penchée en effet sur les chaînes de Markov, mais je voyais mal comment il pouvait n'y avoir aucune mémoire... Même si j'admets que pour commencer, c'est plus simple. Tout comme, comme tu dis, considérer des individus indépendants.
    Le seul truc, c'est qu'une souris ne peut papoter que si elles sont au moins deux dans la salle, mais ça doit être facilement contraignable.
    (Bon si on veut rajouter de quoi faire plus crédible, on peut se souvenir aussi que la souris est bien plus active la nuit que le jour, et donc augmenter l'attractivité du dormir pendant le jour, et la diminuer la nuit ; et en pratique s'ajoutera un autre souci, qui est que la cage est composée d'une pièce centrale (sociale) et trois annexes (dodo, manger, et roue), qui sont reliée à la première par un unique tube où ne peut passer qu'une seule souris (on les radio détecte) : que faire en cas de rencontre dans un tube? ... Bref, j'ai du boulot )

    Citation Envoyé par wiwaxia Voir le message
    si l'on veut favoriser l'activité la plus longtemps délaissée prendre: Pi = Yi / (Y1 + Y2 + Y3 + Y4) avec Yi = (Xin) ; le cas limite d'un strict déterminisme, pour lequel on aurait:
    Pi = 1 si Xi = Max(X1, X2, X3, X4) sinon Pi = 0 , revient à envisager (n) infiniment grand.
    Je ne suis pas certaine de voir pourquoi Yi = (Xin) ; ni pourquoi Pi = 1 si Xi = Max(X1, X2, X3, X4)...

    Cela dit, en effet, je pars là dessus : chaque souris ressemble à ça :
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    sub new {
    	my ($classe, $ref_arguments) = @_ ;
    	$classe = ref($classe)||$classe ;
     
    	my $this = {};
     
    	#On a besoin de sa position, son but, ses niveaux de besoin (accessoirement, de son nom)
    	$this -> {LISTE_LOGS} 	= $ref_arguments -> {liste_logs} ;
     
    	$this -> {_NOM} 	= $ref_arguments -> {nom} ;
    	$this -> {_NUMERO} 	= $ref_arguments -> {numero} ;
     
    	$this -> {POSITION}	= $ref_arguments -> {position} ;	
    	$this -> {OBJECTIF} 	= $ref_arguments -> {objectif} ;
    	$this -> {NEXT_MOVE}	= 0 ;
     
    	$this -> {FAIM}		= $ref_arguments -> {faim} ;		
    	$this -> {FATIGUE}	= $ref_arguments -> {fatigue} ;
    	$this -> {SOLITUDE} 	= $ref_arguments -> {solitude} ;
    	$this -> {ENNUI} 	= $ref_arguments -> {ennui} ;
     
    	$this -> {LAST_ACTION}	= (0,0,0,0);
     
    	# On ajoutera plus tard le niveau hierarchique ...?!
     
    	bless($this, $classe);
    #	print "SOURIS : Souris créée : ". $this ."<br>";
    	$nb_souris++ ;
    	return $this ;
    }
     
    #### Pour le traitement des mouvements, on verra plus tard
    sub entrer_salle{
    	my ($this, $salle, $date) = @_ ;
    	$this -> {POSITION}	= $salle ;
    }
     
    sub sortir_salle{
    	my ($this, $salle, $date) = @_ ;
    	$this -> {POSITION}	= "tuyau" ;
    }
     
     
     
    # Assouvissement des besoins
    sub manger{
    	my ($duree) = @_ || 1;
    	$this -> {FAIM} 	+= $eating_rates{faim}	*$duree ;
    	$this -> {FATIGUE} 	+= $eating_rates{fatigue}*$duree ;
    	$this -> {SOLITUDE} 	+= $eating_rates{solitude}*$duree ;
    	$this -> {ENNUI} 	+= $eating_rates{ennui}	*$duree ;
    	$this -> {LAST_ACTION}	+= (0,1,1,1);
    	$this -> {LAST_ACTION} -> [0] = 0 ;
    }
     
    sub dormir{
    	my ($duree) = @_ || 1;
    	$this -> {FAIM} 	+= $sleeping_rates{faim}*$duree ;
    	$this -> {FATIGUE} 	+= $sleeping_rates{fatigue}*$duree ;
    	$this -> {SOLITUDE} 	+= $sleeping_rates{solitude}*$duree ;
    	$this -> {ENNUI} 	+= $sleeping_rates{ennui}*$duree ;
    	$this -> {LAST_ACTION}	+= (1,0,1,1);
    	$this -> {LAST_ACTION} -> [1] = 0 ;
    }
    sub papoter{	#On ne peut papoter que si on est au moins 2 dans le hall !
    	my ($duree) = @_ || 1;
    	$this -> {FAIM} 	+= $chatting_rates{faim}*$duree ;
    	$this -> {FATIGUE} 	+= $chatting_rates{fatigue}*$duree ;
    	$this -> {SOLITUDE} 	+= $chatting_rates{solitude}*$duree ;
    	$this -> {ENNUI} 	+= $chatting_rates{ennui}*$duree ;
    	$this -> {LAST_ACTION}	+= (1,1,0,1);
    	$this -> {LAST_ACTION} -> [2] = 0 ;
    }
    sub courir{
    	my ($duree) = @_ || 1;
    	$this -> {FAIM} 	+= $running_rates{faim}	*$duree ;
    	$this -> {FATIGUE} 	+= $running_rates{fatigue}*$duree ;
    	$this -> {SOLITUDE} 	+= $running_rates{solitude}*$duree ;
    	$this -> {ENNUI} 	+= $running_rates{ennui}*$duree ;
    	$this -> {LAST_ACTION}	+= (1,1,1,0);
    	$this -> {LAST_ACTION} -> [3] = 0 ;	
    }
     
    sub hesiter{        #Parce qu'une souris ne se décide pas si efficacement qu'on croit !
    	my ($duree) = @_ || 1;
    	$this -> {FAIM} 	+= $waiting_rates{faim}	*$duree ;
    	$this -> {FATIGUE} 	+= $waiting_rates{fatigue}*$duree ;
    	$this -> {SOLITUDE} 	+= $waiting_rates{solitude}*$duree ;
    	$this -> {ENNUI} 	+= $waiting_rates{ennui}*$duree ;
    	$this -> {LAST_ACTION}	= (1,1,1,1);
    }

    Mon programme tournera au tour par tour sur un nombre fini et déterminé de tours.
    Quand la souris se lance dans une activité, c'est pour un certain temps qu'elle "choisit" au préalable (sans pouvoir être interrompue dans un premier temps ; ou bien jusqu'à ce que le niveau de besoin tombe en dessous d'une valeur seuil? à voir)
    Le choix de l'activité sera aléatoire (je vais chercher un savant mélange de ce que tu m'as proposé )

    Bon. Je m'y mets et vais voir ce que ça donne !

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Simuler des besoins (humains ou animaux) comme dans les Sims
    Bonjour,

    Je me doutais que les complications ne manqueraient pas, et indiquais seulement quelques pistes. Je vais tenter de répondre à quelques unes de tes remarques.

    Citation Envoyé par myspanique Voir le message
    Je m'étais penchée en effet sur les chaînes de Markov, mais je voyais mal comment il pouvait n'y avoir aucune mémoire...
    Dans le cas d'école évoqué, la probabilité de passage à l'un des 4 nouveaux états ne dépend que de l'état actuel: le comportement du hamster n'est donc pas influencé par les états précédents.

    Le seul truc, c'est qu'une souris ne peut papoter que si elles sont au moins deux dans la salle ...
    J'avais pensé à un effectif (N) suffisamment important pour qu'une souris donnée puisse à tout moment en trouver une autre, pour la tchatche.
    C'est le nombre de cylindres présents qui m'a un peu intrigué: chacun ne pouvant contenir qu'un petit nombre d'individus actifs, le nombre de souris pratiquant le jogging est sérieusement limité ... à moins qu'il y ait beaucoup de cylindres. Mais c'est à l'observateur d'apprécier ce qui se passe réellement.

    ... on peut se souvenir aussi que la souris est bien plus active la nuit que le jour, et donc augmenter l'attractivité du dormir pendant le jour, et la diminuer la nuit
    Cela me rappelle le boucan nocturne que faisaient deux rats albinos qu'on m'avait donnés, quand j'étais étudiant ...
    Le système fonctionne donc selon deux régimes alternés, que l'on doit pouvoir caractériser par des modifications appropriées.
    La cage est-elle installée dans une salle aveugle, ou pourvue de fenêtres laissant passer la lumière de jour ? C'est assez simple dans le premier cas, puisqu'on bascule d'un régime à l'autre aux heures programmées de l'éclairage; sinon il faudra peut-être intercaler deux régimes transitoires, pour l'arrivée progressive du jour et de la nuit, et pire encore à des moments liés au calendrier.

    ... la cage est composée d'une pièce centrale (sociale) et trois annexes (dodo, manger, et roue), qui sont reliées à la première par un unique tube
    J'avais cru les quatre compartiments en communication directe avec les trois autres, selon un réseau tétraédrique qui aurait permis tous les transferts possibles (1-2, 1-3, ... etc); mais l'arrangement que tu décris impose un rôle central à l'activité sociale (E1), qui se présente à tout animal transitant entre entre les salles (2, 3) et (4).

    Exemple: soit une souris émergeant innocemment des bras de Morphée (E2) et avide d'un petit breakfast consistant (E3 souhaité), qui se fait malheureusement alpaguer en chemin par une fan frénétique de Karl Lagerfeld; celle-ci entreprenant de commenter en détail le dernier défilé, trois issues se présentent alors:
    - une faim tenaillante donne à la première souris la force d'écarter l'importune, et de poursuivre son chemin vers la salle (3);
    - la silhouette gracieusement filiforme du couturier lui rappelle qu'un peu de sport améliorerait son tour de taille, ce qui la propulse vers la salle (4);
    - elle se résigne à subir un monologue affligeant en espérant changer au plus tôt d'interlocutrice et s'installe donc dans l'état (1).

    Toute transition entre les état (2, 3) et (4) devrait donc être immédiatement remise en cause par un tirage aléatoire surnuméraire, débouchant sur les trois éventualités (autres que le retour à l'état d'origine). La probabilité d'installation dans (E1) pourrait être affaiblie dans le cas d'un faible effectif (N1 < 10 ?) et le tirage supprimé si la salle est déserte [N1 = 0).

    ... un unique tube où ne peut passer qu'une seule souris (on les radio détecte) : que faire en cas de rencontre dans un tube?
    Classer les souris selon une hiérarchie nécessairement mouvante - la plus baraquée ou la plus teigneuse faisant reculer l'autre - risque de conduire à une impasse.
    Les tubes relativement étroits ne contenant qu'une faible proportion de la population, ils ne feront pas l'objet d'un décompte particulier, mais contribueront pour moitié à l'augmenter l'effectif des compartiments concernés; tant pis pour les résultats semi-entiers !
    Plus grave serait une obstruction manifeste, produisant un délai d'attente important, de l'ordre du temps se séjour moyen passé dans un compartiment donné ... Il faudrait envisager une limitation du transit, ou envisager des couloirs plus larges.

    Je ne suis pas certaine de voir pourquoi Yi = (Xin) ; ni pourquoi Pi = 1 si Xi = Max(X1, X2, X3, X4) ...
    Faute de mieux, les divers besoins (Xi) sont l'objet d'une évaluation arbitraire, comptée en "déficit de temps d'activité"; c'est bien sûr une démarche raisonnable, mais rien n'interdit la possibilité d'une meilleure représentation des changements d'état par une puissance quelconque de (Xi). Disons qu'on dispose là d'un moyen simple de moduler les probabilités.

    Posons ri = Xi / Xmax ; on obtient dans ces conditions: Yi = (ri*Xmax)n et Pi = rin / (r1n + r2n + r3n + r4n) ; on a par conséquent:
    - si Xi = Xmax , rin = 1 pour toute entier naturel (n);
    - sinon Xi < Xmax et ri < 1 , de sorte que rin tend vers zéro quand (n) augmente indéfiniment.
    D'où le résultat limite du tout-ou-rien: Pi = 1 si Xi = Xmax , sinon Pi = 0 .
    Des calculs simples effectués à partir de la suite { Xi } = { 1, 2, 3, 4 } montrent que l'on peut passer progressivement, selon les valeurs de (n), d'un choix totalement indifférent (Pi = 1 / 4 , pour tout i) à l'issue exclusive précédente (Pi = 0 ou 1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    	   Xi         1         2         3         4  
     
    	    %        P1        P2        P3        P4  
    	    0        25.0      25.0      25.0      25.0
    	   1/10      23.1      24.7      25.7      26.5
    	   1/4       20.3      24.2      26.8      28.7
    	   1/2       16.3      23.0      28.2      32.5
     
                1        10.0      20.0      30.0      40.0
     
                2	      3.33     13.3      30.0      53.3
    	    4         0.282     4.52     22.9      72.3
    	   10      9.02E-5   9.24E-2      5.33     94.6
             infini	       0         0        0       100
    Mon programme tournera au tour par tour sur un nombre fini et déterminé de tours.
    Quand la souris se lance dans une activité, c'est pour un certain temps qu'elle "choisit" au préalable (sans pouvoir être interrompue dans un premier temps ; ou bien jusqu'à ce que le niveau de besoin tombe en dessous d'une valeur seuil?
    L'évolution du système est décrite par une relation de récurrence Uk+1 = f(Uk) qui implique une discrétisation du temps; il faut donc connaître au moins d'une manière approchée, le plus grand commun diviseur T = tk+1 - tk aux durées moyennes de séjour (T1, T2, T3, T4) dans chacun des quatre états.
    Cela serait épatant de trouver T = T1 , ou tout au moins T1 = Min(T1, T2, T3, T4) , mais les souris font ce qu'elles veulent ! Et je n'ai d'ailleurs aucune idée des temps observés (5 ? 10 ? 30 min?).
    Le prolongement d'un état donné - par exemple l'état de sommeil (E2) - et l'augmentation de sa durée moyenne (T2) devraient aisément être obtenus en faisant du besoin correspondant (X2) une fonction croissante, puis décroissante de l'indice historique (K2).

    Bon courage. W.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Membre à l'essai Avatar de myspanique
    Femme Profil pro
    Prof de maths + Stagiaire en informatique
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prof de maths + Stagiaire en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour !

    Waw, merci pour ta copieuse réponse. J'ai de quoi occuper ma journée, là

    Pour remettre les choses en contexte : à l'origine, je code un programme permettant de récupérer et traiter le résultat d'une expérience consistant en l'observation du comportement d'une souris dans son groupe et son environnement enrichi.
    Pour de nombreuses raisons techniques, l'observation se fait par détection RFID. Le souris sont pucées, et on a aménagé la cage en lui ajoutant 3 salles spécialisées, et en posant des capteurs à l'entrée (d'où les tubes, et d'où la nécessité qu'elles ne puissent pas s'y croiser, afin de limiter les interférences).
    Une pour dormir, une pour manger, une pour la roue. On sait pertinemment que la souris fait ce qu'elle veut où elle veut, mais on va essayer de limiter au plus... et calibrer les résultats avec pas mal d'intervalles de confiance...
    Enfin, techniquement, ce que mon programme traite, ce sont des "logs" m'indiquant que telle puce est passée sous tel capteur à tel moment.
    Comme il y a deux capteurs par tube, je sais dans quel sens elle va, et j'en déduis combien de temps elle a passé dans la pièce (encore une fois, aux pertes de données près. Tout ceci est très expérimental... ça tombe bien, je bosse pour la recherche )
    L'objectif de ce que je fais là maintenant aujourd'hui, c'est de mettre en place un "générateur" de logs, un minimum crédible, tant que la cage n'est pas installée avec des souris dedans, et que je n'ai pas de vrai résultat.
    Et comme je prend l'exercice à coeur, je pousse le vice jusqu'à imaginer un modèle... (parce qu'un générateur "bête et méchant", j'en ai un, mais je ne m'en contente pas :o )

    Tout ça pour dire, que je vais quand même commencer doucement, parce que ce que je fais n'a rien d'urgent ni d'obligatoire ; mais que je vais aussi quand même tenter de gérer les complications, parce que ça m’intéresse, et c'est formateur !
    (Au passage, ravie que ça t'inspire, ça me rend bien service , merci encore !)

    Et pour dire aussi que :
    * Je vais choisir comme unité de temps minimale un truc assez petit, comme le temps qu'il faut à la souris pour traverser le tube, car ça sera utile pour mes logs. Donc en gros... 1 ou 2 secondes, mais pas plus :o J'imagine que concrètement, les observations pourront durer jusqu'à plusieurs jours, ça fait beaucoup de secondes... Mais pas forcément utile de demander une telle chose à mon générateur ; et à vrai dire, je l'ai déjà demandé à mon modèle basique 1.0 (1.1 en fait, mais on s'en fiche ^^ ), ça prend juste un peu de temps, mais il gère.
    * A propos d'ailleurs de tube, si, la hiérarchie va entrer
    * Il y aura à priori deux roues. Pour max une quinzaine de souris. Mais ces coquines sont capables d'être plusieurs sur une même... à voir à l'usage.
    * La pièce centrale comporte des jeux. A l'origine ce devait être un pièce "neutre". C'est un peu les circonstances (et moi) qui en ont fait une pièce de sociabilisation. Mais j'avoue que ça m'arrange pour la modélisation. Cela dit, une souris peut y passer du temps même seule. Techniquement, elle ne sociabilisera pas. Mais cela assouvira peut être son besoin de solitude, qui sait? ^^ (en ont-elles un? Et comme je demandais hier à un ami, ont-elles une âme? ) Mais effectivement je pense qu'à 15, elles seront rarement seules où que ce soit !
    * Le souris sont en animalerie, donc le soucis du jour et de la nuit est assez basique : on allume la lumière automatiquement à 7h , et on l'éteint à 19h.

    Exemple: soit une souris émergeant innocemment des bras de Morphée (E2) et avide d'un petit breakfast consistant (E3 souhaité), qui se fait malheureusement alpaguer en chemin par une fan frénétique de Karl Lagerfeld; celle-ci entreprenant de commenter en détail le dernier défilé, trois issues se présentent alors:
    - une faim tenaillante donne à la première souris la force d'écarter l'importune, et de poursuivre son chemin vers la salle (3);
    - la silhouette gracieusement filiforme du couturier lui rappelle qu'un peu de sport améliorerait son tour de taille, ce qui la propulse vers la salle (4);
    - elle se résigne à subir un monologue affligeant en espérant changer au plus tôt d'interlocutrice et s'installe donc dans l'état (1).

    J'aime ta manière de présenter les choses ^^ C'est tout à fait ça.

    Toute transition entre les état (2, 3) et (4) devrait donc être immédiatement remise en cause par un tirage aléatoire surnuméraire, débouchant sur les trois éventualités (autres que le retour à l'état d'origine). La probabilité d'installation dans (E1) pourrait être affaiblie dans le cas d'un faible effectif (N1 < 10 ?) et le tirage supprimé si la salle est déserte [N1 = 0).
    Pourquoi pas l'état d'origine? s'il lui reste pour une raison ou une autre un peu de besoin à assouvir...?!
    En fait les souris ayant des raisons que notre raison ignore, je serais même allée plus loin, en effectuant ce tirage de manière systématique. Restent à trouver les coefficients de probabilité qui feront que les changements d'avis restent raisonnables...


    Bon. J'avais d'autres remarques et questions mais j'ai été appelée ailleurs. Je reprendrai ça mardi !
    (wiwakia... parce que tu as des épines? )

Discussions similaires

  1. accès web comme dans les hotels
    Par cyrianox dans le forum Debian
    Réponses: 3
    Dernier message: 19/04/2011, 14h31
  2. Réponses: 0
    Dernier message: 23/03/2010, 14h39
  3. Réponses: 2
    Dernier message: 04/09/2009, 19h26
  4. Réponses: 1
    Dernier message: 01/07/2006, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo