Trouver la meilleur note possible ?

Bonjour à tous,

Merci d'avance pour ceux qui vont prendre le temps de m'aider.

J'ai un tableau qui contient 2 colonnes.

Mon objectif est de trouver le meilleur score possible en sélectionnant 4 joueurs mais en respectant une seule condition "le total de L10 ne doit pas dépasser 120"

Dans l'exemple ci-dessous j'ai coché des lignes au hasard sans faire le calcul.

Mais est-ce que Excel est assez intelligent pour faire un calcul avec toutes les lignes et sélectionner les 4 meilleurs sans dépasser 120 dans la 3e colonne ?(L10)

Si oui dans ce cas la peut-il me les noter dans l'onglet en feuill3 avec le total des 2 colonnes ?

Pour terminer (mais ça c'est facultatif je pense être capable de le faire moi même) il doit rajouter une 5e ligne tout en haut et la il s'agit du meilleur score possible peu importe le L10. Dans cet exemple c'est Harden qui a 47,81. Même s'il a 45 de L10 cela ne change rien pour le calcul des 4 autres.

J'espère avoir été clair sinon n'hésitez pas à me poser des questions. Je vous laisse le fichier si vous voulez essayer.

33testdaily.xlsx (14.43 Ko)

Merci d'avance

image image

Bonjour,

C’est probablement possible via formules, ou via VBA. Mais vous vous rendez bien compte que c’est tout de meme un problème à longueur de calcul quasi exponentiel ?

Dans votre cas, le nombre de combinaisons de 4 éléments parmis 40 est 91390. Soit quasi 100 000 calculs à effectuer, ensuite on prend le max de ces valeurs.

Alors certes c’est possible mais c’est un peu long. Je vais refléchir à une solution VBA.

Bonjour à tous,

Je ne sais pas si j'ai bien compris

Une première ébauche qu'on pourra améliorer si cela convient :

17testdaily.xlsx (15.79 Ko)

EDIT : désolé, après avoir bien relu je me rends compte que je n'avais pas compris !

Bonjour,

J’ai généré en python toutes les combinaisons de choix de 4 joueurs dans une poule de 41, et j’ai importé le csv dans la feuille combinations.

Ensuite avec quelques calculs de produits on trouve les résultats voulus, vous verrez qu’il y en a beaucoup.

Bon les calculs sont assez moches mais les résultats sont correctes.

Edit le fichier est trop lourd (20Mo), j'envoie seulement les résultats.

12exportsimple.zip (936.99 Ko)

Merci beaucoup mais malheureusement ce fichier était un exemple.

Le vrai contient + de 500 lignes est-ce que cela veut dire que c'est trop long et donc impossible ?

Merci pour votre retour

Je viens de me relire et je me suis mal exprimé 1000 excuses.

En gros quand je disais "Le meilleur score possible" je parlais du meilleur TOTAL possible de la colonne "TOTAL DAILY"

En respectant la condition de 120 pts maxi dans L10.

Dans cette exemple j'ai trouvé Pritchard - Powell - Towns - Porter Jr = 143,1 pts mais peut-être y a t-il mieux ?

J'ai fait une colonne Diff qui calcul la différence Total Daily => L10 pour connaitre les joueurs qui ont la meilleur différence, peut-être que cela aide dans le calcul ?

Merci d'avance

image

Pour tester toutes les répartitions de 4 joueurs sur un total de 500 joueurs, il faut évaluer 2 573 031 125 (2 milliards) de combinaisons, 500!/(4!*(500-4)!)

Je pense que vous imaginez bien, par exemple pour 500 joueurs : vous prenez les 3 premiers de votre tableau, et vous additionnez leurs scores. Par exemple 70.

Ensuite il faut tester les (500-3)=497 autres joueurs pour voir si le complément dépasse 70 ou non. Donc 497 opérations.

Et ensuite on ne prend plus les 3 premiers joueurs mais les 2 premiers et le 4e, et on recommence…

Vous voyez le truc.

Donc oui il faut plutot partir sur une approche comme celle de JB_, sans tester l’ensemble des combinaisons. Vous n’obtiendrez pas “le (ou les) meilleur” résultat mais vous pouvez vous en approcher.

Il y a probablement moyen d’éviter cela, mais il faudrait expliquer exactement quelles sont vos données (ce qu’elles représentent) et ce que vous cherchez comme résultat final. Il y a peut etre moyen ainsi de supprimer des joueurs, et/ou de revoir les calculs.

Je comprends et c'est normal. Pour réduire déjà je pense qu'il faudrait cibler en priorité ceux qui ont la meilleur différence possible entre L10 et Total Daily. Le problème c'est que parfois ils auront tous une différence négative mais certains seront à -50 et d'autres à -10. Un -10 sera beaucoup + intéressant.

Car l'objectif est de trouver des L10 qui ont la meilleur projection possible dans total daily. Exemple un L10 avec 15 de moyenne projeté à -5 est mieux qu'un L10 avec 40 de moyenne projeté à 5. Le premier ayant une différence de -20 et le 2e une différence de -35.

Je ne sais pas si c'est très clair mais pour diminuer le nombre de joueurs il faudrait je pense dans un premier temps donner une limite parmi les meilleurs différences.

Je remets le fichier au cas ou avec les différences.

Ceux en gras sont ceux qui ont les meilleurs différences.

18testdaily.xlsx (15.84 Ko)

bonjour OLGone67, salut Saboh12617,

un essai, justement avec L10, je ne comprends pas l'histoire des différences

12testdaily.xlsb (24.12 Ko)

Merci pour cette réponse mais malheureusement je pense qu'il y a une meilleur combinaison possible :

Dans votre proposition le total en daily est de 135,34 (hors Harden) pts :

image

Tandis que dans ma proposition j'arrive à 143,1 pts

image

C'est la que la colonne différence à toute son importance, puisque Holmgren et Ingram ont moins de 3 pts de différence alors que Towns et Powell ont + de 4.

Du coup Towns 40 => 44,05 est mieux que Holmgren 40=>41,09.

L'intêret de prendre des différences élevées permet de compléter avec de meilleurs. Dans votre exemple vous completez avec Finney Smith (24,72) alors que moi je peux mettre Porter Jr (33,86).

Merci d'avance

re,

pour le moment c'est 143.8 ???

15testdaily.xlsb (23.87 Ko)

Bonsoir, salut BsAlv,

Demain je vous transmets le CSV avec toutes les permutations, et du coup la somme max comme ça on sera fixé.

Bonjour OLGone67, à tous les autres,

La petite version à ma pomme.

J'ai recyclé ma petite fonction TableauCombiPparmiN qui retourne le tableau de toutes les combinaisons de p parmi n (sans récurrence et paramétrable).

En travaillant sur ce tableau, on arrive assez facilement à trouver ce qu'on cherche (si j'ai bien compris ce que cherche OLGone67 et ça ce n'est pas sûr ).

Cliquez sur le bouton Hop ! Le code est dans module1 et il est un peu commenté.

Je n'avais lu que la demande et pas les autres messages du fil. Laissez tomber ma proposition, avec 500 lignes, on frise la démesure en VBA!

Bonsoir,

Merci à tous pour vos réponses !

Je pense que BsAlv a trouvé mais comment avez-vous fait si c'est possible de savoir comment l'adapter ?

Est-ce possible d'adapter cela à Google sheet ou c'est propre à excel ?

Si la solution est trop complexe avec 500 lignes il y a aussi la possibilité d'utiliser les cases de coche pour cocher les lignes dont j'ai besoin et ainsi travailler uniquement sur ces lignes la cela réduirait fortement les possibilités ? Qu'en pensez-vous ?

Merci d'avance.

Bonjour à tous,

OLGone67, si tu entres dans Excel la formule

=COMBIN(nb_parti;4)

Tu auras le nombre de permutations possibles.

Dans ton premier exemple la formule était =COMBIN(41;4)

Si tu coches X cases, ce sera =COMBIN(X;4)

Pour te donner une idée des ordres de grandeurs.

Pour les autres, le csv des 101270 permutations (4 dans 41) possibles dans le premier exemple donné, ainsi que le fichier qui m’a permis d’obtenir mon premier résultat (même s’il ne convient pas).

https://filetransfer.io/data-package/UPig4Do4#link

J’ai pas trop compris pourquoi sur ma feuille les “TotalDaily” avaient un point virgule au lieu d’une virgule. Corrigé.

En testant je trouve un max ainsi

ΣtotalDialy

joueur1

joueur2

joueur3

joueur4

182,48

Trae Young (44.58)

Domantas Sabonis (45.18)

James Harden (47.81)

Nikola Vučević (44.91)

Mais bon pour faire cela il suffit simplement de prendre les 4 premiers scores du tableau en filtrant totalDaily du plus grand au plus petit.

Je ne comprends pas ce que représente “diff”.

Si c’est cela le critère, trier sur cette colonne.

re,

la remarque d'avoir une liste de 500 personnes et 4 personnes à choisir, cela est environ 2.600.000.000 combinaisons, la macro de @mafraise fait environ 100.000 combinaisons par seconde, donc la durée sera environ 7 heures et si on fait quelque manipulations malines (trier etc) peut-être en 6 heures ... .

Ma macro fait 500 tentatives et récupère la meilleur en 30 secondes. Si je lance la macro plusieurs fois, ce sont toujours ces 2 solutions (voir I11:O21) qui émergent. Oui, il y a une possibilité qu'une meilleure solution que 147.03 existe, mais dans ces cas, c'est souvent mieux d'avoir une solutions presque optimale qu'attendre 6-7 heures pour la solution finale.

Maintenant je fais 500 tentatives en 30 sec, on n'a qu'à modifier ce chiffre en 1.000 et attendre 1 minute par exemple pour chercher plus longtemps ou lancer la macro plusieurs fois. Cela dépend de votre choix.

On peut suivre la progression de la macro dans le "statusbar".

PS. Je n'utilise pas la colonne "diff"

8testdaily.xlsb (54.04 Ko)

Salutatousses

a tout hasard, qq'un a testé avec le Solveur ?

Je ne peux pas (encore) poster de lien mais la recherche des mots clés "Excel" et "Solveur" donne l'explication

Bonjour Nain,

De mon expérience personnelle, le solveur ne gère pas bien ce genre de problèmes. Il est pratique pour trouver les racines d’une fonction ou ce genre de choses (de la recherche itérative/dichotométrique), mais en dehors de ça je l’ai toujours vu perdu quand il a trop de paramètres.

Attendons la réponse de l’OP.

re,

@Saboh12617, la somme de L10 pour vos 4 personnes est 180, donc plus grand que la limite de 120.

Rechercher des sujets similaires à "trouver meilleur note possible"