Si tu as des contraintes de perfs, tu peux ne stocker que l'optimium |(Va-Vb)| (valeur absolue de chaque coordonnée de la différence de deux vecteurs).
• Tu pioches deux joueurs au pif
• Tu calcules |(V1-V2)|
• Tu calcules la distance à l'optimum D=d(|(V1-V2)|, |(Va-Vb)|)
• Tu pioches un nombre aléatoire R=rand(0..D)
• Si R<N fixé, t'as trouvé ta paire, sinon, tu augmentes N (incrémenté de k>0, ou multiplié par k>1) et tu recommences
• Si le match est accepté par les deux joueurs, tu altères |(Va-Vb)| avec |(V1-V2)|, par exemple sous la forme |(Va-Vb)'| = |(Va-Vb)|*p+|(V1-V2)|*(1-p) (pour p ∈ [0..1])
L'intérêt d'augmenter N est d'assurer qu'il existera rapidement une itération où N>D, et donc, R=rand(0..D) sera forcément inférieur à N: la paire de joueur a été trouvée.
Le calcul peut encore s'accélérer en utilisant le carré de la distance plutôt que la distance D. Cela tendra à "tasser" les paires choisies vers la différence optimale |(Va-Vb)|, pour les premières itérations.
A défaut, suivant le code derrière, il est peut-être plus efficace d'aller chercher les {V1,V2} qui sont les plus proches de |(Va-Vb)| et les proposer dans l'ordre (supposons que l'algo soit pour un joueur J1 fixé, on peut prendre tous les joueurs J2 de la room, calculer |(V1-V2)| pour tous ces joueurs, calculer D, classer les J2 par ordre de D décroissant, proposer chaque duel dans l'ordre et altérer l'optimum en conséquence).
Ca me semble rapidement calculable, simple à coder (tu peux même sauver le vecteur optimal en dur et ne pas l'altérer, au moins pour une v0), léger en mémoire, plutôt efficace pour trouver des paires de joueurs, maintenable, évolutif (important! Si tu veux ajouter de nouveaux paramètres à considérer pour le choix de la paire de joueurs, il suffit de l'ajouter aux vecteurs) et paramétrable (si un joueur veut que l'algo ignore un des paramètres, il suffira de le sortir des vecteurs).
• Tu pioches deux joueurs au pif
• Tu calcules |(V1-V2)|
• Tu calcules la distance à l'optimum D=d(|(V1-V2)|, |(Va-Vb)|)
• Tu pioches un nombre aléatoire R=rand(0..D)
• Si R<N fixé, t'as trouvé ta paire, sinon, tu augmentes N (incrémenté de k>0, ou multiplié par k>1) et tu recommences
• Si le match est accepté par les deux joueurs, tu altères |(Va-Vb)| avec |(V1-V2)|, par exemple sous la forme |(Va-Vb)'| = |(Va-Vb)|*p+|(V1-V2)|*(1-p) (pour p ∈ [0..1])
L'intérêt d'augmenter N est d'assurer qu'il existera rapidement une itération où N>D, et donc, R=rand(0..D) sera forcément inférieur à N: la paire de joueur a été trouvée.
Le calcul peut encore s'accélérer en utilisant le carré de la distance plutôt que la distance D. Cela tendra à "tasser" les paires choisies vers la différence optimale |(Va-Vb)|, pour les premières itérations.
A défaut, suivant le code derrière, il est peut-être plus efficace d'aller chercher les {V1,V2} qui sont les plus proches de |(Va-Vb)| et les proposer dans l'ordre (supposons que l'algo soit pour un joueur J1 fixé, on peut prendre tous les joueurs J2 de la room, calculer |(V1-V2)| pour tous ces joueurs, calculer D, classer les J2 par ordre de D décroissant, proposer chaque duel dans l'ordre et altérer l'optimum en conséquence).
Ca me semble rapidement calculable, simple à coder (tu peux même sauver le vecteur optimal en dur et ne pas l'altérer, au moins pour une v0), léger en mémoire, plutôt efficace pour trouver des paires de joueurs, maintenable, évolutif (important! Si tu veux ajouter de nouveaux paramètres à considérer pour le choix de la paire de joueurs, il suffit de l'ajouter aux vecteurs) et paramétrable (si un joueur veut que l'algo ignore un des paramètres, il suffira de le sortir des vecteurs).