[php/MySQL] Tirage au sort avec pondération
40 messages
• Page 3 sur 3 • 1, 2, 3
-

moktoipas - WRInaute passionné

- Messages: 2326
- Inscription: 29 Juin 2004
ben le mysql c une ecriture disque...le table php c'est une ecriture ram, c'est pas du tout pareil en terme de perfs !
(et en cas de modification de force, j'ai qu'ne ligne a changer)
lui il change souvent les force des hamster soit dit en passant (en fonction de l'activité des hamsters sur le site (a) )
donc je pense que c'est mieux.
mais effectivement pour un cas ou on change pas souvent la force des hamsters, c'est mieux de plus utiliser mysql
il faudrai qu'il s'ammuse a faire des tests de perfs

(et en cas de modification de force, j'ai qu'ne ligne a changer)
lui il change souvent les force des hamster soit dit en passant (en fonction de l'activité des hamsters sur le site (a) )
donc je pense que c'est mieux.
mais effectivement pour un cas ou on change pas souvent la force des hamsters, c'est mieux de plus utiliser mysql
il faudrai qu'il s'ammuse a faire des tests de perfs
-

rog - WRInaute passionné

- Messages: 1662
- Inscription: 21 Sep 2006
1 - 500
2 - 1000
3 - 2000
= 3500
si on divise par 500, on obient 7
sur 7 affichages on devrait avoir
une fois le 1
deux fois le 2
quatre fois le 3
on pourrait facilement coder un proof of concept :
tu rajoutes un champs ou tu incremente les selections et tu lances une boucle de 70, si tu obtiens
1 - 500 [10]
2 - 1000 [20]
3 - 2000 [40]
tu obtiendras aussi mon respect et toutes mes excuses
rog
2 - 1000
3 - 2000
= 3500
si on divise par 500, on obient 7
sur 7 affichages on devrait avoir
une fois le 1
deux fois le 2
quatre fois le 3
on pourrait facilement coder un proof of concept :
tu rajoutes un champs ou tu incremente les selections et tu lances une boucle de 70, si tu obtiens
1 - 500 [10]
2 - 1000 [20]
3 - 2000 [40]
tu obtiendras aussi mon respect et toutes mes excuses
rog
-

moktoipas - WRInaute passionné

- Messages: 2326
- Inscription: 29 Juin 2004
[LIEN MORT]
- Code: Tout sélectionner
$hamster[0]=500;
$hamster[1]=1000;
$hamster[2]=2000;
function poc($hamster)
{
$forcetotaledeshamster=3500;
$monrandom=rand (0,$forcetotaledeshamster);
$a=0;
$trouve=false;
while (!$trouve)
{
$monrandom-=$hamster[$a];
if ($monrandom<=0)
{
$trouve=true;
$result=$a;
}
$a++;
}
return $result;
}
$result[0]=0;
$result[1]=0;
$result[2]=0;
for ($aa=0;$aa<700;$aa++)
{
$result[poc($hamster)]++;
}
foreach ($result as $in=>$val)
{
echo $in." - ".$hamster[$in]." [".$val."]<br>";
}
Dernière édition par moktoipas le Mer Sep 03, 2008 23:08, édité 1 fois.
-

rog - WRInaute passionné

- Messages: 1662
- Inscription: 21 Sep 2006
ça marche plutôt bien, je n'ai pas pu m'empêcher de le rogiser
rog
- Code: Tout sélectionner
error_reporting(E_ALL);
#
$hamster[0]=500;
$hamster[1]=1000;
$hamster[2]=2000;
$hamster[3]=2000;
$hamster[4]=500;
define('FORCE_HAMSTER',array_sum($hamster));
#
function poc($hamster){
#
$monrandom = rand(0,FORCE_HAMSTER);
$a = 0;
$trouve = false;
#
while(!$trouve)
{
$monrandom -= $hamster[$a];
#
if ($monrandom <= 0)
{
$trouve = true;
$result = $a;
}
$a++;
}
return $result;
}
#
$result = array();
#
for($i = 0; $i < count($hamster); $i++)
{
$result[$i] = 0;
}
#
for ($a = 0; $a < 800; $a++)
{
$result[poc($hamster)]++;
}
#
foreach ($result as $in=>$val)
{
echo $in." - ".$hamster[$in]." [".$val."]<br>";
}
rog
-

rog - WRInaute passionné

- Messages: 1662
- Inscription: 21 Sep 2006
oups
comme ça au reveil c'est un peu agressif
ce qui me gênait dans ce concept c'est la totale dependance de la pertinence de la fonction rand(), le poc est très bien mais le comportement de la fonction à l'interieur d'une boucle n'est pas forcement le même que lorsqu'elle est lancée à intervalles irréguliers
j'ai donc fait un poc qui randomise les intervalles
la derivation de pertinence n'excede pas 20%
edit : a 1000 la derivation descend au dessous de 10%
re edit : resultat sur 6000 requêtes
pour obtenir une derivation de pertinence de 0 on devra tenir compte d'une statistique de selection dans l'algo
rog[/quote]
comme ça au reveil c'est un peu agressif
ce qui me gênait dans ce concept c'est la totale dependance de la pertinence de la fonction rand(), le poc est très bien mais le comportement de la fonction à l'interieur d'une boucle n'est pas forcement le même que lorsqu'elle est lancée à intervalles irréguliers
j'ai donc fait un poc qui randomise les intervalles
- Code: Tout sélectionner
error_reporting(E_ALL);
#
$sleep = rand(1,3);
sleep($sleep);
#
session_start();
#
if(!isset($_SESSION['loop']))
{
$_SESSION['hamster'][0] = 500;
$_SESSION['hamster'][1] = 1000;
$_SESSION['hamster'][2] = 2000;
$_SESSION['hamster'][3] = 2000;
$_SESSION['hamster'][4] = 500;
#
$_SESSION['result'][0] = 0;
$_SESSION['result'][1] = 0;
$_SESSION['result'][2] = 0;
$_SESSION['result'][3] = 0;
$_SESSION['result'][4] = 0;
#
$_SESSION['FORCE_HAMSTER'] = array_sum($_SESSION['hamster']);
$_SESSION['loop'] = 0;
}
#
$_SESSION['loop']++;
#
$_SESSION['result'][poc()]++;
#
$display = "<li> boucle n° : ".$_SESSION['loop'];
#
foreach ($_SESSION['result'] as $in=>$val)
{
$display .= "<br> hamster n° : ".($in + 1)." - force : ".$_SESSION['hamster'][$in]." cumul des requêtes : {$val} - derivation : ".pertinence($in)."<br>";
}
#
if($_SESSION['loop'] < 6000)
{
$display .= ("<SCRIPT LANGUAGE=\"JavaScript\"> document.location.href=\"".$_SERVER['PHP_SELF']."\"</script>");
}
echo($display);
flush();
#
# counter reset
#session_destroy();
#
##############################################################################################################
function poc(){
##############################################################################################################
$monrandom = rand(1,$_SESSION['FORCE_HAMSTER']);
$a = 0;
$trouve = false;
#
while(!$trouve)
{
$monrandom -= $_SESSION['hamster'][$a];
#
if ($monrandom <= 0)
{
$trouve = true;
$result = $a;
}
$a++;
}
return $result;
}
##############################################################################################################
function pertinence($index){
##############################################################################################################
#
$coef = $_SESSION['FORCE_HAMSTER'] / $_SESSION['loop'];
# cumul hamster réaligné
$realign = $_SESSION['result'][$index] * $coef;
#
$pertinence = round($realign / $_SESSION['hamster'][$index],2);
#
return $pertinence;
}
##############################################################################################################
la derivation de pertinence n'excede pas 20%
edit : a 1000 la derivation descend au dessous de 10%
re edit : resultat sur 6000 requêtes
boucle n° : 6000
hamster n° : 1 - force : 500 cumul des requêtes : 488 - derivation : 0.98
hamster n° : 2 - force : 1000 cumul des requêtes : 1003 - derivation : 1
hamster n° : 3 - force : 2000 cumul des requêtes : 1978 - derivation : 0.99
hamster n° : 4 - force : 2000 cumul des requêtes : 2057 - derivation : 1.03
hamster n° : 5 - force : 500 cumul des requêtes : 474 - derivation : 0.95
pour obtenir une derivation de pertinence de 0 on devra tenir compte d'une statistique de selection dans l'algo
rog[/quote]
40 messages
• Page 3 sur 3 • 1, 2, 3
Lectures recommandées sur ce thème :
- Tirage au sort et poids du résultat
- tirage au sort dans un tableau sur plusieurs niveaux
- Réglement pour concours SANS tirage au sort, obligatoire ?
- [MySQL] tirage aléatoire via ORDER BY rand()
- Tirage aléatoire dans une table MySQL (solutions et questions)
- question php - fonction sort()
- [PHP-MySQL] : argument is not a valid MySQL ressource
- Ponderation NOEMBED vs Texte visible
- Pondération des mots du nom de domaine
- Y a t-il une pondération sur des mots ?
- Référencement : le problème des sessions des pages PHP - 04-08-2008
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- WebRankInfo lance la publicité collaborative - 15-10-2004
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Google sort la version française de Blogger - 15-11-2004
- Google sort l'API AdWords Sandbox - 09-08-2006
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
