Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рандомайзер 
V
    Опции темы
Zorak
Дата 14.5.2013, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Доброго времени суток. Сижу вот размышляю над темой. Мне надо написать рандомизер, но какбы "правильный" рандомизер. Т.е. какова суть задачи?
есть для примера n игроков. И есть количество игр: например 100. Процент выигрыша в каждой игре для каждого учасника равно 25%(не меняется никогда); Мне надо написать рандомизер, который будет делать победителя какогото из игроков в каждой игре, у которого будет шанс ровно 25%, а не извните на слове тупой корейский рандом типа random(1,4); При етом если етих 4 игрока сыграли 100 игр подряд, то процент выыиграшей среди победителей тоже не превышало 25% от количества сыграных игр. Т.е. все влажівается в 2 пункта:
1. В игре надо сделать шанс 25% (чтобы реально был шанс 25%)
2. После сыгранных n игр общий процент выиграшей для каждого из игроков тоже не превышал 25%.

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

Спасибо.


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
_Y_
Дата 14.5.2013, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Что-то я не понял в Ваших условиях. 
Цитата(Zorak @  14.5.2013,  19:13 Найти цитируемый пост)
Процент выигрыша в каждой игре для каждого учасника равно 25%(не меняется никогда)

как-то непонятно. Видимо, вероятность выигрыша в каждой игре 25%?

Цитата(Zorak @  14.5.2013,  19:13 Найти цитируемый пост)
4 игрока сыграли 100 игр подряд, то процент выыиграшей среди победителей тоже не превышало 25%

Тоже непонятно. Если 4 играли какое-то количество игр и ни один не выиграл больше, чем 25% игр, то кто выиграл остальные игры? Ведь 25%*4=100%. Или возможны еще и ничьи?

Мне кажется здесь и у Вас какое-то непонимание. Если игры выигрываются именно случайным образом, то теоретически возможно что один игрок выиграет первые же 5 миллионов игр подряд. Понятно, что вероятность такого везения чрезвычайно низка, но она есть. Поэтому гарантировать именно 25% при "правильной" рандомизации нельзя (только при неправильной smile ). Видимо, что-то Вы не объяснили в условии задачи.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Zorak
Дата 14.5.2013, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



нет, немного не так _Y_ , смотри.. например, есть 4 игрока под номерами 1,2,3,4.
И так, ниже приведена таблица:

Код

игра       номер игрока         % выигрыша
1                      1                              25
1                      2                              25
1                      3                              25
1                      4                              25

2                      1                              25
2                      2                              25
2                      3                              25
2                      4                              25

........................

100                  1                              25
100                  2                              25
100                  3                              25
100                  4                              25


Т.е. В каждой игре шанс 25% выигрыша именно для каждого игрока и в каждой игре выигрывает только один игрок. Т.е. надо придумать какойто алгоритм, который даст в результате действительно 25%-ый шанс выигрыша, так как банальный rand(1,4) не катит, ибо ето не 25%, хотя и цифр всего 4.

Тоесть первую игру например победил игрок №1. Во второй №3, в третьей опять №1, в четвертой №4 и так далее.....
В итоге после 100 сыгранных игр (не учитывая 25%-ый шанс выигрыша в каждой игре) каждый из четырех должен выиграть не более 25 раз, т.е. (25%). Если ето было 200 игр, то не более 50 выиграшей для каждого из участников...


Ну по сути мне надо только алгоритм расчета победителя в каждой игре отдельно с таким то шансом. а дальше я уже сделаю сам.

Иными словами у меня проблема сделать "правильный" шанс выигрыша в игре....

З.ы. Если не понятно то могу обьяснить еще по другому, даже с примерами более корректными)

Спасибо

Это сообщение отредактировал(а) Zorak - 14.5.2013, 21:56


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 14.5.2013, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: нет
Всего: 55



Цитата(Zorak @  14.5.2013,  20:54 Найти цитируемый пост)
Тоесть первую игру например победил игрок №1. Во второй №3, в третьей опять №1, в четвертой №4 и так далее.....
В итоге после 100 сыгранных игр (не учитывая 25%-ый шанс выигрыша в каждой игре) каждый из четырех должен выиграть не более 25 раз, т.е. (25%). Если ето было 200 игр, то не более 50 выиграшей для каждого из участников...

Первое предложение противоречит остальным двум.
Вы допускаете, что при 4 играх распределение будет: 
    2, 0, 1, 1
Но для 100 игр у вас уже поровну:
    25, 25, 25, 25
Если хоть один раз случится первое, то из 100 игр распределение уже будет:
    26, 24, 25, 25

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

А вообще, попробуйте сделать rand(1,4) пару миллиардов раз и сделайте табличку с результатами и посмотрите. Если разница получится менее половины погрешности (1% в вашем случае), то это можно считать вполне удовлетворительным.

Это сообщение отредактировал(а) Arantir - 14.5.2013, 23:28


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Zorak
Дата 14.5.2013, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Цитата
Вы допускаете, что при 4 играх распределение будет: 
    2, 0, 1, 1
Но для 100 игр у вас уже поровну:
    25, 25, 25, 25
Если хоть один раз случится первое, то из 100 игр распределение уже будет:
    26, 24, 25, 25

погрешность +-1, даже +-2 в принципе допустима, но это не основная моя задача. Основная как раз организовать нахождение победителя среди четырех игроков за одну игру, но сделать ето нужно с процентным шансом, в данном случае с 25%. Т.е. надо чистой воды контрольный рандом)

Цитата
Существуют методы приведения нормального к равномерному.

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

Это сообщение отредактировал(а) Zorak - 14.5.2013, 23:40


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 14.5.2013, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: нет
Всего: 55



Кстати mt_rand в PHP очень неплох:
    24999547, 24999210, 25000434, 25000809
Максимальное отклонение всего 0,00007%


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Zorak
Дата 15.5.2013, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Цитата(Arantir @ 14.5.2013,  23:52)
Кстати mt_rand в PHP очень неплох:
    24999547, 24999210, 25000434, 25000809
Максимальное отклонение всего 0,00007%

хм..... -=)))))

З.Ы, По сути на PHP и буду реализовывать данный алгоритм)

Это сообщение отредактировал(а) Zorak - 15.5.2013, 00:02


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 15.5.2013, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: нет
Всего: 55



А еще можно немножко схитрить...

Код

$arr = array();
$arr[1] = $arr[2] = $arr[3] = $arr[4] = 0;
for ($i = 0; $i < 100000000; $i++)
{
    if(mt_rand(1,10) == 1)
    {
        $arr[ array_keys($arr, min($arr))[0] ]++;
    }
    else
    {
        $arr[mt_rand(1,4)]++;
    }
}

foreach($arr as $a)
{
    echo $a, ", ";
}
Код

    25000000, 25000002, 24999999, 24999999
 smile 


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Zorak
Дата 15.5.2013, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Хах... ну да.... готовый подконтрольный алгоритм генерации случайности  хДДД


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Akina
Дата 15.5.2013, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Составьте массив последовательных результатов с нужным итогом. Затем используйте любой алгоритм случайного перемешивания.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 15.5.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



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

В общем, возможно, Вам нужен не рандомайзер, а алгоритм "принудительной социальной справедливости" smile  smile 
Можно сделать как-то так.
1. Имеем N игроков.
2. Играется одна игра с равной вероятностью выигрыша для каждого игрока 100%/N (25% при четырех игроках).
3. Берем число игроков, имеющих наибольшее число выигрышей (М) и присваиваем им вероятность выигрыша 0%. Вероятность делим между остальными (100%/(N-M)) и играем следующую игру.
4. Считаем новое M. Если M<N переходим к №3. Если нет заканчиваем игры или переходим к №2.

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

Если непонятно изложил, могу код на Java написать.

Это сообщение отредактировал(а) _Y_ - 15.5.2013, 14:33


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 15.5.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Рандомайзер тут вообще не при чём - ему надо получить строго детерминированный результат.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zorak
Дата 15.5.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Цитата
В общем, возможно, Вам нужен не рандомайзер, а алгоритм "принудительной социальной справедливости"


Ну по сути да, просто в точку.

Цитата
Если непонятно изложил, могу код на Java написать.


Нет, почему, все понятно изложил, догнал... и нет, писать не надо, реализацию я сам сделаю, просто мне было необходимо ЧТО мне делать ))). А алгоритм, который ты описал, мне подходит в прнципе на все 100%... По сути в каждой игре отдельно получается действительно рандом, но в конечном итоге все "справедливо")))... Спасибо огромное. Считаю тему закрытой....

Добавлено через 1 минуту и 17 секунд
Цитата
Рандомайзер тут вообще не при чём - ему надо получить строго детерминированный результат.

Он мне нужен в конце, что при описанном алгоритме от _Y_ вполне получается.


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
_Y_
Дата 15.5.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(Akina @ 15.5.2013,  15:03)
Рандомайзер тут вообще не при чём - ему надо получить строго детерминированный результат.

Совсем уж детерминированный не получится, т.к. существуют количествa проведеных игр не-кратныe количеству игроков.


 Но для кратных чисел игр действител'но никакой рандомизации - все по-честному, всегдa всем поровну smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 15.5.2013, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



_Y_, согласно условию, у него должно получиться
Цитата(Zorak @  14.5.2013,  20:13 Найти цитируемый пост)
шанс ровно 25%

следовательно, любое некратное количество делает задачу нерешаемой.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1116 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.