Расчет коэффициентов, алгоритм распределения коэффициентовPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Расчет коэффициентов, алгоритм распределения коэффициентов

Сообщение Anonymous »

Я плохо говорю по-английски, заранее прошу прощения
Часть 1. Что и как работает
Сначала расскажу подскажите в чем заключается задача, нужно создать некий алгоритм, на входе которого будет массив с предметами, имеющими цену(

Код: Выделить всё

'cost' => 123
), а также входные данные — стоимость получения скина $get_cost = 123; , пример данных:

Код: Выделить всё

$get_cost = 10;
$items = [
['cost' => 5],
['cost' => 10],
['cost' => 20]
];
Также благодаря методу отбора и 2 часам потраченного времени я уже посчитал шансы для некоторых входных данных, например для данных, которые я показал выше, все равные шансы равны:

Код: Выделить всё

 +———–+—–——–+——–—+
| 5  | 10  | 20 |
+——––+——–––+—–——+
| 0  | 100 | 0  |
| 10 | 85  | 5  |
| 20 | 70  | 10 |
| 30 | 55  | 15 |
| 40 | 40  | 20 |
| 50 | 25  | 25 |
| 60 | 10  | 30 |
+——––+——–––+—–——+
*Я стер некоторые данные, чтобы они вас не беспокоили, данные, которые я стер, нужны были для выбора и так далее, на всякий случай
В таблице выше показаны возможные четные проценты для этих чисел, например, возьмем строку 4, 5 – 30%, 10 – 55%, 20 – 15%.
Теперь я расскажу, как это работает, например, выберем 10 миллионов предметов исходя из заданных шансов. раз, для каждой выборки (попытки) тратим остаток, пишем сколько потратили в условном $sum_spending = 0; и получаем следующий код:
< div class="snippet">

Код: Выделить всё

var get_cost = 10;
var sum = 0;
for (var i = 0; i < 10000000; i++) {
var rand = Math.floor(Math.random() * 100) + 1 // generate a number from 1 to 100
if (rand  10, 'chance' => 40],
['cost' => 20, 'chance' => 20]
];
Вот код, который выполняет выбор на основе указанных шансов (общая вероятность должна быть 100)

Код: Выделить всё

$items = [
['cost' => 5, 'chance' => 40],
['cost' => 10, 'chance' => 40],
['cost' => 20, 'chance' => 20]
];

foreach ($items as $key => &$item) {
if (isset($items[$key - 1])) $item['chance'] += $items[$key - 1]['chance'];
}

function getRandItem($items) {
$rand = rand(1, 100);
foreach ($items as $item) {
if ($rand 
После поиска в Википедии я пришел к выводу, что нам нужно использовать распределение Лапласа
Но это только мое мнение.
Давайте определим принцип шансов, записав все эти шансы, я нашел определенную закономерность, например возьмем следующую таблицу:
[code] +—————–———+——————————+———–——–+
|    5    |    20    |  SUM  |
+—————–———+——————————+———–——–+
| 66.6666 | 33.3333  | ~100% |
+—————–———+——————————+———–——–+
Если элементов 2, то шансовый вариант только 1, если элементов 3, то количество вариантов значительно увеличивается вплоть до бесконечности:

Код: Выделить всё

 +—————+———––+——––+––––––+
| 2.5 | 10  | 40 | SUM  |
+—————+———––+——––+––––––+
| 0   | 100 | 0  | 100% |
| 20  | 75  | 5  | 100% |
| 40  | 50  | 10 | 100% |
| 60  | 25  | 15 | 100% |
| 80  | 0   | 20 | 100% |
+—————+———––+——––+––––––+
Кроме того, всегда существует 1 или более шансов для входных значений, Исключение, если все входные значения меньше полученной суммы $get_cost или более (В во всех приведенных выше примерах $get_cost равен = 10),
Если есть входной параметр, равный $get_cost, всегда будет вариант, что он равен 100%.< /p>
Если имеется 3 или более входных параметра и есть параметр, равный $get_cost, всегда будет вариант, что вероятность того, что параметр, равный $get_cost, будет равна 0%. Это видно на примере выше.
Часть 3. Как рассчитать коэффициенты?
Шансы всегда увеличиваются и уменьшаются линейно и по определенной закономерности. , вот еще пара примеров:

Код: Выделить всё

 +———–+––———+——–––+———–––+
| 1  | 10  | 100 | SUM  |
+———–+––———+——–––+———–––+
| 0  | 100 |  0  | 100% |
| 50 | 45  |  5  | 100% |
+———–+––———+——–––+———–––+

Код: Выделить всё

 +———–+———––+–———+——–––+––————+
| 5  | 10  | 20 | 40  | SUM  |
+———–+———––+–———+——–––+––————+
| 0  | 100 | 0  | 0   | 100% |
| 20 | 70  | 10 | 0   | 100% |
| 40 | 50  | 5  | 5   | 100% |
| 50 | 25  | 15 | 5   | 95%  | // May not be used
| 60 | 30  | 0  | 10  | 100% |
| 80 | 0   | 10 | 10  | 100% |
+———–+———––+–———+——–––+––————+

Я не был достаточно умен, чтобы найти какую-то конкретную формулу, которая на основе входных параметров выдавала бы аналогичные шансы, если кто-то умнее и имеет лучшую логику, пожалуйста, помогите мне, я буду крайне благодарен, могу дать денежное вознаграждение (надеюсь, это не запрещено).
Также можно писать на любом языке, если что-то переводить для сами.
Также хотелось бы отметить, что большая часть кода была упрощена для лучшего понимания, а также я постарался объяснить задачу понятным языком.
Заранее прошу прощения за ошибки в словах, если таковые будут, пишу этот вопрос уже около 4 часов :)
Спасибо за внимание!

Подробнее здесь: https://stackoverflow.com/questions/785 ... -algorithm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Стабильный расчет больших биномиальных коэффициентов в C++
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Генетический алгоритм распределения Kubernetes
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Генетический алгоритм распределения Kubernetes
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему расчет Python с числами с плавающей точкой выполняется быстрее, чем расчет с целыми числами
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Расчет Bazel Digest расчет больших разреженных файлов медленно
    Anonymous » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»