Процентый шанс ответа.
Как сделать систему шансов. Например у меня есть 10 чисел. При нажатии на кнопку выбирается одно из чисел. Если оно выбралось, оно будет выпадать чаще других. То есть шанса выпада этого числа повысится.
Я думал делать так: Создать массив с вариантами (1,2,3,4,5,6,7,8,9,0) Создать массив с шансами (10,10,10,10,10,10,10,10,10,10) Потом делать рандом и выбирать шанс из массива, а потом выбирать число и когда оно выпадает, увеличивать шанс. Но у меня не получилось. Подскажите как такое можно осуществить? Добавлено через 2 минуты И как вообще осуществить процентный шанс? Как сделать при увеличении одного параметра ,равномерное сниженое других, но учитывая, что все равно в общем должно выходить 100%..? |
после выбора, добавить это число в исходный массив еще раз (или несколько раз). Теперь, в исходном массивет его будет 2 (или более), когда остальных по-прежнему останется по-одному. Шансы получить выбранное число повысятся.
|
Спасибо, попробую.
Добавлено через 6 минут Получилось. Спасибо, оказалось проще, чем думал. Добавлено через 4 часа 45 минут Мне требуется другое решение. Так как иногда некоторые варианты могут отпадать. Например в процессе отключить цифру 5. А как сделать при вашем коде? Делать цикл по удалению всех полей с 5? Но тогда будет значение null, а это мне не подходит. |
так удаляйте со смешением, чтобы не было пустых null
|
|
Цитата:
В общем случае проще оставить числа как есть, но добавить веса. Изначально вес каждого равен 1. Ели число выбрано -- его вес увеличиваем (до 2, 10, 1000 -- как нужно). Далее формируем случайное число, причем в качестве диапазона берем сумму всех весов. Как потом найти выпавшее число, полагаю, достаточно очевидно. Цитата:
|
Цитата:
|
Алгоритм древний и проверенный, но непосредственно АС3-класс написан на коленке (NP++) за 5 минут (в АС3 не использовал ибо), так что, возможно, придётся внести фикссы, чтобы компилировалось. Без оптимизации работает не самым быстрым способом. Помимо того, возможно накопление ошибок при сложении чисел с плавающей точкой. При таком раскладе первая зарегистрированная грань будет выпадать гипотетически чаще. Чтобы этого избежать, шансы граней должны быть одного или близких порядков. Грубо говоря, самый маленький шанс и самый большой не должны отличаться более чем на три-четыре порядка. Но в большинстве задач можно забить на эту ошибку, она реально ничтожна.
Код AS3:
Так же легко работать и с целочисленными шансами, но я не думаю, что это удобно. |
Цитата:
Например, у нас есть три значения с весами 5, 3 и 2. Получаем случайное число в промежутке 0-1, далее: - если до 0.5 - выпало первое значение - больше 0.5 и меньше 0.8 - второе - больше 0.8 - третье |
Собственно, решил сделать эксперимент интереса ради :)
Код AS3:
|
Часовой пояс GMT +4, время: 16:11. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.