Пример #1
0
        private double GetRouteUtility(EdgeRoute er)
        {
            double iUtilitySum = 0;

            foreach (var item in er)
            {
                iUtilitySum += tca.GetTripCost(item);
            }
            return(iUtilitySum);
        }
Пример #2
0
        /// <summary>
        /// 使用离散选择模型中的logit模型进行路径的选择。
        /// 返回1代表选择路径A,返回2代表选择路径B
        /// </summary>
        /// <returns></returns>
        internal override int Select(EdgeRoute routeA, EdgeRoute routeB)
        {
            //第一个路径的路段效用和
            double iUtilityA = this.GetRouteUtility(routeA);
            //第二个路径的路段效用和
            double iUtilityB = this.GetRouteUtility(routeB);

            //logit中的分母
            double dDevider = Math.Exp(iUtilityA) + Math.Exp(iUtilityB);

            //logit 模型
            double dProbA = 1 - Math.Exp(iUtilityB) / dDevider;

            Random rd = new Random(0);

            if (dProbA >= rd.NextDouble())
            {
                return(1);
            }
            return(2);
        }
Пример #3
0
 internal virtual int Select(EdgeRoute routeA, EdgeRoute routeB)
 {
     return(0);
 }