具有一定特征的伪随机函数算法

时间:2014-05-22 08:52:04

标签: c++ algorithm math random statistics

视图

我正在尝试创建一个需要具有以下特征的伪随机函数的游戏:

  1. 每个玩家都会为他们的钱分配一个变量(类型为float),他们拥有并希望出售的产品(int *类型)和另一个变量来显示他们所在的位置。

  2. 每位玩家都有权将他们拥有的任何产品出售给任何其他玩家;此外,游戏还涉及一个计算机播放器,代表该地区的其他公民,他们想要购买产品或销售某些产品。

  3. 每位玩家都会有不同的地方价值,每个地方每种产品的成本会有不同的成本和运输成本。不同地方之间的差异也随时间而变化。

  4. 玩家简介的简要数据结构如下:

    typedef struct PLAYER{
        char *name;
        int place;
        int *products;
        int noOfProducts;
        float money;
        PLAYER();
        PLAYER(&ply);
            . 
            .
            .
    }*ptrPLAYER;
    

    现在我需要一个伪随机函数来设置每个产品的速率,从一个地方到另一个地方的运输速度,并且该功能还应该确定哪些产品应该是"公民"玩家买入或卖出以及以何种价格出售。此函数提供的值应遵循特定趋势一段时间并完全改变其趋势,但方差不应该很高。伪函数的特征:

    1. 应该是先前生成的值和时间的函数。

    2. 在一些趋势到某种程度之后,应该表现出逐渐的变化。

    3. 问题:

      随机函数应具有以下属性:

      1. 差异应该很低。

      2. 如果我们将函数定义为int *randomFnc( int previousResult[]),则函数应遵循一些非常难以破解的趋势,同时,它不应达到超出该点的{{1提供相同的结果。

      3. 随机函数应生成一组值(例如100个值),这些值以某种独特的方式直接依赖于先前生成的值。

1 个答案:

答案 0 :(得分:1)

您可以为流程建模。作为起点,您可以选择类型为AR(1)的自回归模型:

y_t = a_0 + a_1 * y_(t-1) + e_t    (1)

其中y是您感兴趣的变量,e_t是高斯白噪声,平均值为0,方差sigma_e_t^2a0a1是常量。< / p>

  
      
  1. 应该是先前生成的值和时间的函数。
  2.   

如果N值为N,您可以生成y个白噪声。然后如您所见,y及时t的值直接取决于之前的值y_(t-1),您可以根据您的e_t数组和关系始终在两者之间切换(1)。

  

方差应该很低。

y_t的无条件差异是

var(y_t) = sigma_e_t^2 / ( 1 - a_1^2)  if a_1^2 < 1

所以你可以把它做得尽可能小(在[sigma_e_t^2, +inf)范围内)。

此过程可能看起来像

enter image description here

您可以添加趋势以使其y_t = a_0 + a_1 * t + a_2 * y_(t-1) + e_t,它看起来像

enter image description here

我们需要在您的问题中添加更多详细信息,以便建议您如何进一步调整此流程以适应其他限制。