Simulation de population

Programmation d'applications complexes
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Simulation de population

Message par Thyphoon »

Bonjour,

je profite d'être bloqué chez moi pendant une semaine, pour jouer avec la dernière version de Purebasic.
Ce langage est vraiment de mieux en mieux. :D

J'ai un projet qui traîne depuis quelques années dans mes cartons.
il s'agit de créer une simulation de population pour créer des soirées enquêtes.

L'idée est de partir d'un lieu totalement vierge, genre une île. de faire venir a une certaine date un certain nombre de personne... que ces personnes evoluent, se marient, aient des enfants qui eux aussi évoluent, se marient ont des enfants etc... et que de tant a autre je puisse rajouter l'arrivé de nouvelle personne. etc, etc....

L'idée est peu a peu de poussé le vis, que l'algo intègre le choix d'un travaille, des amis, des maladies, des accidents, Des lieu d'habitations, des déménagements etc...

voici un tout debut de code qui ne gère qu'une première génération ... qu'en pensez vous ? si vous avez des suggestions pour organiser mieux le code je suis preneur.

Code : Tout sélectionner

Structure populate
  currentDate.i
  ageMin.l
  ageMax.l
EndStructure


Structure person
  mother.i
  father.i
  origine.s
  birthday.i
  deathday.i
  sex.b
  firstname.s
  name.s
  birthName.s
  married.i
  weddingday.i
  nbChildren.l
EndStructure


Global Dim person.person(0)
InitNetwork()

Procedure newName(z,firstnameOnly=#False)
  url$="http://www.behindthename.com/random/random.php?number=2"
  If person(z)\sex=0
    url$=url$+"&gender=m"
  Else
    url$=url$+"&gender=m"
  EndIf
  url$=url$+"&surname=&all=no"
  Select LCase(person(z)\origine)
    Case "English"
      url$=url$+"&usage_eng=1"
    Case  "African"
      url$=url$+"&usage_afr=1"
    Case "French"
      url$=url$+"usage_fre=1"
    Case "Chinese"
      url$=url$+"usage_chi=1"
    Default 
      url$=url$+"&usage_afr=1"
  EndSelect
  FileName$=GetTemporaryDirectory()+"tmp.txt"
  ReceiveHTTPFile(url$, FileName$)
  
  code$=""
  If ReadFile(0, GetTemporaryDirectory()+"tmp.txt")  
    While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      code$=code$+ReadString(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(0)
  EndIf
  
  s.l=FindString(code$,"Your random name is:",0)
  s.l=FindString(code$,"<a href=",s)
  Repeat
    s=s+1
  Until Mid(code$,s,1)=">"
  e=s
  Repeat
    e=e+1
  Until Mid(code$,e,1)="<"
  person(z)\firstname=Mid(code$,s+1,e-s-1)
  If firstnameOnly=#False
    s=e
    s.l=FindString(code$,"<a href=",s)
    Repeat
      s=s+1
    Until Mid(code$,s,1)=">"
    e=s
    Repeat
      e=e+1
    Until Mid(code$,e,1)="<"
    person(z)\name=Mid(code$,s+1,e-s-1)
  EndIf
EndProcedure

Procedure addperson(birthday.i,deathday.i,father.i=-1,mother.i=-1)
  ;We add a new person in array
  size=ArraySize(person())+1
  ReDim person.person(size)
  n=size-1
  person(n)\father=father
  person(n)\mother=mother
  If mother=-1
    person(n)\birthday=birthday
  Else
    person(n)\birthday=person(mother)\weddingday
  EndIf
  person(n)\deathday=deathday
  person(n)\sex=Random(1) ; 0 = Male and 1 = Femmel 
  person(n)\married=-1
  If mother>-1
    NewName(n,#True)
    If father>-1
      person(n)\name=person(father)\name
    Else
      person(n)\name=person(mother)\name
    EndIf
  Else
    NewName(n,#False)
    
  EndIf
  Debug Str(n)+" "+person(n)\firstname+" "+person(n)\name
EndProcedure

Procedure Live(number.l,*populate.populate)
  fromPerson=ArraySize(person())
  toPerson=fromperson+number
  For z=0 To toPerson
    age.l=Random(*populate\ageMax,*populate\ageMin)
    birthday.i=*populate\currentDate-age
    deathday.i=birthday+Random(70,age)
    addperson(birthday,deathday)
    
  Next
  
  For z=0 To toPerson
    sex.b=person(z)\sex
    If person(z)\married=-1 And person(z)\sex=0
      For w=0 To toPerson
        If person(w)\married=-1 And person(w)\sex=1 And                                                          ;If a man and not married
           person(w)\birthday>=person(z)\birthday-5 And person(w)\birthday<=person(z)\birthday And              ;if man and woman have the same age (5 year)
           ((person(w)\mother<>person(z)\mother And person(w)\father<>person(z)\father) Or person(z)\mother=-1) ;must 
          
          weddingday=person(w)\birthday+Random(45,16)
          If person(w)\deathday>weddingday And person(z)\deathday>weddingday
            person(n)\weddingday=weddingday
            person(z)\married=w
            person(w)\married=z
            Debug Str(person(z)\married)+" with "+Str(person(w)\married)
            person(w)\birthName=person(w)\name
            person(w)\name=person(z)\name
            nbChildren=Random(5,0)
            year=0
            Debug "child from "+person(z)\firstname+" "+person(z)\name+" and "+person(w)\firstname+" "+person(w)\name
            For child=1 To nbChildren
              year=year+1
              birthday=person(w)\weddingday+year
              addperson(birthday,birthday+Random(80),z,w)
            Next
          EndIf
          Break
        EndIf
      Next
    EndIf
   Next
EndProcedure

;Une première arrivée de personne
populate.populate
populate\currentDate=1750
populate\ageMin=13
populate\ageMax=50

live(20,@populate)

Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Simulation de population

Message par graph100 »

c'est rigolo !

ce qui serai super c'est que tu conçoives bien tout ton système de manière à pouvoir créer une sorte de représentation graphique ensuite.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Simulation de population

Message par Thyphoon »

graph100 a écrit :c'est rigolo !

ce qui serai super c'est que tu conçoives bien tout ton système de manière à pouvoir créer une sorte de représentation graphique ensuite.
Le but est d'avoir une jolie interface pour éditer chaque profile, et effectivement afficher des arbres généalogiques, etc... Mais aussi editer des registres d'eglise, de mairie, des emplacements dans des cimetières etc.... tout ce qu'on peut imaginer. Ce qui permettra d'être consulter durant des soirées enquêtes ... :)
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Simulation de population

Message par G-Rom »

je partirais plutôt avec se type de système :

Code : Tout sélectionner

#CPLBATOR = #BADF00D
#GOD      = #CPLBATOR

Structure person
  *mother.person
  *father.person
  List *brother.person()
  List *sister.person()
  
  ; ...
EndStructure


FirstMale.person
FirstFemale.person

FirstMale\mother = #GOD
FirstMale\father = #GOD

FirstFemale\mother = #GOD
FirstFemale\father = #GOD
Bien sur , y en a que 2 , tu peu partir sur une liste ou plusieurs listes ( différente race ? ) de population.
L'avantage, tu peu faire des arbres généalogique !
Prévois aussi le mariage du même sexe :D
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Simulation de population

Message par Ar-S »

il s'agit de créer une simulation de population pour créer des soirées enquêtes.
Excellent ça.
Un gros taf en perspective.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Simulation de population

Message par Thyphoon »

G-Rom a écrit :je partirais plutôt avec se type de système :
Merci c'est une très bonne idée...mais est ce que ça ne va pas être genant si je veux utiliser une base donnée sqlite plus tard ?
Je vais faire des tests
G-Rom a écrit : tu peu partir sur une liste ou plusieurs listes ( différente race ? ) de population.
L'avantage, tu peu faire des arbres généalogique !
J'ai déjà un scénario d'une île desserte qui a été peuplé par des personnes d'origine Africaines suite au naufrage d'un bateau négrier en 1752, et qui 50 ans plus tard a été redécouvert par les anglais qui sont venu aussi s'y installer...
G-Rom a écrit :Prévois aussi le mariage du même sexe :D
Je vais essayer de prévoir un maximum de possibilité ^_^ ! Ausi les accouchements sur X, les orphelinats, etc...
Ar-S a écrit : Excellent ça.
Un gros taf en perspective.
Effectivement c'est un gros boulot, c'est pour ça que pour l'instant je reflechis a la meilleur façon de m'organisé pour qu'apres l'intégration de tout les paramètres soit le plus simple ..:P
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Simulation de population

Message par Ar-S »

Quitte à bien pensé le truc, tu devrais en amont créer des "univers". Avant même homme/femme.
Sachant que pour des soirées enquêtes, on peut partir sur de la SF, du contemporain, une époque passée etc...
Selon le thème, tu retrouveras des points communs mais d'autres inédits dans tes fiches de persos.
Une des premières soirée enquête que j'ai découvert était purement SF : En effet, Dieu avait été assassiné et plusieurs personnages "fantastiques" entraient en jeu. Des anges, des anges déchus, des extraterrestres etc.. !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Simulation de population

Message par Thyphoon »

Ar-S a écrit :Quitte à bien pensé le truc, tu devrais en amont créer des "univers". Avant même homme/femme.
Sachant que pour des soirées enquêtes, on peut partir sur de la SF, du contemporain, une époque passée etc...
Selon le thème, tu retrouveras des points communs mais d'autres inédits dans tes fiches de persos.
Une des premières soirée enquête que j'ai découvert était purement SF : En effet, Dieu avait été assassiné et plusieurs personnages "fantastiques" entraient en jeu. Des anges, des anges déchus, des extraterrestres etc.. !
C'est pas bête du tout je vais étudier ça! la soirée enquête que tu as fait je crois la connaitre elle s’appelle "Dieu est mort" je crois :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Simulation de population

Message par Backup »

heu !.. c'est quoi une soirée enquete ?? 8O
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Simulation de population

Message par falsam »

Dobro a écrit :heu !.. c'est quoi une soirée enquete ?? 8O
Il n'y a pas que moi qui suis fatigué : http://fr.wikipedia.org/wiki/Soir%C3%A9e_enqu%C3%AAte
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Simulation de population

Message par Backup »

ha mais , je ne connais pas du tout !! 8O
on ne peut pas tout savoir hein ... :mrgreen: (meme MOA ! :lol:)
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Simulation de population

Message par Thyphoon »

Dobro a écrit :ha mais , je ne connais pas du tout !! 8O
on ne peut pas tout savoir hein ... :mrgreen: (meme MOA ! :lol:)
Salut Dobro !
si tu connais pas il faut essayer au moins une fois c'est très sympa !! :)


Bientôt une nouvelle version du code ! :D
Répondre