Улучшение алгоритма моделирования футбола

Легко раздуть проблему из энтропии. По моему мнению это - симпатичное простое и полезное понятие .

В основном, это определяет количество того, что в среднем Вы узнаете из события, как бросание монетки, взятие команды перехода или индексация массива.

Как операция сравнения посреди алгоритма поиска имеет определенную вероятность P взятия одного ответвления и 1-P взятия другого.

предположим P является 1/2, как это находится в двоичном поиске. Тогда при взятии того ответвления Вы знаете на 1 бит больше, чем Вы сделали прежде, потому что журнал (2/1), основа 2, равняется 1. С другой стороны, при взятии другого ответвления, Вы также изучаете 1 бит.

Для получения среднего объема информации Вы изучите, умножите то, на чем Вы учитесь первые разы ответвления вероятность, Вы берете то ответвление, плюс то, на чем Вы учитесь вторые разы ответвления вероятность того ответвления.

1/2 времена 1 бит, плюс 1/2 времена 1 бит, составляет 1/2 бита плюс 1/2 бита или общий 1 бит энтропии. Это - то, что можно ожидать узнавать в среднем из того решения.

, С другой стороны, предположите выполнение линейного поиска в таблице 1 024 записей.

На первом == тест, вероятность ДА является 1/1024, таким образом, энтропия ДА при том решении

1/1024 times log(1024/1)

или 1/1024 * 10 = приблизительно 1/100 бита.

Поэтому, если ответ ДА, Вы изучаете 10 битов, но шанс этого - приблизительно 1 в тысяче.

, С другой стороны, НЕТ намного более вероятно. Это - энтропия,

1023/1024 * log(1024/1023)

, или примерно 1 раз примерно обнулите = о нуле.

Добавляют два вместе, и в среднем Вы узнаете о 1/100 немного на том решении.

Вот почему линейный поиск является медленным. Энтропия (сколько можно ожидать изучать) при каждом решении слишком мала, так как Вы оказываетесь перед необходимостью изучать 10 битов для нахождения записи в таблице.

7
задан Community 23 May 2017 в 11:45
поделиться

4 ответа

В общем, похоже, что это довольно сложная проблема, и я не уверен, насколько эффективно вы ее решите.

Это сказал, я видел кое-что, что определенно поможет вам.

Сначала я ввел бы переменные в параметры. Это не обязательно может ускорить ваш код, но упростит чтение и отладку. Затем я бы удалил параметры $ teamname_att, $ teamname_def и просто сохранил бы их как значения в ассоциативных массивах $ Strength_att, $ Strength_def. Поскольку эти данные всегда объединяются в пары, это снизит риск случайного использования имени одной команды в качестве ссылки на другую команду.

Это позволит вам не искать значения в массивах постоянно:

// replace all $tactics[$teamname_att] with $attackers
$attackers = $tactics[$teamname_att]; 
$defenders = $tactics[$teamname_def];
// Now do the same with arrays like $_POST[ "team1" ];

] У вас есть три вспомогательные функции, каждая из которых имеет шаблон: бывает несколько раз, когда вы будете использовать один и тот же вызов одной и той же функции с одним и тем же параметром. Позвоните заранее:

$goalieStrength = strengths_weight($strength_def['goalkeeper']);

Надеюсь, это поможет.

бывает несколько раз, когда вы будете использовать один и тот же вызов одной и той же функции с одним и тем же параметром. Позвоните заранее:

$goalieStrength = strengths_weight($strength_def['goalkeeper']);

Надеюсь, это поможет.

8
ответ дан 6 December 2019 в 10:52
поделиться

Как часто будут проверяться эти значения? Если он будет использоваться множеством людей и постоянно повторять эти операторы if / else, я вижу, что вы съедаете много памяти и работаете довольно медленно.

Возможно, вы могли бы, но несколько переключателей там, чтобы заменить некоторые из if?

Это все, что я вижу для улучшения скорости. Что касается самого алгоритма, мне придется изучить его чуть позже, если никто не сделает этого.

0
ответ дан 6 December 2019 в 10:52
поделиться

Я (быстро) прочитал его и заметил пару вещей:

  • Процент выдачи красных / желтых карточек одинаков во всех третях поля, не так ли? умышленно? Я не футболист, но могу сказать, что нарушения чаще происходят на последней трети поля, чем на первой. (Потому что, если вы идете первым, вы, скорее всего, защищаетесь)

  • Процент, определяющий, что пенальти начислен, одинаков для каждой команды, однако некоторые команды или, скорее, игроки, с большей вероятностью забьют пенальти. чем другие.

  • Вы не учитываете угловые удары, возможные травмы после фола или голы, забитые головой (что, возможно, стоит упомянуть в отчете).

Кроме того, вы ». Мне просто нужно запустить это моделирование много раз и посмотреть, верны ли выбранные вами значения; настроить алгоритм. Лучше всего вручную настроить его (например, прочитать все константы из файла и запустить пару сотен симуляций с разными значениями и разными командами), проще всего, вероятно, реализовать генетический алгоритм, чтобы попытаться найти лучшие значения.

В основном то, что у вас есть, это настоящий код геймплея / искусственного интеллекта, так что вы можете прочитать о методах, используемых игровыми студиями для управления этим типом кода. (Одно дело - поместить переменные в электронную таблицу Google, которую затем можно будет легко опубликовать / настроить, например).

Кроме того, даже если вам не хватает некоторых вещей, которые есть в реальном футбольном матче, нет смысла пытаться быть как можно более реалистичным, потому что обычно в этих случаях

5
ответ дан 6 December 2019 в 10:52
поделиться

Yous, кажется, отсутствует: -

#include oscar.h;
void function dive (int ball_location, int[] opposition, int[] opposition_loc) {
    if (this.location != PenaltyBox || ball_location != PenatlyBox)
       return;
    } else {
       for (x = 0; x < 11; x++) {
           if ( opposition_loc[x] = PenaltyBox ) {
               scream(loudly);
               falldown();
               roll_around();
               cry();
               roll_around();
               scream(patheticaly);
               plead_with_ref();
               return;
            }
     }
     return;
}
5
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: