【问题标题】:Algorithm for pseudo-random function with certain characteristics [closed]具有某些特征的伪随机函数的算法
【发布时间】:2014-07-11 04:59:51
【问题描述】:

概览

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

  1. 每个玩家将被分配一个变量(float 类型)用于他们的钱、他们拥有并想要出售的产品(int* 类型)以及另一个变量来显示他们所处的位置。

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

  3. 每个玩家都有不同的地方价值,每个地方对每种产品都有不同的成本,不同地方之间的“运输成本”也随时间而不同。

玩家资料的简要数据结构如下:

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

      

现在我需要一个伪随机函数来设置每种产品的费率,从一个地方到另一个地方的运输费率,该函数还应该确定“公民”玩家应该购买或出售哪些产品以及以什么费率.此函数提供的值应遵循特定趋势一段时间并完全改变其趋势,但方差不应很高。伪函数的特点:

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

  2. 应该显示出随着某种趋势到某个点的逐渐变化。

问题:

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

  1. 方差应该很低。

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

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

【问题讨论】:

  • 这到底是什么问题?
  • @user3621123 请详细描述您想要的函数的属性

标签: c++ algorithm math random statistics


【解决方案1】:

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

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

y 是您感兴趣的变量,e_t 是高斯白噪声,均值为 0,方差为 sigma_e_t^2a0a1 是常数。

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

假设您需要yN 值,您可以生成数量为N 的白噪声。然后如您所见,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)) 范围内。

这个过程可能看起来像

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

需要在您的问题中添加更多详细信息,以便建议您如何在受到其他限制的情况下进一步调整此过程。

【讨论】:

  • @user3621123 可以再解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2015-08-24
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多