Je suis programmeur et fan de Formule 1. Quand j'ai commencé à jouer à la ligue fantastique de F1, mon esprit s'est naturellement tourné vers les algorithmes.
Le but du jeu fantastique de F1 est de sélectionner 5 pilotes et 2 équipes, tout en restant sous un plafond de prix, qui, basé sur les performances en course, marque un nombre maximum de points. Cela ressemble à un problème d'optimisation informatique assez traditionnel avec des contraintes, n'est-ce pas ?
Plus précisément, pour toute fenêtre historique de courses, nous pouvons utiliser la Programmation Linéaire, pour trouver une équipe optimale. À proprement parler, cette solution consiste en une version simplifiée du jeu (le jeu réel vous permet d'apporter des modifications à votre équipe de semaine en semaine, et comporte également certains facteurs génériques), mais constitue néanmoins un point de départ utile.
La mise en place de nos capacités nécessitait des dépendances minimales :
La fonctionnalité actuelle a une interface simple, comme le montre cette capture d'écran.
Le nœud de cette fonctionnalité réside dans la construction en coulisses des programmes linéaires, qui sont ensuite transmis au solveur glpk.js exécuté dans votre navigateur. Voici un véritable programme linéaire construit par notre outil (avec de nombreuses lignes omises).
{ "name": "LP", "objective": { "direction": 2, "name": "obj", "vars": [ { "name": "VER", "coef": 593 }, { "name": "OCO", "coef": 112 }, [...18 additional drivers, omitted for brevity] { "name": "AST", "coef": 360 }, [...9 additional teams, omitted for brevity] ] }, "subjectTo": [ { "name": "cons1", "vars": [ { "name": "VER", "coef": 30 }, { "name": "NOR", "coef": 23 }, [...18 additional drivers, omitted for brevity] { "name": "MCL", "coef": 23.2 }, [...9 additional teams, omitted for brevity] ], "bnds": { "type": 3, "ub": 100, "lb": 0 } }, { "name": "cons2", "vars": [ { "name": "VER", "coef": 1 }, { "name": "OCO", "coef": 1 }, [...18 additional drivers, omitted for brevity] ], "bnds": { "type": 5, "ub": 5, "lb": 5 } }, { "name": "cons3", "vars": [ { "name": "RED", "coef": 1 }, [...9 additional teams, omitted for brevity] Show quoted text [...18 additional drivers, omitted for brevity] { "name": "cons29", "vars": [ { "name": "FER", "coef": 1 } ], "bnds": { "type": 4, "ub": 1, "lb": 0 } }, [...9 additional teams, omitted for brevity] ], "generals": [ "VER", "OCO", [...18 additional drivers, omitted for brevity] "ALP", [...9 additional teams, omitted for brevity] ] }
Pour ceux qui ne connaissent pas le langage familier de la dénomination F1, les pilotes sont désignés par les trois premières lettres de leur nom de famille (par exemple, VER est Max Verstappen) et les équipes ont chacune un mnémonique à 3 lettres (par exemple, AST est Aston Martin Motorsports).
Et donc dans ces programmes linéaires, il y a une variable par pilote (nommée avec leur code à trois lettres) et une variable par équipe, qui doit prendre la valeur de 1 (sur votre équipe fantasy) ou 0 (pas sur votre équipe fantasy équipe). Et l'objectif du programme linéaire est de maximiser les points, sous réserve que la somme du prix ne dépasse pas le seuil budgétaire, et également sous la contrainte que la somme des variables du pilote soit de 5, et celle des variables de l'équipe soit de 2. Très simple !
Une nuance est que vous pouvez choisir un « pilote 2x », qui marque le double des points qu'il a gagnés cette semaine-là. Pour tenir compte de cette nuance, nous générons 20 programmes linéaires distincts (chacun prenant un pilote différent comme 2x) et exécutons glpk.js sur chacun de ces 20 programmes, pour trouver celui avec le maximum de points.
Avertissement : nous n'avons aucune affiliation avec la Formule 1 (ou l'une de leurs sociétés ou marques). L'auteur de cette fonctionnalité est simplement un fan qui aime jouer au jeu fantastique. Ces informations sont fournies sans garantie quant à leur 'exactitude, utilisez-les à vos propres risques.'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!