根据概率和约束从列表中选择一个项目
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
我有一个项目列表,我想随机选择其中一个。它应该比列表中的其他项目更有可能选择其中一些项目,因此每个项目都可以设置某种概率。
此外,其中一些项目,或更好:它们的概率,取决于不同的约束条件。例如,如果变量 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