Jump to content
Korean Random

[TWR - Tourist Win Rate]


tourist

Recommended Posts

Добавил фраги

 

 

Нет, от общей мало толку. Ладно, обойдемся без нее, хотел заодно со светляками поиграться. Уровень-тип техники есть, надеюсь?

 

 

Уровень есть, а тип не для всех, мы его недавно только стали собирать, поэтому те, по кому стату не запрашивали - без типа.

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

Сейчас попробую.

 

Да, нормально отбирается. Обновил файл - добавил уровень и тип танка.

calc.csv.7z

Edited by sirmax
Link to comment
Short link
Share on other sites

@tourist, вы используете в base.csv локализованное название танка. Это не подходит, нужно использовать из поля "name":

{        "localized_name": "JagdPz IV",
        "name": "JagdPzIV",      },

В поле "name" оно никогда не меняется, а локализованное WG может поменять в любой момент, к тому же оно для RU одно, для EU - другое.

 

Переделаешь?

Link to comment
Short link
Share on other sites

В расчетах используется именно name, сиречь base[].tank - по этому полю производится поиск связей с базой техники.

Это понятно, просто в base.csv у вас используется localized_name, а нужно name

Link to comment
Short link
Share on other sites

Там name, обрати внимание на Хеллкета - он написан как M18_Hellcat, это name, localized_name у него M18 Hellcat, без нижнего подчеркивания.

Кстати там не все имена правильные - замучался исправлять. )

Edited by tourist
Link to comment
Short link
Share on other sites

Там name, обрати внимание на Хеллкета - он написан как M18_Hellcat, это name, localized_name у него M18 Hellcat, без нижнего подчеркивания.

Ну вот, например:

СССР;Лёгкий танк;3;БТ-SV;240;62;33;280;0,4;315;120;1

Посмотрел внимательней, там вообще каша. Надо исправлять.

 

Кстати там не все имена правильные - замучался исправлять. )

Во-во, именно поэтому я писал, что алгоритм требует постоянной поддержки. Это реально самая большая сложность. Реализация - это фигня, а вот правильная реализация - это сложно, временами невыполнимо. Правильная реализация - это та, которую сделал и забыл. Как только появляется необходимость поддержки, все - жопа, когда-нибудь сдохнет.

Hint: чем меньше зависимостей, тем меньше поддержки.

Link to comment
Short link
Share on other sites

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

 

Но сейчас это не так важно, тебе же все равно придется делать привязку к своей базе техники - где имена правильные. Так что на этот файл base можно просто забить.

Edited by tourist
Link to comment
Short link
Share on other sites

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

 

Но сейчас это не так важно, тебе же все равно придется делать привязку к своей базе техники - где имена правильные. Так что на этот файл base можно просто забить.

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

Ок, разберемся. Те, которые не совпадут будут пропускаться.

Если тебе удобно работать с base.csv, пусть он в таком формате и остается, мне его прочитать и распарсить не сложно (уже сделал).

Link to comment
Short link
Share on other sites

Как удобнее - главное чтобы где-то была база с основными характеристиками танка - причем чем больше их там будет, чем лучше. Например, можно добавить альфу, разброс и скорострельность топового орудия. Может быть ты знаешь, где это все скачать оптом и с правильными именами?

 

Я страдаю - в 2010 экселе почему-то не смог запустить пакет анализа, а в 2003 не влезает вся таблица. Придется 2007 качать похоже.))

Link to comment
Short link
Share on other sites

Поставил собираться выживаемость по танку, правда обновляться оно будет долго - сервер статы WG сильно ограничили по количеству запросов с одного IP, так что перебирать все не получится, придется ждать пока само обновится.

 

Как удобнее - главное чтобы где-то была база с основными характеристиками танка - причем чем больше их там будет, чем лучше. Например, можно добавить альфу, разброс и скорострельность топового орудия. Может быть ты знаешь, где это все скачать оптом и с правильными именами?

 

Не, нету. Самим от патча к патчу приходится собирать.

Хотя кое-что можно выдрать из клиента. Вот, можешь посмотреть наш проектик, который выдирает инфу по танкам из клиента (на C#):

http://code.google.com/p/wot-xvm/source/browse/#svn%2Ftrunk%2Fsrc%2Fvehicle-bank-parser

Вполне может быть и то что тебе нужно тоже можно оттуда получить.

 

Я страдаю - в 2010 экселе почему-то не смог запустить пакет анализа, а в 2003 не влезает вся таблица. Придется 2007 качать похоже.))

Лучше с 10 разберись, аналитика в 2007 слабая еще.

 

Ошибка в коде:

 

 

int first_del(int battles){ //удаляет 1000 боев с херовой статой
long int i,min;
float min_rate;
while(battles>0){
  min_rate=1000;
  for(i=0;i<300;i++)if(base[i].rate<min_rate && base[i].link && base[i].link->level<8 && base[i].rate<53){min_rate=base[i].rate;min=i;}
  if(min_rate==1000)return 1;
    base[min].link=0;
    battles-=base[min].battles;
    //printf("\n%s %f>%d Deleted",base[min].tank, base[min].rate, base[min].battles);
  return 1;
}

 

 

всегда возвращает 1, так что это условие не работает:

 

if(!first_del(1000)){printf("\nNot enought battles");getchar();exit(0);}
Edited by sirmax
Link to comment
Short link
Share on other sites

Это не ошибка - просто тот самый случай, когда слишком мало статы для анализа. Я пока что не решил, как поступать в таком случае, а вылезание сообщения об ошибке немного достало.

 

Наверно лучше всего сделать так:

1. Перед удалением 1000 боев проверить - сколько там боев есть вообще (на технике, где более 100 боев).

2. Если меньше, допустим, 2000, то ничего не удалять и считать как есть.

3. Во всех случаях ограничить итоговую стату следующими значениями:

если нет 300 боев на технике выше 6-го уровня - 53%,

если нет 300 боев на технике выше 7-го уровня - 55%,

если нет 300 боев на технике выше 8-го уровня - 57%.

Link to comment
Short link
Share on other sites

Это не ошибка - просто тот самый случай, когда слишком мало статы для анализа. Я пока что не решил, как поступать в таком случае, а вылезание сообщения об ошибке немного достало.

 

Наверно лучше всего сделать так:

1. Перед удалением 1000 боев проверить - сколько там боев есть вообще (на технике, где более 100 боев).

2. Если меньше, допустим, 2000, то ничего не удалять и считать как есть.

3. Во всех случаях ограничить итоговую стату следующими значениями:

если нет 300 боев на технике выше 6-го уровня - 53%,

если нет 300 боев на технике выше 7-го уровня - 55%,

если нет 300 боев на технике выше 8-го уровня - 57%.

Ок, так и сделаю.

Технику < 100 боев вообще всегда игнорировать? Если она не нужна, мне проще удалить такие танки еще в самом начале расчета, чтобы не мешались.

Edited by sirmax
Link to comment
Short link
Share on other sites

Ок, так и сделаю.

Технику < 100 боев вообще всегда игнорировать? Если она не нужна, мне проще удалить такие танки еще в самом начале расчета, чтобы не мешались.

Да, так проще всего. Мой код их даже не читает из файла:

if(base[j].battles<100){base[j].link=0;break;}

Link to comment
Short link
Share on other sites

Мне почему-то удобнее писать логически связанные действия в строчку. К тому же мой редактор подсвечивает всякие бреки.

Link to comment
Short link
Share on other sites

country не планируется использовать? сейчас он не используется, можно убирать?



С удалением 1000 первых боев надо будет еще думать. Вот обновленная функция (надеюсь, с JS проблем не будет?):

// remove battles with bad stats (teaching)del_first = function(battles) {
    var min = 0;
    var min_rate;    while (battles > 0) {
        min_rate = 1000;
        for (var i in sdata.vehicles) {
            var vdata = sdata.vehicles[i];
            if (vdata.rate < min_rate && vdata.link && vdata.link.level < 8 && vdata.rate < 53) {
                min_rate = vdata.rate;
                min = i;
            }
        }
        if (min_rate == 1000)
            return;
        var vdata = sdata.vehicles[min];
        battles -= vdata.battle_count;
        log(vdata.name + " " + vdata.rate + "\t" + vdata.battle_count + " Deleted");
        delete sdata.vehicles[min];
    }
}

Вложенный цикл еще надо будет переделать, желательно в один проход посчитать.



если нет 300 боев на технике выше 6-го уровня - 53%, если нет 300 боев на технике выше 7-го уровня - 55%, если нет 300 боев на технике выше 8-го уровня - 57%

Вот это можно чуть подробней объяснить? 

Link to comment
Short link
Share on other sites

country не планируется использовать? сейчас он не используется, можно убирать?

 

А оно мешает? Скорее всего использовать не будем, хотя оно для сравнения техники может быть полезно - это вопрос настроек расчета.

 

 

С удалением 1000 первых боев надо будет еще думать. Вот обновленная функция (надеюсь, с JS проблем не будет?):

Я кроме дремучего С 89 года ничего не знаю. Но свою же функцию смогу понять в любой записи.

 

 

Вложенный цикл еще надо будет переделать, желательно в один проход посчитать.

Это оптимизация. Наверно стоит создать массив % побед по технике ниже 8-го уровня, отсортировать его по убыванию и удалять начиная с первых значений. По возрастанию точнее.

 

 

если нет 300 боев на технике выше 6-го уровня - 53%, если нет 300 боев на технике выше 7-го уровня - 55%, если нет 300 боев на технике выше 8-го уровня - 57%

 

Вот это можно чуть подробней объяснить?

Это мера для тотального забарывания педобиров, твинководов и везучих парней с очень малым числом боев. Если после всех расчетов калькулятора общий скорректированный винрейт (рейтинг) оказался выше указанных значений, а количество боев не удовлетворяет указанным условиям - следует тупо порезать винрейт до соответствующих цифр. Потому как лично я не верю в умение играть людей, набивших заоблачную стату на низкоуровневой технике и толком не поигравших даже на 6-7 уровнях. Пусть страдают.

Edited by tourist
Link to comment
Short link
Share on other sites

А оно мешает? Скорее всего использовать не будем, хотя оно для сравнения техники можно быть полезно - это вопрос настроек расчета.

Если заведомо не нужно, зачем хранить? Чем чище код, тем легче его поддерживать.

Но если потенциально может понадобиться, пусть будет.

 

Это оптимизация. Наверно стоит создать массив % побед по технике ниже 8-го уровня, отсортировать его по убыванию и удалять начиная с первых значений.

Оптимизировал, если интересно:

// remove battles with bad stats (teaching)del_first = function(battles) {
    var vd = [];
    for (var i in sdata.vehicles) {
        var vdata = sdata.vehicles[i];        // skip tanks without info
        if (!vdata.link)
            continue;        // skip top tanks (level 8+)
        if (vdata.link.level >= 8)
            continue;        // skip tanks with good percent
        if (vdata.rate >= 53)
            continue;        vd.push(vdata);
    }    vd.sort(function(a,b){ return a.rate-b.rate; });
    while (battles > 0 && vd.length > 0) {
        var vdata = vd.shift();
        battles -= vdata.battle_count;
        log("Deleted: b=" + vdata.battle_count + "\t%=" + Math.round(vdata.rate) + "\t" + vdata.name);
        delete sdata.vehicles[vdata.name];
    }
}

 

Если после всех расчетов калькулятора общий скорректированный винрейт (рейтинг) оказался выше указанных значений, а количество боев не удовлетворяет указанным условиям - следует тупо порезать винрейт до соответствующих цифр.

Меня выделенное интересовало.

Link to comment
Short link
Share on other sites

Оптимизировал, если интересно:

Выглядит внушительно. Кстати, я там оговорился выше - сортировать надо по возрастанию, чтобы удалялись в первую очередь танки с самой херовой статой. Далее, не нашел в твоем коде проверку - есть ли там вообще 2000 боев - просто если меньше, наверно лучше ничего не удалять и просто пропустить эту функцию. Так мы немного расширим сферу применения калькулятора. Хотя возможно это и будет забраковано на тестах.

 

 

Меня выделенное интересовало.

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

Link to comment
Short link
Share on other sites

Выглядит внушительно. Кстати, я там оговорился выше - сортировать надо по возрастанию, чтобы удалялись в первую очередь танки с самой херовой статой. Далее, не нашел в твоем коде проверку - есть ли там вообще 2000 боев - просто если меньше, наверно лучше ничего не удалять и просто пропустить эту функцию. Так мы немного расширим сферу применения калькулятора. Хотя возможно это и будет забраковано на тестах.

Я это раньше проверяю, еще перед вызовом:

 

if (sdata.battles > def.BATTLES_LOW_LIMIT)
        delFirst(1000);

 

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

Да я понял уже, то был просто комментарий. :)

 

А оно мешает? Скорее всего использовать не будем, хотя оно для сравнения техники может быть полезно - это вопрос настроек расчета.

страну, тип танка и уровень можно убирать из base.csv - они есть в статистике, лучше их брать оттуда

Link to comment
Short link
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...