可能重复:
System.Random继续返回相同的值
我正在重构和扩展一个基于C#代理的小型模型,以帮助一些生物学教授预测疾病的传播.模拟的每一年,每个单独的代理人随机地前往附近的人口节点,可能传播疾病.我是C#的新手,但是我已经读过Random.Next的潜在问题,如果使用相同的系统时间重新初始化,则返回相同的值.为了避免这种情况,我创建了一个为每个新随机值引用的静态实例.
具体内容:
在我扩展模型的努力中,我改变了它以并行计算每个人口节点的"旅行"信息.在测试模型时,我注意到在新版本中疾病不会在第一年过去.进一步的调查将问题缩小到节点之间的旅行.第一年后,所有代理人都保持不动.我检查了负责他们旅行的功能,发现它的工作原理是创建一个附近所有节点的列表,生成一个随机数<=列表中的元素数,然后前往listOfNearbyNodes [myRandomNumber].
问题:
然后我添加了一个print语句来输出每次迭代的随机索引的值.我发现整个模型在模拟的第一年完全按预期工作,随机数生成在可接受的范围内.但是,在第一年结束并且模拟循环之后,完全相同的代码将仅返回0的"随机"索引.每个线程,每个迭代,每个节点,每个代理,始终为0.因为代理的当前节点始终是列表中的第一项代理永远不会再移动.
我认为这可能是系统时间种子错误的另一种表现,所以我尝试了三种不同的方法来实现静态随机对象,但它没有帮助.每次运行模拟时,第一年总是正常工作,然后Random.Next()开始只返回0.
有没有人有关于我应该在哪里寻找bug的想法?谢谢!
我刚刚用C#编写了一个体积适中的疾病传播模型.但是,我对.NET很新,不确定如何继续.目前我只需双击.exe文件,模型从文本文件导入配置设置,做到这一点,并将结果输出到文本文件中.
我接下来要做的是编写一个Python脚本来执行以下操作:
到目前为止,我的大部分编程经验都是在Linux上的C/C++中.我对最后两项很有信心; 但是,我不知道如何继续前两个.以下是一些我喜欢的具体问题:
谢谢!
c# ×1
c#-4.0 ×1
filesystems ×1
python ×1
random ×1
return-value ×1
simulation ×1
subprocess ×1