Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 创建动态点平均脚本_Algorithm_Math - Fatal编程技术网

Algorithm 创建动态点平均脚本

Algorithm 创建动态点平均脚本,algorithm,math,Algorithm,Math,我是那种乐于坐下来,在很长的一段时间里尝试和解决问题的人。然而,我完全被卡住了,我想也许有人能给我指出正确的方向 我正在尝试创建一个脚本,允许1-6名玩家被分配一些对象,每个对象都有一个特定的点值 剧本需要平均每个玩家获得的点数 它需要能够添加一组新的对象,然后根据已获得的累计点数进行分配,并尝试分配这些对象,以使总数尽可能相等 p1 250 p2 250 p3 500 p4 500 p5 1000 p6 1000 [TL;比特博士] 假设有6名玩家 在第一轮比赛中,共有六箱"赢":两个大箱

我是那种乐于坐下来,在很长的一段时间里尝试和解决问题的人。然而,我完全被卡住了,我想也许有人能给我指出正确的方向

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

剧本需要平均每个玩家获得的点数

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

p1 250 p2 250 p3 500 p4 500 p5 1000 p6 1000 
[TL;比特博士]

假设有6名玩家

在第一轮比赛中,共有六箱"赢":两个大箱"1000分,两个中箱"500分",两个小箱"250分"

很明显,剧本必须给每个玩家一个盒子

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
等了好几轮

基本上,它需要制定出每一轮如何奖励积分,同时保持每个球员的总积分尽可能接近

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

如果有任何帮助,我将不胜感激,因为这个概念让我很头疼,因为我一直在试图找出最好的方法是什么,更不用说实际的代码本身了

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

在任何一轮比赛中,你可能想也可能不想给同一名球员分配多个包厢,这取决于你自己


除非你知道下一步会出现什么样的盒子,或者计划在以后的几轮中重新分发前几轮中的盒子,否则我认为你无法击败这种简单的方法。

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

1第一次分配您想要的“盒子”,可能是随机的

根据获得的总价值订购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


…这似乎是可行的。

如果你必须总是随机分配盒子,那么你可以给每个人分配一个概率,就像抽签一样(如果你是体育迷)。这个概率用于确定谁获得下一个最高价值的奖品

例如:

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)
区间。然后使用随机数生成器获取介于
0
1
之间的数字。在任何时间间隔内(最有可能是财富最多的人),该人获得的奖金最低

与剩下的人一起重新计算
T
p()
,以确定下一个较低奖金的概率,直到所有奖金都颁发为止


你可以使用不同的重量来迫使他们更靠近。

这将有助于分享你目前的一些想法。每名球员是否会(应该)每轮只得到一个箱子?这意味着每一轮的奖励框数量与玩家数量相同,而且,即使最好将两个盒子分配给一个玩家来平衡这一分数,这也是不可能的。你有没有可能接受答案?嗯,看来我在这个问题上想得太多了,忽略了最简单的解决方案。在一轮比赛中,可能会有比玩家更多的盒子,所以我可能需要实时完成这项任务,以便在每个盒子之后重新计算。非常感谢您的回复,我想这会让我走上正确的道路!