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

Selecting an Item from a List based on Probabilities and Constraints

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

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

现在,我假设最简单的方法是定义每个项目的概率并将其存储在一个 ma 或两个数组或类似的东西中。但这真的是最好的方法吗,还有其他选择吗?我如何 link 那些对随机选择和概率的限制?

也许将您的数据表示为特征树?

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

参见幻灯片 26。

您可以 "weight" 每个项目并计算总重量。然后生成一个介于 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