Jump to content
Korean Random
tourist

[TWR - Tourist Win Rate]

Recommended Posts

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

 

 

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

 

 

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

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

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

 

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

calc.csv.7z

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

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

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Edited by tourist

Share this post


Link to post

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: чем меньше зависимостей, тем меньше поддержки.

Share this post


Link to post

Short link
Share on other sites

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

 

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

Edited by tourist

Share this post


Link to post

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

 

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

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

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

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

Share this post


Link to post

Short link
Share on other sites

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

 

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

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

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

 

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

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

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

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

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

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

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

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites
Ок, так и сделаю.

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

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

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

Share this post


Link to post

Short link
Share on other sites

да, спасибо. я это пропустил.

конечно, форматирование не блещет, я тут break не увидел. :)

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

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%

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

Share this post


Link to post

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

Share this post


Link to post

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];
    }
}

 

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

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

Share this post


Link to post

Short link
Share on other sites
Оптимизировал, если интересно:

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

 

 

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

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

Share this post


Link to post

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

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

 

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

 

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

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

 

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

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

Share this post


Link to post

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...