Выбор предмета из заданного дистрибутива - PullRequest
0 голосов
/ 24 апреля 2010

У меня есть набор из X предметов, таких как {воздуходувка, косилка, плита}, и каждый предмет имеет определенный процент раз, когда его следует выбирать из общего набора {воздуходувка = 25%, косилка = 25%, плита = 75 %} вместе с определенным распределением, которому должны следовать эти элементы (воздуходувка должна быть выбрана больше в начале выбора, а печь больше в конце). Нам дается несколько объектов для общего выбора (т.е. 100) и общее время, чтобы сделать это (скажем, 100 секунд).

Я думал об использовании алгоритма колеса рулетки, в котором на вес на колесе влияет текущее распределение как функция прошедшего времени (и допустимой продолжительности), чтобы можно было использовать простые функции для определения веса. Есть ли какие-либо общие подходы к таким проблемам, о которых кто-нибудь знает?

В настоящее время я запрограммировал что-то похожее на это в Java, используя такие функции, как x ^ 2 (с правильной нормализацией для весов), чтобы обеспечить хорошее распределение. Другие предложения или общие практики приветствуются: -)

1 Ответ

0 голосов
/ 26 апреля 2010

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

  1. Найдите сумму весов всех потенциальных объектов, которые мы назовем wsum.
  2. Выберите случайное число, a.
  3. Инициализировать кумулятивную переменную, всего 0,0.
  4. Начиная с первого возможного объекта (вес> 0,0), добавьте вес к итогу.
  5. Если
  6. Если мы выбрали достаточно объектов, продолжайте, в противном случае перейдите к шагу 2.

Помогает отсортировать объекты по весам в порядке убывания, чтобы немного повысить скорость операции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...