Перейти к содержимому

Замена карт


andreyasu1

Рекомендованные публикации

Игроки
18 публикаций
12 559 боёв

Насколько я понял карта выбирается по принципу karta = random(23). Официальный ответ разработчиков был - "сложно реализовать алгоритм для 30ти разных игроков" . Так вот вам алгоритм :

Рассмотрим упрощенный вариант для простоты понимания , допустим у нас есть 6 игроков и 4 карты ( в полной версии 30 игроков и 24 карты ). Для каждого игрока создаем табличку в бд , в коде одномерный массив для работы с таблицей. дальше мы записываем несколько последних карт на которых пользователь воевал , количество карт назовем углублением и обозначим int ug=2;. Теперь допустим что в процессе игры для каждой карты начиная с последний задается свой "вес" , для той карты  на которой пользователь был в предыдущем бою вес самый большой и равен ug ,  в нашем случае 2. Для предпоследней ug-1, и так далее в зависимости от углубления , веса записываются в строку и суммируются, для понимания рассмотрим пример , допустим мы имеем 4 карты Map0,Map1,Map2,Map3 и наш пользователь играл последний бой на Map0 а предпоследний на Map2 тогда наша таблица в одну строку имеет вид

__________Player0________

Map0___Map1____Map2__Map3

_2_______0________1_____0__

 

Еще пример последний бой на Map1 и предпоследний на Map1:

__________Player0________

Map0___Map1____Map2__Map3

_0_______3________0_____0__

 

А дальше все просто , 5 человек нажимают кнопку в бой и суммируются 5 строк , то есть  пример берем пять строк

2 0 1 0

0 0 2 1

3 0 0 0

2 1 0 0

0 3 0 0

________

7 4 2 1

 

Отсюда мы видим  что вес в четвертой строке 1 , а значит карта номер 4 (Map3) встречалась реже всех за последние два боя среди всех 5ти игроков!!! А теперь берите 30 игроков и 24 карты как в игре с углублением равным 10 , я сделал программку на с++  , и даже смог доказать в ней что такой способ оптимальнее чем независимый от прошлых значений рандом.Но скидывать exe не стал а то точно тему не пропустят , думаю вы и сами сможете написать .

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

  • Плюс 8
Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв

Предлагал уже.

 

18 Фев 2012 - 01:44 пользователь Kolyanon сказал:

Предлагаю следующий алгоритм:

 

Для каждого игрока на сервере ведется таблица. Сыграл на карте- получил 1 балл в таблицу напротив этой карты.

 

В рандоме формирование команды идет обычным способом.

 

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

 

Всем игрокам в их таблицы +1 напротив этой карты.

 

Если несколько карт имеют одинаково малое количество баллов, то из этих карт случайным образом выбирается одна. Получает +1 и в следующий раз вероятность ее выпадения ниже.

 

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

 

Считаю, что подобный алгоритм уменьшит вероятность серий из одинаковых карт, а то 5 боев 3 малиновки и 2 песчаная река и т.п.

Предлагаю уйти в ту ветку

  • Плюс 2
Ссылка на комментарий
Игроки
2 586 публикаций
24 715 боёв
22 Фев 2012 - 02:03 пользователь andreyasu1 сказал:

Насколько я понял карта выбирается по принципу karta = random(23). Официальный ответ разработчиков был - "сложно реализовать алгоритм для 30ти разных игроков" . Так вот вам алгоритм :

...

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

Считаю, что подобный метод сильнейшим образом повысит нагрузку на балансер. Вроде бы мелочь, но аккаунтов-то очень много. Уже написал подобную програмку на с++ — шикарно. Теперь забей в тестовую базу миллиона полтора подобных записей и просто выбери 30 строк не поддающихся индексированию. А потом умножь нагрузку этак в пять-десять тысяч раз (кол-во одномоментных боёв).

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

Ссылка на комментарий
Игроки
613 публикации
3 575 боёв
Пользователь сказал:

и даже смог доказать в ней что такой способ оптимальнее

можно уточнить критерий оптимальности?
  • Плюс 1
Ссылка на комментарий
Игроки
18 публикаций
12 559 боёв
23 Фев 2012 - 11:20 пользователь ekanax сказал:

Считаю, что подобный метод сильнейшим образом повысит нагрузку на балансер. Вроде бы мелочь, но аккаунтов-то очень много. Уже написал подобную програмку на с++ — шикарно. Теперь забей в тестовую базу миллиона полтора подобных записей и просто выбери 30 строк не поддающихся индексированию. А потом умножь нагрузку этак в пять-десять тысяч раз (кол-во одномоментных боёв).

Хм а тогда расчет боевой ситуации для 30ти игроков сразу убьет сервера. Все относительно то есть, это небольшая нагрузка для таких серверов и большая для домашнего компьютера
23 Фев 2012 - 11:24 пользователь grey_sky сказал:

можно уточнить критерий оптимальности?

насколько помню критерий оптимальности это немного другое а здесь критерий нормальности распределения или что то такое , вообщем проверку производил программно без углубления в математику по очень простому принципу проверялись ряды по 10 выпавших карт то есть  берем  ряд из миллиона карт по этому алгоритму и миллиона карт по чистому независимому рандому , дальше программа просто просмотрела все ряды по десять карт подряд то есть с 1й по 10ю, дальше со 2й по 11ю, итд , если в ряду встречались две одинаковые карты то +1 бал на счетчик (две пары +2) итд. Конечный коэффициент по моему методу был в разы меньше рандома.

 

Про повтор , та тема посвящена другому алгоритму  , и эта тема не является повторением а предлагает другой алгоритм которому она и посвящена!

Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв

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

Таким образом,  АЛГОРИТМ ЯВЛЯЕТСЯ ЧАСТНЫМ СПОСОБОМ УБРАТЬ ПОВТОРЕНИЕ КАРТ.

Чему, собственно и посвящена та тема.

Собственно, именно по этой причине я добавил свой ответ именно туда, а не стал плодить новые темы.

 

По поводу выборки карт миллион раз, позвольте усомниться, поскольку такая наука, как "Теория случайных чисел" ясно и четко говорит нам, что при достаточно больших выборках (а миллион это много) вероятность выпадения каждой из 23 карт будет одинаковой, в пределах погрешности. Цель же убрать повторение карт при игре 10-30-100 боев в день. И тут, при выборе карты ВБР и начинаются повторы.

Замечу, что не у всех и не всегда. Просто игроков много, карт мало и то, что для оного игрока маловероятно, в условиях большого количества игроков становится весьма вероятным.

 

Алгоритм способен убрать повторение как раз при игре небольшого количества боев, хотя полностью убрать повторение он не в силах.

 

По поводу нагрузки на сервер: разработчики и так ведут нашу статистику, а недавно стали собирать еще какую то информацию. Наверняка в статистике содержится и кто сколько раз на какой карте играл. Сервера справляются. При работе алгоритма баллансер собирает команды по обычному своему алгоритму. После того, как команды собраны сложить 23 числа у 30 игроков занимает лишь несколько процессорных тактов. т.е. время на эту операцию ничтожно лдя каждого боя. Подождать же дополнительно пару секунд при массовом онлайне малая цена за возможность комфортной игры.

 

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

Ссылка на комментарий
Игроки
288 публикаций
18 196 боёв
24 Фев 2012 - 08:35 пользователь Kolyanon сказал:

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

Да бросьте! Вы что, заходя в игру каждый раз наигрываете 200-300 боев в песочнице, а потом едете на топах? Похоже на бред. А статистику по картам можно сбрасывать при каждой загрузке клиента или просто раз в день. К тому же ТС постулировал такое понятие как глубина выборки - зачем учитывать последние 100 боев? Можно учесть только 10! И тогда даже если вы наигрались в сласть в песочнице, а потом перешли на высокий уровень, через 5-7 боев все встанет на место. За эти бои как раз отдохнете от намозоливших за 300 боев карт.

Ссылка на комментарий
Игроки
2 586 публикаций
24 715 боёв
24 Фев 2012 - 05:18 пользователь andreyasu1 сказал:

Хм а тогда расчет боевой ситуации для 30ти игроков сразу убьет сервера. Все относительно то есть, это небольшая нагрузка для таких серверов и большая для домашнего компьютера

Ой, не надо нагнетать. Домашний компьютер принципиально от сервера не отличается ни чем. Учитывая общие нагрузки «для таких серверов» даже полпроцента замедления будут заметны. Разница как раз в объемах. И ты упускаешь факт, что с увеличением числа полей-карт нагрузка растёт в геометрической прогрессии. Одно дело отслеживать твоим методом две карты, другое дело тридцать две. Одно дело гонять единичный поток, другое — пару тысяч. И ради чего? Ради сомнительной выгоды.
Все виды неприязни ко мне прошу выражать исключительно в суицидальной форме.

Ссылка на комментарий
Игроки
126 публикаций
7 236 боёв
Вы, конечно, извините, я далеко не програмист, но разве обращение к такой таблице (или базе), поиск по ней и выполнение - это не нагрузка? Около 140 000 боев одновременно, по, в среднем, 12 минут каждый - это примерно 7 боев в секунду или 7*30=210 обращений к базе в секунду по поиску, вычислению, сравнению и, при одинаковых величинах, тому же рандому против просто 7 операций рандома, как есть сейчас. Имхо, нагрузка есть и она на порядок отличается от существующей.
Ссылка на комментарий
Игроки
613 публикации
3 575 боёв
Пользователь сказал:

насколько помню критерий оптимальности это немного другое а здесь критерий нормальности распределения или что то такое

Да, Вы правы, оптимальность - это комплексное понятие.

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

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

Пользователь сказал:

допустим у нас есть 6 игроков и 4 карты ( в полной версии 30 игроков и 24 карты ). Для каждого игрока создаем табличку в бд , в коде одномерный массив для работы с таблицей. дальше мы записываем несколько последних карт на которых пользователь воевал , количество карт

с учетом этого - нагрузка сильно возрастет.
Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв
24 Фев 2012 - 08:59 пользователь IronFenyx сказал:

 

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

У них накоплен большой вес песочных карт, и когда их баллансит к обычным игрокам, этот вес практически исключает выбор данных карт, поскольку у остальных игроков карты распределяются более менее равномерно. Получим в итоге посты "где малиновка? уже неделю не видел?"

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

 

Алгоритм, как и любая БД заработает только после накопления определенного объема данных. поэтому ограничивая выборку 5-10 боями вернемся к тому же ВБР.

Ссылка на комментарий
Игроки
126 публикаций
7 236 боёв
24 Фев 2012 - 10:54 пользователь Kolyanon сказал:

Алгоритм, как и любая БД заработает только после накопления определенного объема данных. поэтому ограничивая выборку 5-10 боями вернемся к тому же ВБР.

Какие 100 боев в песочнице? В алгоритме у ТС учитываются только 2 предыдуших боя. Откуда вы вообще это взяли?

Ссылка на комментарий
Игроки
613 публикации
3 575 боёв

Ну вот скажите... не бывает же, например, более 3-4 боев на 1 карте подряд?

Да и на одной карте часто кидает на разные стороны.

 

В чем причина недовольства текущим рандомом карт?

Ссылка на комментарий
Игроки
126 публикаций
7 236 боёв
24 Фев 2012 - 10:57 пользователь grey_sky сказал:

Ну вот скажите... не бывает же, например, более 3-4 боев на 1 карте подряд?

Бывает :)

Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв
24 Фев 2012 - 10:44 пользователь grey_sky сказал:

с учетом этого - нагрузка сильно возрастет.

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

Сервера справляются.

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

 

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

Ссылка на комментарий
Игроки
126 публикаций
7 236 боёв
24 Фев 2012 - 10:59 пользователь Kolyanon сказал:

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

Может Вы все-таки ответите, зачем алгоритму накапливать статистику по всем боям? Для того, чтобы минимизировать повторение, достаточно учитывать два последних боя, как описано в первом сообщении. Для этого абсолютно не нужна ВСЯ статистика боев..

Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв
24 Фев 2012 - 10:57 пользователь Soroxis сказал:

Какие 100 боев в песочнице? В алгоритме у ТС учитываются только 2 предыдуших боя. Откуда вы вообще это взяли?

ТС пришел к углублению в 10 боев

Учитывая, какое число игроков играет одновременно, 10 боев у 30 игроков частенько будут приводить к власти ВБР, кроме того если глубина выборам меньше количества карт, вероятность сыграть одному игроку за небольшое количество боев на всех картах низка (и это без учета повторение карт).

При углублении в 2 боя ВБР не исключает последовательности : карта 1-3-2-4-1-3-5-1-23-3-1

Ссылка на комментарий
Игроки
37 публикаций
24 937 боёв
24 Фев 2012 - 11:04 пользователь Soroxis сказал:

Может Вы все-таки ответите, зачем алгоритму накапливать статистику по всем боям? Для того, чтобы минимизировать повторение, достаточно учитывать два последних боя, как описано в первом сообщении. Для этого абсолютно не нужна ВСЯ статистика боев..

Про всю статистику я никогда и не говорил.

Для нормальной работы базы необходим определенный объем информации.

Цель вводить любой алгоритм не только в исключении повторов карт подряд, чего выборка в 2 боя по 30 игрокам вовсе не исключает (она лишь снижает вероятность события, и при большом количестве игроков онлайн повтоения будут) сколько дать возможность игрокам играть на всех картах. А то топь выпадает пару раз в день, зато эль халуф и песчаная река регулярно.

Ссылка на комментарий
Игроки
126 публикаций
7 236 боёв
24 Фев 2012 - 11:09 пользователь Kolyanon сказал:

ТС пришел к углублению в 10 боев

Учитывая, какое число игроков играет одновременно, 10 боев у 30 игроков частенько будут приводить к власти ВБР, кроме того если глубина выборам меньше количества карт, вероятность сыграть одному игроку за небольшое количество боев на всех картах низка (и это без учета повторение карт).

Согласен, но карт ведь не 100, а 24. Как лично мне кажется 10-12 ступеней глубины выборки будет вполне достаточно.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации новых ответов.
  • Сейчас на странице   0 пользователей

    • Эту страницу никто не просматривает.
×
×
  • Создать...