From: Daniel K. <d.k...@go...> - 2012-06-20 13:52:07
|
Hello all, ok, I now added the following for speed factor computation: const SUMOReal devA = MIN2(SUMOReal(2.), MAX2(SUMOReal(-2.), rng.randNorm(0, 1.))); return (devA*mySpeedDev + 1.) * mySpeedFactor; The rng was moved to MSVehicleControl and now serves within choosing routes and vtypes from according distributions as well as for computing the speed factor. I suppose that's all for this topic, isn't it? sincerely, Daniel 2012/6/13 Michael Behrisch <beh...@us...>: > Hi Daniel, > > 2012/6/8 Daniel Krajzewicz <d.k...@go...>: >> b) >> Ok, I implemented speed deviations by calling an MSVehicleType method named >> "computeChosenSpeedDeviation" in the MSBaseVehicle and setting this value >> as lane max. speed factor for the vehicle. It is currently computed as: >> >> SUMOReal devA = MIN2(+2.*mySpeedDev, MAX2(-2.*mySpeedDev, >> mySpeedDevRND.randNorm(0, mySpeedDev))); >> return devA + mySpeedFactor; >> >> Could someone verify this? > > The specification > http://sumo.sourceforge.net/doc/current/docs/userdoc/Specification.html#Types > says we apply the speed factor first and then the deviation factor. So > if we have a lane speed of 50, a speed factor of 2 and a deviation of > 0.1, we should have a normal distribution with mean 100 and std dev of > 10. With the code above we get mean 100 and std dev 5. If it fits user > expectations better we can change the spec as well. > Furthermore I am not 100% sure about the randNorm implementation. It > calls the parameter "variance" but the way it is used looks more like > standard deviation. To be on the safe side we could simply: > const SUMOReal devA = MIN2(2., MAX2(-2., mySpeedDevRND.randNorm(0, 1.))); > return devA*mySpeedDev + mySpeedFactor; > or to be spec compliant: > return (devA*mySpeedDev + 1) * mySpeedFactor; > >> I introduced an own MSVehicleType RNG, initialised in sumo_main.cpp - you >> can now pass a pointer to RandHelper::initRandGlobal (should be probably >> renamed). >> This means all RNGs will use the same seed/methodology as the usual static >> one. I think that's fair enough. > > My intention was to solve > https://sourceforge.net/apps/trac/sumo/ticket/444 so we should use > this rng also for choosing from the vtype and route dists (and rename > it accordingly :-)). > >> Now, a lane has no longer a getMaxSpeed-method, but a method named >> getSpeedLimit which returns the maximum allowed speed, and a method named >> getVehicleMaxSpeed which obtains a vehicle and returns the speed the >> vehicle wants to use on this lane. I assume that this is not the fastest >> solution, but I think the most clean. > > I like it, > Micha |