创建动态点平均脚本

时间:2013-07-31 13:39:33

标签: algorithm math

我是那种乐于坐下来并在很长一段时间内使用反复试验来尝试工作的人。然而,我完全陷入困境,并认为也许有人可能能指出我正确的方向。

我正在尝试创建一个脚本,允许为1-6名玩家分配一些对象,每个对象都有一个特定的分值。

脚本需要平均每个玩家获得的分数。

它需要能够添加一组新的对象,然后根据已经获得的累积点数进行分配,并尝试分发它们以使总数尽可能相等。

[TL; DR位]

假设有6名球员。

在第一轮中,6个盒子被“赢了”:两个大盒子@“1000pts”,两个中型@“500pts”和两个小盒子“250ps”。

剧本显然必须给每个玩家奖励一个方框。

p1 1000 p2 1000 p3 500 p4 500 p5 250 p6 250

假设在第二轮赢得相同数量的方框。该脚本将不得不计算谁能得到尽可能接近的分数。

p1 250 p2 250 p3 500 p4 500 p5 1000 p6 1000 

会给出

的总数
p1 1250 ps 1250 p3 1000 p4 1000 p5 1250 p6 1250
等等几轮。

基本上它需要计算每轮如何奖励分数,同时保持每个球员的总得分尽可能接近。

任何帮助都会非常感激,因为这个概念让我头疼,试图弄清楚最好的方法是什么,更不用说实际的代码本身了!

3 个答案:

答案 0 :(得分:0)

在每一轮的每一步中,总是给具有最低价值的盒子赋予具有最低当前财富的玩家。如果在任何时候都有玩家与财富挂钩,请随意选择一个。

您可能会或可能不想在任何一轮中为同一位玩家分配多个方框,这取决于您。

除非你知道接下来会有什么方框,或者计划在以后的轮次中重新分配前几轮的方框,否则我认为你不能超越这种简单的方法。

答案 1 :(得分:0)

我认为有一个非常简单的解决方案可以用伪伪代码解决你的问题:

你想要的第一个“盒子”,可能是随机的

2个订单玩家,取决于所获得的总价值

3从最低值到最高值分配新的“盒子”,从得分最高的玩家开始。

4转到2

使用您的约定,这将结束于:

1°轮------------------- p1 1000 p2 1000 p3 500 p4 500 p5 250 p6 250

2°轮------------------- p1 1250 p2 1250 pr 1000 p4 1000 p5 1250 p6 1250

新玩家订单变为: p1 1250 p2 1250 p5 p1250 p6 1250 p3 1000 p4 1000

等等,应用算法agian: p1 1500 p2 1500 p5 1750 p6 1750 p3 2000 p4 2000

3°圆 新玩家订单变为: p3 2000 p4 2000 p5 1750 p6 1750 p1 1500 p2 1500

等等,再次应用算法: p3 2250 p4 2250 p5 2250 p6 2250 p1 2500 p2 2500

..似乎有效。

答案 2 :(得分:0)

如果您必须随机分配这些方框,那么您可以为每个人分配概率,类似于选秀抽签(如果您是体育迷)。这个概率用于查看谁获得下一个最高价值的奖品。

例如:

Let W(i) be the current wealth for person i

Let T=W(1) + W(i) + ... + W(n)

Let P(i) = W(i) / T

每个P(i)都是人i获得下一个最低奖金的概率。如果总结所有P(i),则它等于1,因此在(0-1)区间内展开它们。然后使用随机数生成器获取01之间的数字。它的间隔时间(最有可能是财富最多的人),然后那个人获得最低奖金。

与其他人重新计算TP(),以确定获得所有奖项之前获得下一个较低奖金的概率。

您可以使用不同的重量来逼近它们。