gpt4 book ai didi

c# - 使用 System.DateTime.Now.Ticks 作为种子值

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:41 26 4
gpt4 key购买 nike

我已经启动了一个无线传感器网络仿真代码,但我不明白seed的含义以及System.DateTime.Now.Ticks的返回值是什么> 在下面的方法中。

public void Reset(bool bNewSeed) {
// this function resets the network so that a new simulation can be run - can either be reset with a new seed, or with the previous seed (for replay.)
this.iProcessTime = 0;
this.iPacketsDelivered = 0;
foreach (WirelessSensor sensor in aSensors) {
sensor.iResidualEnergy = sensor.iInitialEnergy;
sensor.aPackets = new ArrayList();
sensor.iSensorRadius = iSensorRadius;
sensor.iSensorDelay = 0;
foreach (WirelessSensorConnection connection in sensor.aConnections) {
connection.iTransmitting = 0;
connection.packet = null;
}
}
aRadar = new ArrayList();
if (bDirectedRouting == true)
SetRoutingInformation();
iLastUpdated = iUpdateDelay;
if (bNewSeed == true)
this.iSeed = (int) System.DateTime.Now.Ticks;
r = new Random(iSeed);
}

最佳答案

DateTime.Now.Ticks返回 long表示该实例中的刻度数。

通过为 Random 的实例提供种子值您正在指定用于计算伪随机数序列起始值的数字。

因此,如果您有 Random 的两个实例两者都具有相同的种子,它们将生成相同的值,例如:

var randomOne = new Random(1);
var randomTwo = new Random(1);

var valOne = randomOne.Next(1, 1000);
var valTwo = randomTwo.Next(1, 1000);

valOne.Equals(valTwo); // True

所以为了制造一个随机实例more random可以使用一个不太可能被预测的值,在你的例子中是 DateTime 实例上的刻度数。例如

var random = new Random((int)DateTime.UtcNow.Ticks);

或者更好的方法是:

var random = new Random(Guid.NewGuid().GetHashCode());

关于c# - 使用 System.DateTime.Now.Ticks 作为种子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34980265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com