Текущий архив: 2005.10.30;
Скачать: CL | DM;
ВнизВыборка с приоритетом Найти похожие ветки
← →
keal (2005-10-10 18:25) [0]есть рад объектов с приоритетами.
1 - выбирается больше всех
2 - выбирается меньше
3 - еще меньше
...
необходимо выбрать случайно несколько объектов учитывая приоритет. помогите алгоритмом.
← →
MBo © (2005-10-10 18:46) [1]Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта
← →
MBo © (2005-10-10 18:47) [2]Пусть относительные вероятности 3:2:1
Частичные суммы 3, 5, 6 заносим в массив
генерируем случайное число в диапазоне 0..5, ищем в массиве част. сумм первое значение, большее случайного числа. его индекс - номер объекта
← →
Leonid Troyanovsky © (2005-10-10 18:51) [3]
> keal (10.10.05 18:25)
> необходимо выбрать случайно несколько объектов учитывая
> приоритет. помогите алгоритмом.
Пусть 1 объект выбирается с вероятностью 0.5
2 - 0.3
3 - 0.2 (т.е., для всех объектов сумма = 1)
Тогда функция
function RandObjIdx(const p: array of Double): Longint;
var
i: Longint;
px : Double;
begin
px := Random;
for i := 0 to High(p) do
if px < p[i] then
begin
Result := i;
Exit;
end;
Result := High(p)+1;
end;
будет возвращать случайный индекс (от 0) объекта для заданной
функции распределения: idx := RandObjIndex([0.5, 0.5+0.3]
--
Regards, LVT.
← →
keal (2005-10-10 18:54) [4]а если есть
a) 1
b) 1
c) 10
сумма = 12
c - будет выпадать чаще всего, а надо чтоб a и b
← →
keal (2005-10-10 18:57) [5]Leonid Troyanovsky ©, дело в том, что приоритеты заранеее не известны.
← →
Leonid Troyanovsky © (2005-10-10 18:57) [6]
> keal (10.10.05 18:54) [4]
> а если есть
> a) 1
> b) 1
> c) 10
idx := RandObjIdx([1/12, 2/12]);
--
Regards, LVT.
← →
keal (2005-10-10 19:00) [7]число выбираемых объектов фиксированое
← →
keal (2005-10-10 19:05) [8]Leonid Troyanovsky ©, я понял.
всем спасибо.
Страницы: 1 вся ветка
Текущий архив: 2005.10.30;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.038 c