可能是重复问题:System.Random keeps on returning the same value
我正在重构并扩展一个小的C#基于代理的模型,帮助一些生物学教授预测疾病的传播。在模拟的每一年中,每个个体代理会随机旅行到附近的人口节点,可能会传播疾病。我是C#的新手,但我已经了解到如果使用相同的系统时间重新初始化Random.Next,则可能存在返回相同值的潜在问题。为了避免这种情况,我创建了一个静态实例,每次需要新的随机值时引用它。
具体来说:
在我尝试扩展模型时,我将其更改为并行计算每个人口节点的“旅行”信息。在测试模型时,我注意到在新版本中,疾病不会传播到第一年之后。进一步的调查将问题缩小到节点之间的旅行。在第一年之后,所有代理都保持不动。我检查了负责它们旅行的函数,并发现它通过创建所有附近节点的列表、生成随机数<=列表中元素的数量,并前往listOfNearbyNodes [myRandomNumber]来工作。
问题:
然后我添加了一个打印语句,以输出每个迭代的随机索引值。我发现在模拟的第一年中,整个模型都按预期工作,随机数在可接受的范围内生成。然而,在第一年结束并且模拟循环之后,完全相同的代码仅返回0的“随机”索引。每个线程、每个迭代、每个节点、每个代理,总是0。由于代理的当前节点始终是列表中的第一个项目,因此代理再也不移动了。
我认为这可能是系统时间种子错误的另一种表现,因此我尝试了三种不同的实现静态随机对象的方法,但它没有帮助。每次运行模拟时,第一年总是正确工作,然后Random.Next()开始只返回0。
有人有想法吗?我应该从哪里寻找错误?谢谢!
我正在重构并扩展一个小的C#基于代理的模型,帮助一些生物学教授预测疾病的传播。在模拟的每一年中,每个个体代理会随机旅行到附近的人口节点,可能会传播疾病。我是C#的新手,但我已经了解到如果使用相同的系统时间重新初始化Random.Next,则可能存在返回相同值的潜在问题。为了避免这种情况,我创建了一个静态实例,每次需要新的随机值时引用它。
具体来说:
在我尝试扩展模型时,我将其更改为并行计算每个人口节点的“旅行”信息。在测试模型时,我注意到在新版本中,疾病不会传播到第一年之后。进一步的调查将问题缩小到节点之间的旅行。在第一年之后,所有代理都保持不动。我检查了负责它们旅行的函数,并发现它通过创建所有附近节点的列表、生成随机数<=列表中元素的数量,并前往listOfNearbyNodes [myRandomNumber]来工作。
问题:
然后我添加了一个打印语句,以输出每个迭代的随机索引值。我发现在模拟的第一年中,整个模型都按预期工作,随机数在可接受的范围内生成。然而,在第一年结束并且模拟循环之后,完全相同的代码仅返回0的“随机”索引。每个线程、每个迭代、每个节点、每个代理,总是0。由于代理的当前节点始终是列表中的第一个项目,因此代理再也不移动了。
我认为这可能是系统时间种子错误的另一种表现,因此我尝试了三种不同的实现静态随机对象的方法,但它没有帮助。每次运行模拟时,第一年总是正确工作,然后Random.Next()开始只返回0。
有人有想法吗?我应该从哪里寻找错误?谢谢!