forked from martingouy/asses
-
Notifications
You must be signed in to change notification settings - Fork 5
/
methods.py
96 lines (80 loc) · 3.81 KB
/
methods.py
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
92
93
94
95
96
def PE_old(p,c):
#p -> proba
#c -> choix 0= choix sur 1= choix lotterie
if c == 0:
return p + (1 - p)/4
else:
return p / 4
##############Programme PE##############################################################
def PE(min_interval,max_interval,p,choix, mode):
#min_interval=0; p=0.75; max_interval=1
if mode == 'reversed':
choix = (choix + 1)%2
liste=[min_interval,max_interval]
if choix==1:
max_interval=p #la borne max est remplacee par la nouvelle valeur
p=round(p/4,2) #au premier abord, on divise p par 4
if p<min_interval:
p=round(min_interval+(max_interval-min_interval)/4,2)
liste=[min_interval,max_interval] #pas la peine de renvoyer la valeur de p car max_interval=p
return({"interval": liste,"proba": p})
else:
min_interval=p
p=round(max_interval-(max_interval-min_interval)/4,2)
liste=[min_interval,max_interval]
return({"interval": liste,"proba": p})
###################Programme LE##########################################################
def LE(min_interval,max_interval,p,choix, mode):#sachant que p1 va etre egale soit a 0.38 soit a 0.13
#min_interval= 0; p = 0.47; max_interval = 0.5;
if mode == 'reversed':
choix = (choix + 1)%2
liste=[min_interval,max_interval] #p = probabilite qui s affiche
if choix==0: #choix = 0 correspond a la lotterie de gauche (celle dont la probabilite change)
max_interval=p
p=round(p/4,2)
if min_interval>p:
p=round(min_interval+(max_interval-min_interval)/4,2)
liste=[min_interval,max_interval]
return({"interval": liste,"proba": p})
else: # choix = 1 correspond a la lotterie de droite (celle qui ne change pas)
min_interval=p
p=round(max_interval-(max_interval-p)/4,2)
liste=[min_interval,max_interval]
return({"interval": liste,"proba": p})
# pour ensuite les deux autres questionnaires il suffit de modifier la valeur max de la lotterie de droite (celle qui ne change pas) si au debut les bornes sont de [0,50], elles sont ensuite de [0,25] puis de [0,75]
#################Programme CE probabilite constante######################################
# from random import *
# L = [0.75*(valeurmax-valeurmin)+valeurmin, 0.25*(valeurmax-valeurmin)+valeurmin]
# gain = choice(L)
def CE(valeurmin,valeurmax,gain,choix, mode):
if mode == 'reversed':
choix = (choix + 1)%2
Liste=[valeurmin,valeurmax]
if choix == 1: #choix = 1 correspond a l equivalent certain (comme pour la PE)
valeurmax = gain
gain = round(valeurmin + ((valeurmax-valeurmin)/4),0)
liste = [valeurmin,valeurmax]
return ({"interval": liste,"gain": gain})
else:
valeurmin = gain
gain = round(valeurmax - ((valeurmax-valeurmin)/4),0)
liste = [valeurmin,valeurmax]
return ({"interval": liste,"gain": gain})
# pour les deux autres questionnaires, il suffit de recuperer la valeur du gain (que je note gain1) en fin de questionnaire 1 et le nouvel intervalle est alors: [valeurmin,gain1]. Pour le 3eme questionnaire l intervalle est [gain1,valeurmin]
###################Programme CE probabilite variable######################################
def CEPV(valeurmin,valeurmax,gain,p,choix, mode):
if mode == 'reversed':
choix = (choix + 1)%2
Liste=[valeurmin,valeurmax]
if choix == 1: #choix = 1 correspond a l equivalent certain (comme pour la PE)
valeurmax = gain
gain = round(valeurmin + ((valeurmax-valeurmin)/4),0)
liste = [valeurmin,valeurmax]
return ({"interval": liste,"gain": gain})
else:
valeurmin = gain
gain = round(valeurmax - ((valeurmax-valeurmin)/4),0)
liste = [valeurmin,valeurmax]
return ({"interval": liste,"gain": gain})
# pour les differents questionnaires seule la probabilite de la lotterie va changer: elle passe de 0.5 a 0.25 puis 0.75
# le code est exactement le meme