ですので、ここは前回ご紹介した、エージェント1万6000人のサンプル「Berlin」を使って、iteration(繰り返し)→Scoring(スコアリング)→replanning(再計画)をやってみようと思います。
前回(第5回)で使った/berlinを/berlin2 として、ディレクトリごとコピーをして、そこで改造をしてみようと思います。
まずconfig.xmlを、以下のように改造します。
<?xml version="1.0" ?> <!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd"> <config> <module name="global"> <param name="randomSeed" value="4711" /> <param name="coordinateSystem" value="GK4" /> </module> <module name="network"> <param name="inputNetworkFile" value="network.xml.gz" /> </module> <module name="plans"> <param name="inputPlansFile" value="plans_hwh_1pct.xml.gz" /> <!-- 1% sample of commuters、 15931 agents --> </module> <module name="controler"> <param name="outputDirectory" value="./output/berlin2" /> <param name="firstIteration" value="0" /> <param name="lastIteration" value="10" /> <param name="createGraphs" value="false" /> </module> <module name="controler"> <param name= "routingAlgorithmType" value="AStarLandmarks" /> </module> <module name="planCalcScore"> <param name="learningRate" value="1.0" /> <param name="BrainExpBeta" value="2.0" /> <parameterset type="scoringParameters"> <param name="lateArrival" value="-18" /> <param name="earlyDeparture" value="-0" /> <param name="performing" value="+6" /> <param name="waiting" value="-0" /> <parameterset type="modeParams"> <param name="mode" value="car"/> <param name="marginalUtilityOfTraveling_util_hr" value="-6.0" /> </parameterset> <parameterset type="modeParams"> <param name="mode" value="pt"/> <param name="marginalUtilityOfTraveling_util_hr" value="-3.0" /> </parameterset> <parameterset type="modeParams"> <param name="mode" value="walk"/> <param name="marginalUtilityOfTraveling_util_hr" value="-1.0" /> </parameterset> <parameterset type="modeParams"> <param name="mode" value="ride"/> <param name="marginalUtilityOfTraveling_util_hr" value="-5.0" /> </parameterset> <parameterset type="activityParams"> <param name="activityType" value="home" /> <param name="priority" value="1" /> <param name="typicalDuration" value="12:00:00" /> <param name="minimalDuration" value="08:00:00" /> </parameterset> <parameterset type="activityParams"> <param name="activityType" value="work" /> <param name="priority" value="1" /> <param name="typicalDuration" value="08:00:00" /> <param name="minimalDuration" value="06:00:00" /> <param name="openingTime" value="07:00:00" /> <param name="latestStartTime" value="09:00:00" /> <param name="earliestEndTime" value="" /> <param name="closingTime" value="18:00:00" /> </parameterset> <parameterset type="activityParams"> <param name="activityType" value="edu" /> <param name="priority" value="1" /> <param name="typicalDuration" value="08:00:00" /> </parameterset> </parameterset> </module> <module name="strategy"> <param name="maxAgentPlanMemorySize" value="5" /> <!-- 0 means unlimited --> <parameterset type="strategysettings"> <param name="strategyName" value="BestScore"/> <param name="weight" value="0.8"/> </parameterset> <parameterset type="strategysettings"> <param name="strategyName" value="ReRoute"/> <param name="weight" value="0.1"/> </parameterset> <parameterset type="strategysettings"> <param name="strategyName" value="TimeAllocationMutator"/> <param name="weight" value="0.1"/> </parameterset> </module> </config>
まずは、
<module name="planCalcScore"> (中略) </module>
の部分を説明します。ここは「エージェントが、何を快適/不快と感じるか」を定義しているところになります。
つまり、
などを数値化している、“エージェントの(共通)価値観定義ファイル”です。
(1) learningRate
<param name="learningRate" value="1.0" />
これは「新しいscoreを、どれくらい強く反映するか」です。
大きいほど、
になります。
逆に小さいと、
しやすい。
(2) BrainExpBeta
<param name="BrainExpBeta" value="2.0" />
これは「scoreの高いplanを、どれくらい優先するか」を決めています。
大きいほど、
小さいほど、
になります。
つまり、「冒険好きか、保守的か」を決めるパラメータです。
(3)lateArrival
<param name="lateArrival" value="-18" />
これは「遅刻ペナルティ」で、かなり大きい負値です。
つまり、
という意味。
(4)performing
<param name="performing" value="+6" />
これは「活動できていることによる満足度」です。
つまり、
などを実施できると加点される。
重要なのは、MATSimは「移動そのもの」ではなく、「活動を成立させること」を目的にしている点です。
(5)modeParams
ここが交通コスト。
例えば、
mode="car" marginalUtilityOfTraveling = -6
は、「車移動は1時間あたり -6 util の苦痛」という意味。
PT(public transport)
pt = -3
は、「公共交通の方がラク」という設定。
walk
walk = -1
は、「歩行はさらに苦痛が小さい(歩行の不効用が比較的小さい)」という意味です。
つまりこの世界では、
という価値観になっています。
(6)activityParams
ここが「活動の価値」。
home
home: typicalDuration = 12h minimalDuration = 8h
は、
という意味。
work
openingTime = 07:00 latestStartTime = 09:00 closingTime = 18:00
つまり、
みたいな概念です。
つまりMATSimは、「店や職場が開いている/閉まっている」も考慮しています。
(7) この部分のまとめ
これは単なる設定ファイルではありません。MATSimにおける「人間観」そのものです。
つまり、
を定義している。
だからMATSimは、「道路を計算している」のではなく、「人間の価値観を数値化している」システムなのです。
Copyright © ITmedia, Inc. All Rights Reserved.
記事ランキング