根据概率和约束从列表中选择项目

时间:2015-12-19 00:14:26

标签: algorithm probability

我有一个项目列表,我想随机选择其中一个。应该更有可能选择其中一些项目然后列表中的其他项目,因此每个项目都可以设置某种概率。

此外,这些项目中的一些或更好:它们的概率取决于不同的约束条件。例如,如果变量X> 1,则列表项A应该具有更高的概率。 1.如果变量Z为真,则列表项B的概率应为0(即不得选择)。

现在,我假设最简单的方法是定义每个项目的概率并将其存储在ma或两个数组中,或类似的东西。但这真的是最好的方法吗,还有替代方案吗?如何将这些约束与随机选择和概率联系起来?

2 个答案:

答案 0 :(得分:0)

也许将您的数据表示为功能树?

http://www.cs.bris.ac.uk/~flach/mlbook/materials/mlbook-beamer.pdf

见幻灯片26.

答案 1 :(得分:0)

你可以"体重"每个项目和总重量。然后生成1到权重总和之间的随机数。然后找到与该随机数匹配的项目。以下是步骤:

第1步:计算每个点的点数(或重量),然后累计所有点数。

    Item RunningTotal
     A        5        -- 5 points
     B        6        -- 1 point
     C        6        -- 0 points 
     D        8        -- 2 points
-------------------------------------
    TOTAL                 8 points

第2步:使用您的语言的随机数函数生成1到总点数之间的随机数。类似的东西:

int match = Math.Random(1, 8); -- 8 is the total of the points.

第3步:找到与随机数匹配的项目。

int runningTotal = 0;
int index;

for(index = 1; index < Items.Count(); index++)
{
    if(Items[index].Points == 0)
        continue;

    runningTotal += Items[index].Points;

    if(runningTotal >= match)
       break;
}

return Items[index];   // the winner