Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.60 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. from random import random
  4.  
  5. class hopital:
  6.     def __init__(self, lits):
  7.         self.lits = [0]*lits
  8.         self.sauves = 0
  9.         self.morts = 0
  10.  
  11. class crise:
  12.     def __init__(self, duree, frequence):
  13.         # duree de la crise en jours
  14.         self.duree = duree
  15.         # 0 < frequence < 100 : probabilité qu'un patient se présente chaque jour
  16.         self.frequence = frequence/100
  17.  
  18. class patient:
  19.     def __init__(self, santee):
  20.         # santee est un coefficient entre 0.0 et 1.0 qui va déterminer les chances de survie et la durée de soin
  21.         self.survie = santee
  22.         # jours necessaires pour le traitement, on considère 20 jours de base
  23.         # (selon les témoignages des medecins relayés par la presse)
  24.         # et on pondère selon l'état de santé de +/- 3 jours
  25.         self.duree = 20 + int((3*(1-santee)*([1,-1][santee>0.5])))
  26.  
  27. def print_lits(hopital):
  28.     lits = []
  29.     for place in hopital.lits:
  30.         if place is not 0:
  31.             lits.append(place.duree)
  32.         else:
  33.             lits.append(0)
  34.     print(lits)
  35.     print(f"sauves: {hopital.sauves} - morts: {hopital.morts}")
  36.     del(lits)
  37.  
  38. def maj_duree(hopital):
  39.     for i in range(len(hopital.lits)):
  40.         if hopital.lits[i] is not 0:
  41.             patient = hopital.lits[i]
  42.             if patient.duree == 1:
  43.                 # on tire au sort pondéré si le patient s'en est sorti ou non
  44.                 etat = random() + patient.survie
  45.                 if etat >= 1:
  46.                     #print("- un patient a fini son traitement et a survecu")
  47.                     hopital.sauves += 1
  48.                 else:
  49.                     #print("- un patient a fini son traitement mais a succombé")
  50.                     hopital.morts += 1
  51.                 # on libère le lit
  52.                 hopital.lits[i] = 0
  53.             else:
  54.                 patient.duree -= 1
  55.     #print_lits(hopital)
  56.  
  57. def strategie_destin(hopital):
  58.     # est-ce qu'il y a un lit disponible ?
  59.     if 0 in hopital.lits:
  60.         # si oui on le donne au patient peut importe ses constantes
  61.         hopital.lits[hopital.lits.index(0)] = patient(random())
  62.     else:
  63.         #print("- un patient est mort car aucun lit n'est disponible")
  64.         hopital.morts += 1
  65.  
  66. def strategie_meilleures_chances(hopital, seuil):
  67.     # est-ce qu'il y a un lit disponible ?
  68.     if 0 in hopital.lits:
  69.         p = patient(random())
  70.         # si oui on le donne au patient seulement s'il a plus de seuil % de chances de survie
  71.         if p.survie >= seuil/100:
  72.             hopital.lits[hopital.lits.index(0)] = p
  73.         else:
  74.             #print("- un patient est mort car il avait trop peu de chances pour avoir un lit")
  75.             hopital.morts += 1
  76.     else:
  77.         #print("- un patient est mort car aucun lit n'est disponible")
  78.         hopital.morts += 1
  79.  
  80.  
  81. def simulation_crise(hopital, crise, strategie, seuil):
  82.     for jour in range(crise.duree):
  83.         #print(f"JOUR {jour}")
  84.         # un nouveau jour est passé pour tous les patients déjà présents
  85.         maj_duree(hopital)
  86.         # est-ce qu'un patient se présente ?
  87.         if random() + crise.frequence >= 1:
  88.             #print("- un patient se présente")
  89.             # si oui, on applique la stratégie choisie :
  90.             if strategie == "meilleures_chances":
  91.                 # on donne un lit que si la personne a suffisament de chances de s'en sortir
  92.                 strategie_meilleures_chances(hopital, seuil)
  93.             elif strategie == "reallouer":
  94.                 # quand une personne arrive avec de meilleures chances, qu'une qui a deja un lit
  95.                 # on lui donne le lit de cette personne
  96.                 strategie_reallouer(hopital)
  97.             else:
  98.                 strategie_destin(hopital)
  99.     # la crise est finie, plus aucun malade ne rentre mais il y en a encore dans les lits
  100.     places = len(hopital.lits)
  101.     while hopital.lits.count(0) < places:
  102.         maj_duree(hopital)
  103.     # on comptabilise
  104.     #print(f"TOTAL: {hopital.sauves+hopital.morts}\nVIES SAUVEES : {hopital.sauves} ({int(100*hopital.sauves/(hopital.sauves+hopital.morts))})%")
  105.     return (hopital.sauves, hopital.morts)
  106.  
  107. lits = 1000
  108. duree = 10000
  109. freq = 80
  110.  
  111. mc = simulation_crise(hopital(lits), crise(duree, freq), "meilleures_chances", 50)
  112. dest = simulation_crise(hopital(lits), crise(duree, freq), "destin", 0)
  113.  
  114. print("--- COMPARAISON")
  115. print(f"Meilleures chances:\t TOTAL: {mc[0]+mc[1]} - VIES SAUVEES : {mc[0]} ({int(100*mc[0]/(mc[0]+mc[1]))})%")
  116. print(f"Destin:\t\t\t TOTAL: {dest[0]+dest[1]} - VIES SAUVEES : {dest[0]} ({int(100*dest[0]/(dest[0]+dest[1]))})%")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement