Jump to content
Korean Random
tourist

[TWR - Tourist Win Rate]

Recommended Posts

Тут интересно получилось - сейчас пересчитал эти танки вручную, второй случай сошелся, а первый - не совсем. У меня сравнение Т40 с Хуммеля дает 67%, а не 74%. Тут какое-то разногласие вышло.

 

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

 

По светлякам - я уже просил выше повысить штраф при сравнении их с любой техникой кроме светляков и СТ 8-10 уровней. Ждем sirmax'a.

Что конкретно надо сделать?

 

Это ошибка при переводе алгоритма на вебсервис - ниже 50% сходства не должно сравнивать вообще.

Это сделал

Share this post


Link to post

Short link
Share on other sites

Что конкретно надо сделать?

При сравнении арт с другой техникой вычитай из оценки не 1, а 2.

В моем коде это строка else if(current->link->type==3 || base.link->type==3)same--; Тут нужно поставить same-=2;

 

По светлякам подобным же методом ввести штраф при сравнении их с любой техникой кроме светляков и СТ 8-10 уровней.

if(current->link->type==4 && base.link->type!=4 && (base.link->type!=5 || base.link->level<8))same--;

 

Так, намудрил с последним условием - теперь вроде правильно.

Edited by tourist

Share this post


Link to post

Short link
Share on other sites

Да, ошибка у меня была - арту по зависимости реально не резало вообще.

 

При сравнении арт с другой техникой вычитай из оценки не 1, а 2.

В моем коде это строка else if(current->link->type==3 || base.link->type==3)same--; Тут нужно поставить same-=2;

Сделал

 

По светлякам подобным же методом ввести штраф при сравнении их с любой техникой кроме светляков и СТ 8-10 уровней.

if(current->link->type==4 && base.link->type!=4 && (base.link->type!=5 || base.link->level<8))same--;

Сделал

Share this post


Link to post

Short link
Share on other sites

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

 

Текущая версия программы и базы вот тут: http://rghost.ru/43225099

 

Исправление ошибок сравнения в ней уже есть, сейчас делаю приведение всех справочников к одному регистру и удаление А-20 и М103.

 

 

 

Кстати, китайцев в базе нет - я не знаю их точные имена чтобы забить.

 

UPD.

1. Привел все справочники к одному регистру.

2. Убрал танки А-20 и М103.

3. Убрал срезание статы при ее значениях ниже 45%.

4. Добавил итоговую порезку до 53/55/57% при недостаточном числе боев на высоких уровнях.

5. Исправил удаление "мелких" арт 5-7го уровней.

 

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

Edited by tourist

Share this post


Link to post

Short link
Share on other sites

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

Давай обновлять параллельно, так хотя бы можно будет сравнить и проверить правильность реализации. Ну или тебе нужно вникать в JS. :)

 

Кстати, китайцев в базе нет - я не знаю их точные имена чтобы забить.

Вот ссылка на файл с данными, который мы обновляем автоматом от патча к патчу: http://code.google.com/p/wot-xvm/source/browse/trunk/src/xvm/src/wot/utils/VehicleInfoData2.as

В нем есть все необходимое. Данные берутся из файлов клиента.

 

UPD.

1. Привел все справочники к одному регистру.

2. Убрал танки А-20 и М103.

3. Убрал срезание статы при ее значениях ниже 45%.

4. Добавил итоговую порезку до 53/55/57% при недостаточном числе боев на высоких уровнях.

5. Исправил удаление "мелких" арт 5-7го уровней.

Ок, как сделаю отпишусь.

 

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

Давай пока все кроме этого отладим. У меня пока нет возможности вычислять дамаг на лету, надо думать как это сделать. Скорей всего придется OLAP для аналитики поднимать, но это не скоро. В данный момент я обновляю его вручную, и обход всей базы занимает несколько часов.

Share this post


Link to post

Short link
Share on other sites

Вот ссылка на файл с данными, который мы обновляем автоматом от патча к патчу: http://code.google.com/p/wot-xvm/source/browse/trunk/src/xvm/src/wot/utils/VehicleInfoData2.as

В нем есть все необходимое. Данные берутся из файлов клиента.

Ок, начал добавлять китайцев.

 

Давай пока все кроме этого отладим. У меня пока нет возможности вычислять дамаг на лету, надо думать как это сделать. Скорей всего придется OLAP для аналитики поднимать, но это не скоро. В данный момент я обновляю его вручную, и обход всей базы занимает несколько часов.

Там все просто и вряд ли понадобится OLAP, я выше описывал суть:

 

 

На форуме предложили интересную идею - сделать таблицу с дамагом самообущающейся.

 

Алгоритм примерно такой:

 

1. При работе программы собираем статистику срезаний танков по двум показателям: насколько мы должны были срезать танк по дамагу (и доверию) и насколько фактически срезали с учетом других машин.

 

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

 

 

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

 

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

Edited by tourist

Share this post


Link to post

Short link
Share on other sites

Там все просто и вряд ли понадобится OLAP, я выше описывал суть:

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

Я писал ранее, что мы используем mongodb, а она не предназначена для подобных вычислений - в ней необходимо вычитывать все данные, что очень не эффективно. Для подобных задач нужна или реляционная SQL БД, или сразу OLAP.

 

Хотя надо будет подумать, может и получится корректировать на лету по твоему алгоритму...

Подумаю как будет время.

Share this post


Link to post

Short link
Share on other sites

Хотя надо будет подумать, может и получится корректировать на лету по твоему алгоритму...

Подумаю как будет время.

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

Share this post


Link to post

Short link
Share on other sites

Да не, вручную муторно.

К тому же, малая выборка будет иметь большую погрешность, а большая - те же проблемы с БД.

В общем, это нужно думать на свежую голову.



Почему-то не работает по следующему игроку: http://proxy.bulychev.net:1333/?0,TWR,___KPAH___

 

Первым находит этот акк: http://worldoftanks.eu/community/accounts/507610283-___KPAH___/

 

Надо что-то придумать с разными регионами. База-то общая. У нас ключом является id игрока, а имена могут дублироваться.



1. Привел все справочники к одно регистру.

2. Убрал танки А-20 и М103.

Это только в base.csv? Если да, то готово.

 

4. Добавил итоговую порезку до 53/55/57% при недостаточном числе боев на высоких уровнях.

Готово.

Share this post


Link to post

Short link
Share on other sites

Это только в base.csv? Если да, то готово.

Это в коде программы - воткнул функцию смены регистра и условия по "нечитанию" этих двух танков.

Share this post


Link to post

Short link
Share on other sites

Это в коде программы - воткнул функцию смены регистра и условия по "нечитанию" этих двух танков.

Хм, у меня наверно этой проблемы не было.

А насчет А-20 и М103 - это где?

Нашел

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

По делу:что то у меня одни проценты с прочерком показывает.Может что не правильно сделал?Вписал вот такой макрос в графу на загрузку: <font color='{{c:twr}}'>{{twr}}</font>..Правда я конфиг не менял(там моя сборка,не охота было переписывать),а просто вставил графы про цвет (// Динамический цвет по TWR (T-Calc) (только с xvm-stat) и т.д.).Вставил правильно,потому что конфиг работает и все показывает.Я только лог миникарты не переписывал,юзаю другую.А,да!Файл battle.swf и FinalStatistic.swf у меня свои,так как они завязаны на звук лампочки+моя рамка карты и мод статистики.Показывает версию 3.3.2 тест 2.Версия XVM-стат-1.2.0.Вроде бы какой то макрос пока не работает,вроде бы не этот?

Share this post


Link to post

Short link
Share on other sites

я же написал что еще не работает.

Спасибо за ответ.Точно не знал.

Share this post


Link to post

Short link
Share on other sites

Сие чудное творение будет использоваться по умолчанию в xvm?

И что означают колонки Ka и Kd в результате?

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

Сие чудное творение будет использоваться по умолчанию в xvm?

И что означают колонки Ka и Kd в результате?

по умолчанию вряд ли, так как TWR будет работать только начиная с довольно приличного количества боев. Но в куче кастомных конфигов наверняка будет использоваться.

 

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

Пока не дергайся, TWR не скоро запустится. Во-первых, он еще не готов, нужно доделывать, а времени как всегда не хватает. Во-вторых, по результатам тестов он все-таки весьма тяжел, так что наш прокси не справляется с расчетом. Некоторое время считается нормально, но когда попадается одновременно несколько пользователей с большим количеством танкав, сервис уходит в ступор. Так что тут еще нужно оптимизировать код, или думать как рассчитывать не на лету, а как-то по-другому. 

Share this post


Link to post

Short link
Share on other sites

И что означают колонки Ka и Kd в результате?

 

Коэфициент доверия к стате на танке и коэффициент достаточности дамага.

 

по умолчанию вряд ли, так как TWR будет работать только начиная с довольно приличного количества боев. Но в куче кастомных конфигов наверняка будет использоваться.

 

 

Нужно еще с кривым дамагом от ВГ что-то решить.

 

Пока не дергайся, TWR не скоро запустится. Во-первых, он еще не готов, нужно доделывать, а времени как всегда не хватает. Во-вторых, по результатам тестов он все-таки весьма тяжел, так что наш прокси не справляется с расчетом. Некоторое время считается нормально, но когда попадается одновременно несколько пользователей с большим количеством танкав, сервис уходит в ступор. Так что тут еще нужно оптимизировать код, или думать как рассчитывать не на лету, а как-то по-другому. 

Попробуй ограничить количество расчитываемых танков - скажем, до 20 или 15. Также можно ограничить глубину рекурсии - например, тремя уровнями.

 

 

 

 

Так, по советам читателей предлагаю добавить еще пару фишек.

 

1. Корректировать доверие в зависимости от числа боев: base[j].link->acc=base[j].link->acc*(1-1/sqrtf(base[j].battles));

 

2. Повышать % побед на проверяемом танке если на нем менее 300 боев и на других похожих танках стата лучше.

Я реализовал это следующим образом, но тут могут быть варианты:

 

if(current->battles<300 && (cutter(current->same[0])+cutter(current->same[1])+cutter(current->same[2])+cutter(current->same[3]))/m>cutter(current)){if(m)current->rate+=min(5-(float)current->battles/100,(cutter(current->same[0])+cutter(current->same[1])+cutter(current->same[2])+cutter(current->same[3]))/m-cutter(current)); else current->rate+=5-(float)current->battles/100; printf("\nRate of %s increased to %f",current->tank,current->rate);}

 

Это в самом начале функции generate, после строчки m=search(current);

Edited by tourist

Share this post


Link to post

Short link
Share on other sites

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

 

Так ведь стата пользователей обновляется раз в неделю, зачем его в реальном времени перерасчитывать?

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