基于一些外部值分布
可以说我有四种货币,我想选择一个随机:基于一些外部值分布
Bronze, Silver, Gold, Platinum
基于一些“评级”的价值,我想的概率分配给每个货币因为它有机会被选中。假设这个评级值是0.0 - 5.0
现在我想重新分配铂金方面,如果我的评级较高,并且如果我的评级较低,则向铜牌方加权。
所以5.0的得分可能看起来像:
Bronze: 0.0, Silver: 0.10, Gold: 0.30, Platinum: 0.60
而且同样的0.0的评级可能看起来像:
Bronze: 0.60, Silver: 0.30, Gold: 0.10, Platinum: 0.0
的2.5评级可能看起来更均匀地分布之间的中间汇率。
我真的不能想到一个算法来处理这个问题。我如何根据控制分配的某个值来生成100%的分配?有谁知道我可以从哪里开始?
一个微不足道的答案是将4条直线适合您所拥有的数据并称之为一天。
更灵活的方法是以任何喜欢的方式定义4个非负相对权重函数,如bronze(r)
,silver(r)
,gold(r)
,platinum(r)
。然后你定义了total(r) = bronze(r) + silver(r) + gold(r)+ platinum(r)
。现在青铜的概率是bronze(r)/total(r)
。
这种方法的好处是,你可以玩像这样的功能:bronze(r) = 4 * 0.3^r
,silver(r) = 2 * 0.7^r
,gold(r) = 1
,platinum(r) = 0.1 * 1.8^r
。而现在在r=0
青铜是最有可能的。银最有可能在r=1
。黄金最有可能在r=2
。而在r=5
铂是最有可能的。
你应该尝试各种功能,并解决游戏中最可玩的任何结果。
非常感谢这个解决方案!这对我来说比实现一些复杂的统计函数容易得多,我也喜欢我可以调整数字以加权来玩 – Brejuro
这里有一些想法/草图,对此我可能应该受到统计学家的惩罚(至少对于执行)。我假设这不是一个大规模的拟合问题,可能需要其他方法。
总的想法是:使用dirichlet-distribution来生成最终分布。 dirichlet分布本身也有参数(见wiki),我们在这里使用正态分布,因为对称性和只有2个参数需要(我们可以在这里修正方差,这样我们只需要一个在任务中定义的变量;方差仍然是一个设计参数来控制这个标量 - > dist函数的映射;实际上,这也可以用作一些1d优化问题中的优化变量,这个问题不是微不足道的,因为它可能是非凸的,评估函数)作为定义我们的狄利克雷分布的内部分布。
下面是一些示例代码(蟒蛇),这可能是一个理论上的恶梦,也没有在numpy的/ SciPy的使用率方面是很好的,但是,嘿,这只是一个例子:
import numpy as np
from scipy.stats import norm
def get_sample(param):
# location = mean shifted because of the task (symmetry not at zero!)
outer_normal = np.array([norm.pdf(x, scale=1, loc=param-2.5) for x in np.linspace(-1, 1, 4)])
# shifting (we need positive reals as dirichlet-input) maybe critical in terms of theory
shifted_outer_normal = outer_normal + np.amin(outer_normal)
return np.random.dirichlet(shifted_outer_normal)
# Try 3 values (borders + mean) and sample 1000 times each; calculate means
print(np.mean([get_sample(0) for i in range(1000)], axis=0)) # input: 0
print(np.mean([get_sample(2.5) for i in range(1000)], axis=0)) # input: 2.5
print(np.mean([get_sample(5) for i in range(1000)], axis=0)) # input: 5
输出:
[ 0.73142688 0.21514722 0.04402889 0.00939702] # remark: only approximating sum=1 as independent means
[ 0.21711426 0.27841426 0.28205054 0.22242094]
[ 0.00943747 0.04039373 0.22860444 0.72156436]
我会对dirichlet分布做一些研究,但是很多统计术语超出了我的头,虽然哈哈。另外麻烦在于将它翻译成我正在使用的语言Swift – Brejuro
'所以评级为5.0可能看起来像'这种评分是给哪种货币?铂? – axiom
@axiom我只是举了5.0的评级“加权”分布的例子。看看铂金如何被挑选的可能性更高?评级不与任何货币配对,对所有货币都是分开的,但只是控制分配。 – Brejuro