5.1 好计划和坏计划,分数和效用
如第1.4节以及图1.1和1.4所示,MATSim基于一种协同进化算法:每个个体agent通过保持多个计划进行模拟学习,这些计划通过在mobsim中执行来得分。根据得分来选择,会不断修改计算。迭代过程包含以下元素:
-
Mobsim
流动性模拟,是为个体人选择一个“选定的”计划,并在路网环境中执行。这也可以称为网络加载。
-
Scoring
综合模拟中挑选计划的实际执行情况,用来计算每个计划的得分。
-
Replanning
包含以下几项过程:
- 如果个体人的计划数超过最大计划数(配置参数),则将根据(可配置的)计划选择器(选项集减少、计划删除)删除计划。
- 对于某些代理,计划会被复制、修改,然后选择用于下一次迭代(选择集扩展、创新)。
- 所有其他个体人在各自的计划之间进行选择。
个体人在给定迭代中的计划可以被认为是个体人在该迭代中的选择集。结果可得出,步骤1和2修改了选项集,而步骤3实现了选项之间的实际选择。选择通常基于分数;得分越高的计划越有可能被选中。这将在第*章中详细讨论还有。就目前而言,需要注意的是,Replanning的三个步骤必须配合工作方法:计划删除步骤应删除“坏”计划,创新步骤应生成“好”计划,而选择通常应选择好计划。这里,“好”的意思是“能够在mobsim/scoring中获得高分”。幸运的是,由于其进化的概念,该方法是相当稳健的:创新步骤并不总是产生好的解决方案。但是如果一些解决方案是好的,并导致高分,也已经足够。
这样看来,得分显然是MatSIM的核心要素。只有获得高分的解决方案才会被个体人选择,并且在计划删除步骤后仍然有效。因此,对于给定的场景,评分函数需要是“正确的”,这或多或少意味着,计划“表现良好”获得的评分要高于“表现不好”的计划。一个性能是否好,最终取决于居住在一个地区的出行者:一些人可能更喜欢拥挤的汽车旅行,另一些人可能更喜欢拥挤但负担得起的公共交通旅行,而另一些人可能更喜欢使用自行车(即使在恶劣的天气)。
找到这一评分函数的典型方法是使用计量经济学效用函数,例如来自随机效应模型(例如,Ben-Akiva and Lerman, 1985; Train, 2003))的得分。然而,在AI(人工智能)中,效用函数也可以以更一般的方式使用:例如,每个个体代理(或整个系统)想要或应该优化的分数(Russel和Norvig,2010)。
基于这些原因,“分数”和“效用”这两个术语在MATSim上下文中通常是可以互换的。由于我们需要边际效用的概念,本章将主要讨论“效用”。
用户可以配置许多参数来指定评分功能。当用户准备在本书的下一部分中扩展MATSim时,还将学习如何插入自己定制的评分功能。
然而,由于MATSim是基于完整的日计划,因此仅对部分的一日计划(例如,模式选择)应用选择模型并不简单,详见第节。由于文献中没有完整的日效用函数,MATSim从所谓的Charypar-Nagel评分或效应函数开始(第5.2节)。该评分函数有时会因具体研究而被修改、扩展或替换(第5.5节)。如第节所述,尚未提供适用于全天效用函数的估算值。
5.2 Charypar-Nagel 效应函数
5.2.1 数学公式
第一个,也是最基本的,MATSim评分函数是由Charypar和Nagel(2005)发明,基于Vickrey(1969)和Arnott等人(1993)描述的道路拥堵模型。最初,这个公式是为出发时间的选择而建立的。然而,迄今为止进行的所有研究表明,该函数也适用于得分计算的建模。
5.2.1.1 基本函数
基础方程为,活动效应S(act,q) 的加和,加上 出行效应S(trav,mde(q)) 的加和,即得到计划效应值,S(plan)。
以N为活动数。行程q是活动q之后的行程。对于评分,最后一个活动与第一个活动合并,以产生相等数量的行程和活动。
5.2.1.2 活动
活动q的效应计算如下(另见Charypar和Nagel,2005,p.377页):
每个对应数值的定义如下:
Performing an activity
上述公式计算的数值为,q活动执行的效应。t(dur,q)为执行活动的时长。β(perf) 与活动持续时间的边际效用(或时间作为一种资源的边际效用)有关,对所有活动都是一样的(见第5.2.4节)。t(0,q)是效用开始为正的持续时间。活动地点的开放时间需要加以考虑。
该公式默认设置的属性, typicalDurationScoreComputation=relative 定义如下:
通过该设置,t(0,q)由表达式t(0,q)=t(ty,p,q)q·exp(−1/prio(q)),其中p(rioq)是一个可配置参数。因此可将上述等式重写为
在典型持续时间(t(dur, q)=t(typ, q))下,第一项为零,因此具有相同prio(q)值的所有活动类型,在其典型持续时间下产生相同的相对分数 β(perf)/prio(q)(每小时)。
此外,所有活动的斜率为
一般来说,和表现在他们的典型持续时间。
图5.1显示了这种函数如何对t(typ)、prio(q)或 β(perf)的变化作出反应。另一种设置(现在已弃用)将在第5.6 节讨论。
图5.1:当TypicalDurationScoreCalculation设置为relative时,执行活动后带来的奖励。
上图:改变典型持续时间的效果。
中间:改变优先级的效果。
底部:改变性能的影响。
注意,在上图中,典型持续时间的分数与典型持续时间成正比。
Waiting
表示等待时间,例如,在仍然关闭的商店前;β(wait)是等待时间的直接边际效用(见第5.2.4节);t(wait,q)是等待时间。我们建议将β(wait)设为0;另见第5.2.5节。
Late arrival
指定迟到惩罚,其中t(start, q)是活动q的开始时间,t(latest.ar)是最晚的无惩罚活动开始时间,例如,上班、歌剧或剧院演出的正式开始时间。
Early departure
定义停留时间不够久的惩罚,其中t(end, q)是实际活动结束时间,t(earliest.dp, q)是最早可以结束活动的时间。我们通常建议将 β(early.dp)保留为0(如果有找到更好的模拟数值,可以替换该数值)。
Activity duration too short
是对活动过短的惩罚,其中t(short.dur)是最短的活动持续时间。我们通常建议将 β(short.dur)保留为0(如果有找到更好的模拟数值,可以替换该数值)。
Config syntax
其语法如下:
<module name="planCalcScore">
<parameterset type="scoringParameters"/>
<param name="subpopulation"value="null"/>
<param name="performing"value="6.0"/>
<param name="waiting"value="-0.0"/>
<param name="lateArrival"value="-18.0"/>
<param name="earlyDeparture"value="-0.0"/>
...
<parameterset type="activityParams">
<param name="activityType"value="work"/>
<param name="typicalDuration"value="08:00:00"/>
<param name="openingTime"value="07:00:00"/>
<param name="latestStartTime"value="09:00:00"/>
<param name="closingTime"value="19:00:00"/>
...
</parameterset>
...
</parameterset>
...
</module>
对于不同的subpopulations,可以有不同ScoringParameters 的参数集。