Jump to content
Korean Random
MaxWatson

Формула WN8 ожидаемые значения для всего аккаунта.

Recommended Posts

Всем привет!
На форме есть тема в которой рассказывается о формуле WN8
Там используются вот такие переменные:

expDmg      - ожидаемый нанесенный урон,
expSpot     - ожидаемое количество обнаруженных,
expFrag     - ожидаемое количество уничтоженных,
expDef      - ожидаемое количество очков защиты,
expWinRate  - ожидаемое количество побед.

И дана ссылка на таблицу ожидаемых значений. Все огонь.

Если я правильно понимаю, то эта таблица работает для каждого танка.
Вот пример из этой таблицы:

{"IDNum":49,"expDef":0.905,"expFrag":0.887,"expSpot":1.573,"expDamage":1121.611,"expWinRate":51.585},{"IDNum":81,"expDef":1.303,"expFrag":1.662,"expSpot":0.927,"expDamage":222.675,"expWinRate":57.593},
..

 

Мой вопрос:
Как посчитать ожидаемые значения для аккаунта в целом?
Чтобы посчитать общий WN8 для аккаунта.

Share this post


Link to post

Short link
Share on other sites

@MaxWatson ожидаемых значений для аккаунта не существует, на то они и ожидаемые))

 

Нужно по формуле WN8 подставить статистику аккаунта и актуальные ожидаемые значения, так и получится WN8 аккаунта.

Share this post


Link to post

Short link
Share on other sites
Только что, yepev сказал:

@MaxWatson ожидаемых значений для аккаунта не существует, на то они и ожидаемые))

 

Нужно по формуле WN8 подставить статистику аккаунта и актуальные ожидаемые значения, так и получится WN8 аккаунта.

Подставить статистику аккаунта - Это понятно как сделать и где их поулчить
Актуальные ожидаемые значения - Вот это как сделать? И как получить?

Share this post


Link to post

Short link
Share on other sites
6 минут назад, yepev сказал:

Окей, но это большая таблица с танками. Как мне подставить их в формулу для подсчета wn8 для всего аккаунта? 
Или мне нужно сперва посчитать WN8 ко всем танкам на аккаунте, потом это сложить и разделить на количество боев? 
 

$sumWM8 = 22 000;
$batles = 15 000;
$accountWN8 = $sumWM8 / $batles


Вот так это получается? 

Edited by MaxWatson

Share this post


Link to post

Short link
Share on other sites
3 часа назад, MaxWatson сказал:

Как мне подставить их в формулу для подсчета wn8 для всего аккаунта? 

В этой теме всё расписано по шагам:

3 часа назад, MaxWatson сказал:

На форме есть тема в которой рассказывается о формуле WN8

Share this post


Link to post

Short link
Share on other sites
14 часов назад, yepev сказал:

В этой теме всё расписано по шагам:

Да это я знаю, можно было и не повторять. 

Все-таки WN8 для аккаунта в целом - это среднее значение. Которое является суммой всех wn8 по танкам,  деленных на количество танков. 

Share this post


Link to post

Short link
Share on other sites
    /**
     * Calculate account WN8.
     *
     * @return   int
     *
     * @throws Exception
     */
    public function calculate(): int
    {

        // If WN8 was not calculated yet
        if (is_null($this->wn8)) {

            // Get account_id
            $account_id = $this->account_id;

            // Get summary values
            $summary = $this->api->get('wot/account/info', [
                'fields' => 'statistics.all.battles,statistics.all.frags,statistics.all.damage_dealt,statistics.all.dropped_capture_points,statistics.all.spotted,statistics.all.wins',
                'account_id' => $account_id
            ])->$account_id->statistics->all;

            // Get tanks values
            $tanks = $this->api->get('wot/account/tanks', ['fields' => 'tank_id,statistics.battles', 'account_id' => $account_id])->$account_id;

            // If this account has no tanks data skip calculation and return 0
            if (empty($tanks)) {

                $this->wn8 = 0;
                return $this->wn8;

            }

            // WN8 expected calculation
            $expectedTankValues = $this->getExpectedTankValues();
            $expDAMAGE = $expFRAGS = $expSPOT = $expDEF = $expWIN = 0;

            // Tanks missing in expected tank values but existing in account
            $missing = array();

            // Calculated account expected values
            foreach ($tanks AS $tank) {

                // Tank exists in expected tank values
                if (array_key_exists($tank->tank_id, $expectedTankValues)) {

                    // Expected values for current tank
                    $expected = $expectedTankValues[$tank->tank_id];

                    // Battles on current tank
                    $tank_battles = $tank->statistics->battles;

                    // Calculate expected values for current tank
                    $expDAMAGE += $expected->expDamage * $tank_battles;
                    $expSPOT += $expected->expSpot * $tank_battles;
                    $expFRAGS += $expected->expFrag * $tank_battles;
                    $expDEF += $expected->expDef * $tank_battles;
                    $expWIN += 0.01 * $expected->expWinRate * $tank_battles;

                    // Tank missing in expected tank values so add it to the list
                } else {

                    $missing [] = $tank->tank_id;

                }
            }

            // User want accurate calculation
            if ($this->accurate_calculation && !empty($missing)) {

                // Get missing tanks stats from API server
                $missing_tanks = $this->api->get('wot/tanks/stats', ['tank_id' => implode(',', $missing), 'fields' => 'tank_id,all.battles,all.frags,all.damage_dealt,all.dropped_capture_points,all.spotted,all.wins', 'account_id' => $account_id])->$account_id;

                // Reduce account summary data
                foreach ($missing_tanks AS $tank) {
                    $summary->damage_dealt -= $tank->all->damage_dealt;
                    $summary->spotted -= $tank->all->spotted;
                    $summary->frags -= $tank->all->frags;
                    $summary->dropped_capture_points -= $tank->all->dropped_capture_points;
                    $summary->wins -= $tank->all->wins;
                }
            }

            // If there are missing tanks and searching for info is set to TRUE, get those values
            if (!empty($missing) && $this->search_missing_tanks) {
                $this->missing_tanks = $this->api->get('wot/encyclopedia/tankinfo', ['tank_id' => implode(',', $missing), 'fields' => 'localized_name']);
            }

            // Calculate WN8
            $rDAMAGE = $summary->damage_dealt / $expDAMAGE;
            $rSPOT = $summary->spotted / $expSPOT;
            $rFRAG = $summary->frags / $expFRAGS;
            $rDEF = $summary->dropped_capture_points / $expDEF;
            $rWIN = $summary->wins / $expWIN;

            $rWINc = max(0, ($rWIN - 0.71) / (1 - 0.71));
            $rDAMAGEc = max(0, ($rDAMAGE - 0.22) / (1 - 0.22));
            $rFRAGc = max(0, min($rDAMAGEc + 0.2, ($rFRAG - 0.12) / (1 - 0.12)));
            $rSPOTc = max(0, min($rDAMAGEc + 0.1, ($rSPOT - 0.38) / (1 - 0.38)));
            $rDEFc = max(0, min($rDAMAGEc + 0.1, ($rDEF - 0.10) / (1 - 0.10)));

            $wn8 = 980 * $rDAMAGEc + 210 * $rDAMAGEc * $rFRAGc + 155 * $rFRAGc * $rSPOTc + 75 * $rDEFc * $rFRAGc + 145 * MIN(1.8, $rWINc);

            // Ok we have WN8, store it
            $this->wn8 = round($wn8, 2);
        }

        // Return our mighty number
        return $this->wn8;
    }

Отсюда

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...