Si je classe les couples avec le nombre de "oui", un 7 "oui" pour 8 "swipes" gagne sur un 6/6.
En même temps je n'ai pas envie qu'un 3/3 gagne par rapport à un 7/8.
Je proposais : (nb Oui)/(1+nb apparitions)
Il reste un problème, c'est que une fois que tu as associé avec , est casé, et tu ne peux plus l'associer avec un autre. Et peut-être que pour le bon équilibre 'global', ça aurait été mieux de garder pour une autre personne.
lyceen95 a écrit:1) on calcule la proportion de Oui sur la totalité des votes
lyceen95 a écrit:pour un nombre n de votes, on sait calculer l'espérance et l'écart-type (je n'ai pas la formule de tête) pour une succession de votes totalement aléatoires avec tous une probabilité de donner Oui.
lyceen95 a écrit:3) on peut donc normaliser les données : si on a votes oui, l'indicateur intéressant est Et on peut classer tous les couples sur ce critère.
Avec seulement 18 personnes, je pense qu'une démarche 'force brute' permet de trouver la meilleure solution, avec un traitement qui prendra quelques secondes.
{
"id": 48,
"k1": "robert",
"k2": "cunegonde",
"name": "Robert & Cunégonde",
"swipes": 4,
"yes": 4,
"no": 0,
"appear": 1.1560693641618498,
"score": 0.35714285714285715
},
{
"id": 85,
"k1": "rodolphe",
"k2": "germaine",
"name": "Rodolphe & Germaine",
"swipes": 4,
"yes": 4,
"no": 0,
"appear": 1.1560693641618498,
"score": 0.35714285714285715
}
type qenreg struct {
i1 int
i2 int // i1 et i2 sont les n° des 2 personnes en question
nbv int // nbVotes à propos de ce couple
nbp int // nb Plus pour ce couple
}
for i := 0; i < 8; i++ {
i1, i2 := f10_bestcouple(tbenreg, 17-2*i)
tbenreg = f10_nettoie(tbenreg, i1, i2)
fmt.Println(i1, i2)
}
func f10_bestcouple(tb []qenreg, nnnb int) (int, int) {
var i1, i2 int
var sumVotes [18]int
var sumPlus [18]int
var enreg qenreg
var bestrg int
var bestNote int
for i := 0; i < len(tb); i++ {
enreg = tb[i]
i0 := enreg.i1
sumVotes[i0] += enreg.nbv
sumPlus[i0] += enreg.nbp
i0 = enreg.i2
sumVotes[i0] += enreg.nbv
sumPlus[i0] += enreg.nbp
}
bestrg = 0
bestNote = -100000
for j := 0; j < len(tb); j++ {
enreg = tb[j]
ii1 := enreg.i1
ii2 := enreg.i2
znote := 20000*(enreg.nbp+1)/(enreg.nbv+2) - (10000*sumPlus[ii1]/sumVotes[ii1]) - (10000*sumPlus[ii2]/sumVotes[ii2])
if znote > bestNote {
bestNote = znote
bestrg = j
}
}
enreg = tb[bestrg]
i1 = enreg.i1
i2 = enreg.i2
return i1, i2
}
func f10_nettoie(tb []qenreg, ii1 int, ii2 int) []qenreg {
var t0 []qenreg
var ee qenreg
for i := 0; i < len(tb); i++ {
ee = tb[i]
if ee.i1 != ii1 && ee.i1 != ii2 && ee.i2 != ii1 && ee.i2 != ii2 {
t0 = append(t0, ee)
}
}
return t0
}
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 73 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :