首頁 > web前端 > js教程 > 使用線性規劃評估(歷史最優)Fantasy Feams

使用線性規劃評估(歷史最優)Fantasy Feams

DDD
發布: 2024-11-25 20:48:16
原創
951 人瀏覽過

我是一名程式設計師和一級方程式賽車迷。當我開始玩F1的夢幻聯賽時,我的心思自然就轉向了演算法。

F1 奇幻遊戲的目標是挑選 5 名車手和 2 支車隊,同時保持價格上限,並根據比賽表現獲得最高分。這聽起來像是一個相當傳統​​的有約束的計算機科學優化問題,對吧?

更準確地說,對於任何歷史比賽窗口,我們都可以使用線性規劃來找到最佳團隊。嚴格來說,這個解決方案是遊戲的簡化版本(真正的遊戲允許你每週對你的團隊進行更改,並且有一些通配符因素),但仍然是一個有用的起點。

整合我們的能力需要最少的依賴:

  • 資料:我們從優秀的 F1 Fantasy Tools 網站取得積分/價格資料
  • 線性程式庫:我們使用 glpk.js,它是舊的值得信賴的 GLPK 求解器的 JavaScript/WebAssembly 連接埠
  • 平台:我們使用 GitHub 頁面,我們的程式碼在 MIT 許可證下開源,可以在此處找到

目前功能有一個簡單的介面,如螢幕截圖所示。

Evaluating (Historically Optimal) Fantasy Feams with Linear Programming

此功能的關鍵是線性程式的幕後構造,然後將其輸入瀏覽器中運行的 glpk.js 求解器。這是我們的工具建構的實際線性程序(省略了許多行)。

{
    "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]
    ]
}
登入後複製

對於那些不熟悉F1 命名口語的人來說,車手是透過姓氏的前三個字母來稱呼的(例如VER 是Max Verstappen),每個車隊都有一個3 個字母的助記符(例如AST 是阿斯頓馬丁賽車運動)。

因此,在這些線性程序中,每個車手都有一個變量(以他們的三個字母代碼命名),每個團隊都有一個變量,該變量的值必須為1(在您的幻想車隊中)或0(不在您的幻想車隊中)團隊)。而線性規劃的目標是最大化積分,受限於價格總和不超過預算門檻,也受限於車手變數總和為5,車隊變數總和為2。非常簡單!

一個細微差別是,你可以選擇一名“2x 車手”,他的得分是他們當週獲得的積分的兩倍。為了適應這種細微差別,我們產生20 個獨立的線性程式(每個程式採用不同的驅動程式作為2x),並在這20 個程式中的每一個上執行glpk.js,以找到具有最大分數的程式.

免責聲明:我們與一級方程式(或其任何公司或品牌)沒有任何隸屬關係。此功能的作者只是一個喜歡玩奇幻遊戲的粉絲。所提供的資訊不保證其準確性,您需自行承擔使用風險。 '

以上是使用線性規劃評估(歷史最優)Fantasy Feams的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板