TransCAD软件具备友好的用户界面。然而复杂的模型,通常有很多参数,输入输出数据需要在用户界面设置。例如遇到不同的方案评价、或者模型输入变化要重新运算,如果都去设置对话框的各种参数和操作界面,显然是非常费时费力的。本文介绍如何记录这些设置,并实现一键自动运行模型。
很多初级入门的用户,可能忽略了软件的模型设置保存工具和模型批处理工具。模型设置保存工具主要是针对经常需要的单个模型步骤,用户可以保存相应的设置,以便下次运行直接应用设置。模型批处理工具则包括单个模型步骤或者多个模型步骤的宏录制(类型Excel的操作宏录制),当然也包括一些数据的运算操作的录制,如果结合TransCAD的模型流程图工具,功能将十分强大。有关模型流程图工具的信息,请查阅:TransCAD自动建立模型流程图和界面的方法。下面对这两个工具的应用举例说明:
1、模型设置保存工具
模型设置保存工具主要是针对经常需要的单个模型步骤,用户可以保存相应的设置,以便下次运行直接应用设置。譬如用户对自己的交通分配模型的参数进行设置后,希望把这些参数设置都保存下来,以便下次快捷使用。
Step1:打开TransCAD软件,在菜单“文件——打开工作区”,选择打开教程文件的交通分配工作区Traffic Assign.wrk(通常位于目录C:UsersAdministratorDocumentsCaliperTransCAD 9.0TutorialTraffic Assign.wrk,老的软件版本,可在安装程序文件夹的Tutorial下找到)。
Step2:在菜单“规划模型——静态交通分配——交通分配…”打开交通分配对话框。
Step3:在交通分配对话框中修改自己需要的模型参数,这里用户可以做任何参数和输入数据的修改,包括“选项”对话框的各种设置。为了举例,我们修改BPR延误函数的Beta参数值由4改为4.5,迭代次数由500改为300。
Step4:在交通分配对话框中单击“设置”按钮,弹出设置对话框。
Step5:在设置对话框单击按钮,输入设置的名称和描述,单击保存。设置对话框就会显示一条设置记录。当然针对不同的模型项目参数设置,用户可以保存不同的设置记录,可以按照名称、日期进行排序,以便快捷调用。
Step6:下次运算交通分配,若要调用这个参数设置,只要在交通分配对话框单击“设置”按钮,弹出设置对话框,单击一条设置记录,然后单击“加载”后,交通分配界面就自动应用了所有参数设置。单击交通分配对话框的“确认”按钮,交通分配程序就开始运行了。如果用户要在此设置基础上做别的修改,则是加载后到交通分配对话框进行修改后再保存即可。
2、TransCAD保存模型设置的信息
如果要查看设置信息,先选中一条设置记录,然后在设置对话框单击按钮,便可以弹出设置信息的GISDK宏代码对话框:
模型设置的GISDK宏代码对话框代码可以复制出来,也是比较容易阅读的,如果用户使用微软的Visual Studio Code代码编辑器,并安装GISDK插件,就可以看到如下代码形式:
Opts = null Opts.Input.Database= {"Endpoints", "Base Year Network"} // 输入的路网和街道图层名称 Opts.Input.Network = "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\Tutorial\Plan_Net.net"// 输入的交通网络文件 Opts.Input.[ODMatrix Currency] = {"C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\Tutorial\Plan_OD.mtx", "Total(7-9)", "Rows", "Cols"} //输入的OD矩阵文件、矩阵核和矩阵索引 Opts.Field.[VDF Fld Names] = {"[Freeflow Time]", "[AB_AMCapacity/ BA_AMCapacity]", "Alpha", "Beta", "None"} //延误函数对应的输入字段名称 Opts.Global.[Load Method] = "CUE" // 表示共轭FW算法 Opts.Global.[Loading Multiplier] = 1// 加载用于分配OD的倍数因子 Opts.Global.[N Conjugate] = 2 // 共轭梯度算法的共轭数 Opts.Global.Convergence = 0.0001 // 收敛的相对间隙值设置 Opts.Global.Iterations = 300 // 分配迭代数 Opts.Global.[Force Threads] = 12 // 多线程计算使用的CPU线程数目 Opts.Global.[VDF DLL] = "bpr.vdf" // 选择了BPR延误函数 Opts.Global.[VDF Defaults] = {, , 0.15, 4.5, 0}//BPR延误函数的默认参数,软件默认Beta为4,本次改为4.5。 Opts.Flag.[Do Emission] = 0 // 是否计算尾气排放,0表示否,下同 Opts.Flag.[Do Theme] = 0 // 是否生成流量大小专题和饱和度专题 Opts.Flag.[Do Skipping] = 0 // 是否忽略流量小的OD对 Opts.Flag.[Do Flow Saving] = 0 // 是否将分配流量保存到路段图层的字段 Opts.Flag.[Do Warm Start] = 0 // 是否热启动 Opts.Flag.[Do Turn Movement] = 0 // 是否报告交叉口转向流量 Opts.Local.[Do Critical] = 0 // 是否进行关键路段/选择路段流量分析 Opts.Local.[Do Tabulation] = 0 // 是否报告制表 Opts.Local.[Do Dynamic Skimming] = 0// 是否动态特征提取 Opts.Local.[Do Iteration Log] = 1 // 是否生成迭代日志 Opts.Local.[Do VMT/VHT Report] = 0 // 是否报告车英里,车小时
上面的GISDK代码对熟悉的编程的人来说非常容易阅读。不过即使用户没有学过GISDK编程,只要英语还可以,也能对里面的参数内容理解十之八九。为了使初级用户能够了解其含义,我们对其用“\”后面的文字进行了注释。因此,如果您需要修改什么参数,不一定要到对话框中修改,直接修改GISDK代码也可以。下面介绍如何录制GISDK代码并一键运行模型:
3、模型批处理工具
Step1:打开TransCAD软件,在菜单“文件——打开工作区”,选择打开教程文件的交通分配工作区Traffic Assign.wrk(同上)。
Step2:在菜单“规划模型——批处理编辑”打开批处理模式工具箱。
Step3:单击批处理工具箱的录制(圆点)按钮,准备录制操作的GISDK宏代码。下来菜单默认为No Run:表示录制过程不运行模型,Dry Run:表示录制过程会得到必要的输出表但不实际运行模型(形式上的输出,表的内容是空的,在多个步骤录制时可以作为下一步骤的输入),Full Run:表示录制过程完整运行模型。
Step4:在菜单“规划模型——静态交通分配——交通分配…”打开交通分配对话框。此时,对话框中的“确认”按钮变成“队列”按钮,按下后表示记录了相应的计算程序。
Step5:在交通分配对话框中修改自己需要的模型参数。修改BPR延误函数的Beta参数值由4改为4.5,迭代次数由500改为300;单击“选项”按钮进入选项对话框,勾选“创建专题”,单击确认返回交通分配对话框。
Step6:在交通分配对话框单击“队列”按钮,弹出输出文件设置对话框,选择要保存分配结果的文件夹,并单击“确认”。这里包含一个流量文件和迭代日志文件:
Step7:上述步骤单击确认后,您会发现软件好像什么也没做。但实际上,软件已经记录了交通分配的所有参数设置操作过程。单击批处理工具箱的停止录制(方框)按钮,会询问是否保存批处理内容,单击“是”,选择文件夹输入文件名“test”保存批处理文件。
单击“保存”按钮后,Windows自带的笔记本程序会自动打开录制的源代码,不过看起来不大容易阅读。
我们推荐用微软的Visual Studio Code + GISDK插件来编辑代码。可以在菜单“编辑——首选项…”弹出对话框中的“日志”选项卡,将原代表编辑器改为微软的Visual Studio Code,例如:"C:UsersAdministratorAppDataLocalProgramsMicrosoft VSCodeCode.exe"。
这样单击“保存”按钮后,自动用Visual Studio Code打开了录制的代码。
至此,交通分配的宏已经录制完毕,下面我们将运行交通分配程序:
Step8:使用菜单“文件——关闭工作区”关闭所有的文件。使用菜单“工具——GISDK应用程序编程——GISDK用户程序开发工具箱”打开GISDK工具箱:
Step9:选择第一个编译按钮,选择test.rsc文件进行编译。
Step10:选择第二个测试按钮,弹出测试对话框输入"BatchRun"。
Step11:单击“确认”按钮,软件开始运行交通分配。
Step12:运行结束后,在输出文件夹(例子为:C:UsersAdministratorDocumentsCaliperTransCAD9.0)生成了流量和迭代日志两个文件:
至此,利用批处理工具运行交通分配程序完毕!
您可能要问,什么图也没看到啊。查看分配结果的一个方法是:打开交通分配工作区,然后打开分配结果LinkFlows.bin表,通过ID链接后绘制流量大小和饱和度专题图。另外,也可以是手动分配的时候勾选“选项”对话框的“创建专题”,可以自动创建专题图。
下面我们来测试一下增加OD流量,分配后打开专题地图的效果:
(1)我们按默认参数做一次手动交通分配,然后做设当地图优化设置后(例如隐藏节点图层,形心连线集合),保存地图MyTest.map到同一个目录。
(2)在微软Visual Studio Code中把test.rsc文件做如下修改后保存:
[1]矩阵加载系数obj.DemandMultiplier = 1改为obj.DemandMultiplier= 1.2。
[2]在程序末尾ok = obj.Run()和return(ok)语句之间,添加打开地图和刷新地图两行代码:
ok= obj.Run()
OpenMap("C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\MyTest.map",)
RedrawMap()
return(ok)
(3)重复上述Step8-Step12的操作,运行完成后自动打开地图显示流量饱和度专题图。我们发现蓝色虚线方框的路段拥挤程度明显增加了。
可见,无论多少复杂的模型,只要上面录制一次宏,然后编译运行就一键完成了。如果修改一些代码,还可以进行打开地图,对比方案等各种操作。
有人会问,Step8-Step12虽然很简单,但也算不上“一键完成“吧?实际工作中,我们会把运行宏"BatchRun"(名字随便可以改)做到菜单中,或者做到流程图中,就真正做到一键运行模型了。
下面是录制的GISDK代码,这些代码都是自动生成的,无需用户编写程序,除了自己添加了2行打开地图和刷新地图的代码(可以查看GISDK帮助)。注意这是最新TransCAD 9.0版本录制的宏,采用了面向对象的GISDK程序。这和老版本的软件录制的程序有所不同,和本文第一部分设置对话框获取设置代码的有些关键词名称也有所变化(老版本完全一致),但不影响对参数意思的理解。
Macro "Batch Run"
RunMacro("Traffic Assignment")
endMacro
Macro "Traffic Assignment"
onerrordo
ShowMessage(GetLastError())
return()
end
obj = CreateObject("Network.Assignment")
obj.LayerDB = "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\Tutorial\Plan_net.DBD"
obj.Network = "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\Tutorial\Plan_Net.net"
obj.ResetClasses()
obj.Method = "CUE"
obj.Iterations = 300
obj.Convergence = 0.0001
obj.DemandMatrix({MatrixFile: "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\Tutorial\Plan_OD.mtx", Matrix: "Total(7-9)", RowIndex: "Rows", ColumnIndex: "Cols"})
obj.AddClass({Demand: "Total(7-9)"})
obj.DelayFunction = {Function: "bpr.vdf", Fields: {"[FreeflowTime]", "[AB_AMCapacity / BA_AMCapacity]", "Alpha", "Beta", "None"},
Defaults:{null, null, 0.15, 4.5, 0}}
obj.DemandMultiplier = 1.2
obj.FlowTable = "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\LinkFlows.bin"
obj.IterationLog = "C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\IterationLog.bin"
ok = obj.Run()
OpenMap("C:\Users\Administrator\Documents\Caliper\TransCAD 9.0\MyTest.map",)
RedrawMap()
return(ok)
endmacro
4、结语
用户可以通过录制TransCAD的各种模型参数、输入输出数据设置,以及多个步骤的联合录制,完成一系列模型流程的一键运算。这在大型复杂模型,或者经常有多方案需要重复运行的模型中十分重要。即使是交通影响评价,有可能也要多次反复测试结果,或者说用户做好模板下次更换输入数据和参数就一键运行得到结果。当然结果的统计汇总分析、可视化等也可以再写点程序自动处理。但软件的模型模块都是可以通过代码录制完成,而不是用户自己编写。
因此,如果用户能够有一定的GISDK编程基础和模型流程图使用经验,那将大大提高工作效率。关于流程图的介绍,可以查阅:TransCAD自动建立模型流程图和界面的方法。后续,我们也将对流程图的具体使用,包括如何嵌入录制的模型程序进行介绍。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !