【发布时间】:2010-07-07 16:00:57
【问题描述】:
我正在重构和扩展一个基于 C# 代理的小型模型,以帮助一些生物学教授预测疾病的传播。模拟的每一年,每个个体随机移动到附近的人口节点,可能传播疾病。我是 C# 的新手,但我读过有关 Random.Next 的潜在问题,如果使用相同的系统时间重新初始化,则返回相同的值。为了避免这种情况,我创建了一个静态实例,每个新的随机值都会引用它。
具体情况:
在我努力扩大模型的过程中,我对其进行了更改,以并行计算每个人口节点的“旅行”信息。在测试模型时,我注意到在新版本中,疾病不会在第一年之后传播。进一步的调查将问题缩小到节点之间的旅行。第一年之后,所有特工都保持不动。我检查了负责他们旅行的函数,发现它通过创建所有附近节点的列表、生成随机数
问题:
然后我添加了一个打印语句来输出每次迭代的随机索引值。我发现整个模型在模拟的第一年完全按照预期工作,生成的随机数在可接受的范围内。然而,在第一年结束和模拟循环之后,完全相同的代码只会返回一个“随机”索引 0。每个线程、每次迭代、每个节点、每个代理,总是 0。因为代理的当前节点总是列表中的第一项,代理不再移动。
我认为这可能是系统时间种子错误的另一种表现形式,所以我尝试了三种不同的方式来实现静态随机对象,但都没有帮助。每次我运行模拟时,第一年总是正常工作,然后 Random.Next() 开始只返回 0。
有没有人知道我应该在哪里寻找错误?谢谢!
【问题讨论】:
-
重现错误的简短而完整的代码示例将有助于您和 SO 社区帮助您诊断问题。
-
我问了一个我认为相关且可能有帮助的问题:stackoverflow.com/questions/2924599/…
标签: c# random c#-4.0 return-value