根据非线性百分比计算奖励值?

时间:2013-06-05 20:07:08

标签: perl math

我正在编写一个赌博类型的游戏,随着机会减少,奖励需要变得更大。

例如,此处是以下机会百分比的目标最高奖励:

100% = 1
50% = 250
0.01% = 2000

只要符合上述值的百分比值,我可以用什么公式来计算奖励?

其他信息1:

这是我的价值观和奖励倍数 - 房子边缘是2%。

Percent: 97.651 ::: multiplier :: 1.0035 
Percent: 91.28 ::: multiplier :: 1.0736 
Percent: 86.3 ::: multiplier :: 1.1355 
Percent: 78.893 ::: multiplier :: 1.2421 
Percent: 72.1 ::: multiplier :: 1.3592 
Percent: 65.38 ::: multiplier :: 1.4989 
Percent: 50 ::: multiplier :: 1.96 
Percent: 47.76 ::: multiplier :: 2.0519 
Percent: 34.252 ::: multiplier :: 2.8611 
Percent: 29.51 ::: multiplier :: 3.3209 
Percent: 19.45 ::: multiplier :: 5.0385 
Percent: 11.44 ::: multiplier :: 8.5664 
Percent: 8.453 ::: multiplier :: 11.5935 
Percent: 6.876 ::: multiplier :: 14.2524 
Percent: 4.893 ::: multiplier :: 20.0286 
Percent: 2.465 ::: multiplier :: 39.7565 
Percent: 1.45 ::: multiplier :: 67.5862 
Percent: 1 ::: multiplier :: 98 
Percent: 0.46 ::: multiplier :: 213.0434 
Percent: 0.2348 ::: multiplier :: 417.3764 
Percent: 0.0984 ::: multiplier :: 995.9349 
Percent: 0.0344 ::: multiplier :: 2848.8372 
Percent: 0.01 ::: multiplier :: 9800

我只想弄清楚是否有一种算法可以根据上面的3个值确定最大可能的获胜金额。理由是,在50%时我希望最高奖励为250而在0.01%我希望它为2000 - 无论是什么,下注金额是多少。我可以很容易地找出符合这些值的最大赌注。

所以也许问题应该没有提到赌博。问题只是我可以根据符合上述3个值的百分比输入找出其他值吗?

2 个答案:

答案 0 :(得分:1)

你可以做一个简单的反向奖励功能。

假设P是范围[0,1]上的值。 P=1表示保证获胜,而P=0表示保证失败。

奖励值的简单算法R,作为获胜概率P的函数,将类似于:

R(P) = (1/P) -1

除了P之外,这对P=0的所有值都有效,在这种情况下,奖励应为零,因为这是一个保证的损失,没有人会采取,如果这是一个保证的胜利,支出为零。

因此,在C中执行此操作将是:

float reward(float chance) {
  float result;
  if (chance <= 0.0f) {
    result = 0.0f;
  } else {
    result = (1.0f / chance) - 1.0f;
  }
  return result;
}

这将产生快速变化的曲线。这里可以找到一个永久链接到样本图:

http://fooplot.com/plot/jqvf3sqmys

如果您想加速下降,只需更改(1/P)的指数,即:

R(P) = (1/P)^2 -1  (Faster drop off)
R(P) = (1/P)^3 -1  (MUCH Faster drop off)

这是计算此类奖励的一般方法。如果您希望它适合您在上面提到的三个数据点,则必须求助于曲线拟合,样条插值,广义最小二乘等,以使上述方程最适合您的数据点。或者您可以使用泰勒多项式生成一个简单的4阶多项式方程(即:ax^4 + bx^3 + cx^2 + dx + e),它恰好适合所有数据点

祝你好运!

答案 1 :(得分:0)

对于参与赌博的逻辑玩家,预期回报值必须大于他的赌注。预期的返回值为reward · probability,因此我们有等式

reward · probability - stake ≥ 0

如果部分奖金被征税(税率为百分比),那么我们有

reward · (1 - tax) · probability - stake ≥ 0

如果所有其他变量都已知,我们可以将好的奖励计算为

reward  ≥ stake /( (1-tax) · probability )

所以所需的奖励与概率的倒数成正比。

获胜的概率不是很好(这是零误差除外),但这应该被认为是“迷失”的游戏,因此不需要进行奖励计算。

如果计算出的奖励太高,则总是可以限制(但这会让玩家不太可能参与赌博)

my $tax = 0.02; # 2%
my $max_reward = 2000;
my $min_reward = 1;

sub calculate_reward {
  my ($probability, $stake) = @_;
  die "zero probability, neccessary stake is infinite" if $probability <= 0;
  my $reward = $min_reward + $stake/( (1-$tax) * $probability);
  $reward = $max_reward if $reward > $max_reward;
  return $reward;
}