目前,我有一群篮球运动员,我预计每位球员的总分数。另外,我有一个正常的分布函数,可以从每个玩家的正态分布中随机抽取。目前,我有一个算法,根据一些约束计算8个玩家的n个独特随机阵容。在每个阵容之间,正常分布函数再次运行以为每个玩家产生新的预测。然后为该特定预测集生成最佳阵容。
我想以下列方式调整此算法。我希望有4层最大和最小百分比,每个玩家被分配一个等级。在生成的阵容数量中,我希望每个特定的播放器都以该频率发生。因此,例如,如果我想生成10个阵容,而玩家1在第1层,需要玩家在50-60%之间,那么玩家最好在5-6个阵容中出现。
我正在努力解决如何修改我当前的算法以包含此规定。任何想法将不胜感激!我只是不知道如何强制每个玩家在特定的百分比范围内。
答案 0 :(得分:1)
有很多方法可以做到。
这是一种简单的方法。保持每个玩家被选中的当前相对几率。实际概率是相对赔率除以赔率之和。每个人都以预期的次数开始。无论何时选择某人,他们的相对赔率都会降低1.如果低于0,那么该人就会离开游泳池。
这种方法可以保证每位玩家不会超过最大数量的球队。这使得任何特定球员都不会比你想要的球队更少,但并非不可能。
解决这个问题的一个简单方法是随机上下调整人们所需的频率,以获得正确的整数。而现在一切都必须变得均匀。
但还有另一个问题。这可能是你没有成功完成任务以填补所有球队。但是如果你从最受欢迎的球员到最少球员,那么这种错误的可能性应该低得可以接受。如果你通过填充一些额外的团队来稍微扩大范围,那么就丢掉那些没有成功的团队。
答案 1 :(得分:0)
因此,如果我理解正确,你可能会有第一个出现的N个玩家 字符串的位置。但是你希望它们不是随意选择的,而是根据 一定比例。
现在第一步是规范化这些百分比:
总和为160%,因此您生成1到160的随机数;说它是97。
97 is more than 20, so subtract 20 and ignore Alice.
77 is more than 40, so subtract 40 and ignore Bob.
37 is more than 10, so subtract 10 and ignore Charlie.
27 is less than 60: Doug it is.
您还可以使用20个“Alice”索引,60个“Doug”索引等预先填充160个元素的数组,并且您的播放器为players[array[random(160)]]
。