我正在尝试创建一个需要具有以下特征的伪随机函数的游戏:
每个玩家都会为他们的钱分配一个变量(类型为float),他们拥有并希望出售的产品(int *类型)和另一个变量来显示他们所在的位置。
每位玩家都有权将他们拥有的任何产品出售给任何其他玩家;此外,游戏还涉及一个计算机播放器,代表该地区的其他公民,他们想要购买产品或销售某些产品。
每位玩家都会有不同的地方价值,每个地方每种产品的成本会有不同的成本和运输成本。不同地方之间的差异也随时间而变化。
玩家简介的简要数据结构如下:
typedef struct PLAYER{
char *name;
int place;
int *products;
int noOfProducts;
float money;
PLAYER();
PLAYER(&ply);
.
.
.
}*ptrPLAYER;
现在我需要一个伪随机函数来设置每个产品的速率,从一个地方到另一个地方的运输速度,并且该功能还应该确定哪些产品应该是"公民"玩家买入或卖出以及以何种价格出售。此函数提供的值应遵循特定趋势一段时间并完全改变其趋势,但方差不应该很高。伪函数的特征:
应该是先前生成的值和时间的函数。
在一些趋势到某种程度之后,应该表现出逐渐的变化。
随机函数应具有以下属性:
差异应该很低。
如果我们将函数定义为int *randomFnc( int previousResult[])
,则函数应遵循一些非常难以破解的趋势,同时,它不应达到超出该点的{{1提供相同的结果。
答案 0 :(得分:1)
您可以为流程建模。作为起点,您可以选择类型为AR(1)的自回归模型:
y_t = a_0 + a_1 * y_(t-1) + e_t (1)
其中y
是您感兴趣的变量,e_t
是高斯白噪声,平均值为0,方差sigma_e_t^2
和a0
,a1
是常量。< / p>
- 应该是先前生成的值和时间的函数。
醇>
如果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)
范围内)。
此过程可能看起来像
您可以添加趋势以使其y_t = a_0 + a_1 * t + a_2 * y_(t-1) + e_t
,它看起来像
我们需要在您的问题中添加更多详细信息,以便建议您如何进一步调整此流程以适应其他限制。