日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

基于VISSIM和Python的二次开发基础—多时段配时控制

發(fā)布時(shí)間:2023/12/9 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于VISSIM和Python的二次开发基础—多时段配时控制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?文章目錄

前言

1. COM接口功能與定位

2. COM框架搭建

2.1 導(dǎo)入COM模塊

2.2 程序頭部格式

2.3 實(shí)現(xiàn)功能

總結(jié)


前言

VISSIM軟件是一種微觀的、基于時(shí)間間隔和駕駛行為的仿真建模工具,用以城市交通和公共交通運(yùn)行的交通建模,比如復(fù)現(xiàn)道路微觀交通組織運(yùn)行狀態(tài)、控制交通系統(tǒng)信號(hào)燈、管理停車(chē)、管理與運(yùn)營(yíng)公共交通等功能。

COM接口是VISSIM的附加功能,可以獲取VISSIM的對(duì)象、方法和特征屬性,并支持VB、Java、C#、C++、Python等軟件進(jìn)行二次開(kāi)發(fā)、實(shí)現(xiàn)自定義場(chǎng)景下的自定義功能。本文旨在介紹采用Python對(duì)VISSIM軟件進(jìn)行二次開(kāi)發(fā)時(shí)的一些基本教程。


1. COM接口功能與定位

VISSIM軟件雖然復(fù)現(xiàn)了某些場(chǎng)景下的交通運(yùn)行狀態(tài),但是難以直接調(diào)用自定義的控制模型。比如以下幾種功能,難以直接在VISSIM軟件中實(shí)現(xiàn),而采用COM接口對(duì)VISSIM文件進(jìn)行二次開(kāi)發(fā)可以實(shí)現(xiàn)此類自定義的控制功能。

  • 多時(shí)段信號(hào)控制:根據(jù)仿真運(yùn)行時(shí)間,調(diào)用不同時(shí)間段下的信號(hào)配時(shí)方案
  • 背景流量分析:通過(guò)頻繁修改道路上的機(jī)動(dòng)車(chē)流量,評(píng)估交通場(chǎng)景運(yùn)行效益的變化情況
  • 信號(hào)方案優(yōu)化:通過(guò)獲取路網(wǎng)中的交通信息,調(diào)控信號(hào)燈的燈態(tài),評(píng)估控制效益
  • 快速路匝道控制:通過(guò)感知主次路交通流運(yùn)行狀態(tài),調(diào)控進(jìn)出匝道的信號(hào)方案,評(píng)估控制效益
  • 單車(chē)運(yùn)行控制:通過(guò)獲取交通流運(yùn)行信息,優(yōu)化出單個(gè)車(chē)輛在滿足某種跟車(chē)模型、換道模型時(shí)的最佳軌跡與速度方案并反饋給該車(chē),評(píng)估控制效益
  • 公交運(yùn)營(yíng)分析:通過(guò)修改公交線路的發(fā)車(chē)間隔、??繒r(shí)長(zhǎng)等特征參數(shù),評(píng)估公交運(yùn)行效率
  • ……

2. COM框架搭建

以基于單點(diǎn)定時(shí)控制路口場(chǎng)景的多時(shí)段信號(hào)控制功能為例,在不同時(shí)間區(qū)間執(zhí)行不同的配時(shí)方案。本文采取早上06:00-10:00這一區(qū)間,在VISSIM路網(wǎng)的信號(hào)控制機(jī)中預(yù)設(shè)三種信號(hào)配時(shí)方案:在06:00-07:00執(zhí)行平峰方案1、在07:00-09:00執(zhí)行高峰方案1、在09:00-10:00執(zhí)行平峰方案2,具體方案如下表,其中黃燈、全紅分別是3s、2s,在VISSIM路網(wǎng)文件中分別按照時(shí)間順序?qū)⑵椒宸桨? 、高峰方案1 和平峰方案2分別記錄為1、2和3。

方案

相位1(主路直行)

相位2(主路左轉(zhuǎn))

相位3(次路放行)

周期

平峰方案1

20

15

15

65

高峰方案1

35

30

30

110

平峰方案2

25

20

20

80

2.1 導(dǎo)入COM模塊

在python環(huán)境下安裝COM接口相關(guān)的安裝包,本文以集成開(kāi)發(fā)環(huán)境Pycharm為例。首先在當(dāng)前項(xiàng)目場(chǎng)景中安裝pywin32包并導(dǎo)入。

import win32com.client as com

2.2 程序頭部格式

基于VISSIM和Python二次開(kāi)發(fā)的信號(hào)控制程序,其頭部格式主要包含四個(gè)部分:路網(wǎng)、信號(hào)控制機(jī)、仿真相關(guān)參數(shù)、評(píng)價(jià)相關(guān)參數(shù)。下面依次進(jìn)行介紹。

1)讀取路網(wǎng)接口

首先,通過(guò)COM接口引入VISSIM軟件;其次,分別加載inpx和layx兩個(gè)路網(wǎng)文件,然后記錄路網(wǎng)接口。

Vissim_com = com.Dispatch('Vissim.Vissim-32.700') Vissim_road_path = '仿真文件' Vissim_com.LoadNet(vissim_road_path + '\\主支.inpx') Vissim_com.LoadNet(vissim_road_path + '\\主支.layx') S_net = Vissim_com.net

2)讀取信號(hào)控制機(jī)接口

根據(jù)inpx文件中控制路口處的信號(hào)控制機(jī)編號(hào),讀取并記錄該路口信號(hào)控制機(jī)接口。當(dāng)存在多個(gè)路口時(shí),建議使用列表等數(shù)據(jù)形式記錄。

SC_number = 1 # 單個(gè)路口 SC = S_net.SignalControllers.ItemByKey(SC_number) # SC_number = {'路口1': 1, '路口2': 2} # 多個(gè)路口 # SC = [S_net.SignalControllers.ItemByKey(SC_number[sc_i]) for sc_i in SC_number.keys()]

3)標(biāo)定仿真相關(guān)參數(shù)

設(shè)置仿真開(kāi)始與結(jié)束時(shí)間、隨機(jī)種子、仿真精度、仿真速度、快速仿真模式等參數(shù)。

Sim = Vissim_com.Simulation Sim.SetAttValue('SimPeriod', 1000) # 仿真時(shí)長(zhǎng) Sim.SetAttValue("RandSeed", 42) # 隨機(jī)種子 Sim.SetAttValue("SimRes", 1) # 設(shè)置仿真精度 Sim.SetAttValue("SimSpeed", 5) # 設(shè)置仿真速度 Vissim_com.Graphics.CurrentNetworkWindow.SetAttValue('QuickMode', True) # 開(kāi)啟快速模式

4)開(kāi)啟評(píng)價(jià)按鈕接口

在程序控制過(guò)程中如果需要使用實(shí)時(shí)交通評(píng)價(jià)數(shù)據(jù),則需要開(kāi)啟評(píng)價(jià)接口;如果只采用事后評(píng)價(jià)衡量控制效果,則可以忽略此接口,直接在仿真運(yùn)行結(jié)束后輸出數(shù)據(jù)評(píng)價(jià)結(jié)果即可。

Eval = vissim_com.Evaluation Eval.SetAttValue('DATACOLLECTION', True) # 打開(kāi)離線評(píng)價(jià)按鈕 DC_eval = Eval.DataCollectionEvaluation # 打開(kāi)具體的數(shù)據(jù)采集接口

2.3 實(shí)現(xiàn)功能

仿真路網(wǎng)的運(yùn)行可分為連續(xù)仿真和單步仿真兩種,可使用單步仿真控制方式在不同時(shí)段實(shí)施調(diào)用不同的信號(hào)控制方案,并在到達(dá)仿真時(shí)長(zhǎng)時(shí)停止仿真。

SC.SetAttValue("ProgNo", 1) # 選取編號(hào)為1的信號(hào)方案 for i_step in range(Sim_sta, Sim_end):Sim.RunSingleStep() Sim.Stop()

最終,完整的控制程序如下:

import win32com.client as comdef Simulator(path, sc_number, sim_end, sim_res):# 加載本地的vissim,請(qǐng)注意版本Vissim_com = com.Dispatch('Vissim.Vissim-32.700')# 讀取路網(wǎng)接口Vissim_com.LoadNet(path[0])Vissim_com.LoadNet(path[1])S_net = Vissim_com.net# 讀取信號(hào)控制機(jī)接口SC = S_net.SignalControllers.ItemByKey(sc_number)# 標(biāo)定仿真相關(guān)參數(shù)Sim = Vissim_com.SimulationSim.SetAttValue('SimPeriod', sim_end)Sim.SetAttValue('RandSeed', 42)Sim.SetAttValue('SimRes', sim_res)Sim.SetAttValue('SimSpeed', 5)Vissim_com.Graphics.CurrentNetworkWindow.SetAttValue('QuickMode', True)# 開(kāi)啟評(píng)價(jià)按鈕接口Eval = Vissim_com.EvaluationEval.SetAttValue('DATACOLLECTION', True)return Vissim_com, S_net, SC, SimPath = ['主支.inpx', '主支.layx'] SC_number = 1 Sim_sta, Sim_res = 1, 1 Scheme_time = [[Sim_sta, Sim_sta + 1 * 3600], # 平峰方案1的開(kāi)啟與關(guān)閉時(shí)間[Sim_sta + 1 * 3600, Sim_sta + 3 * 3600], # 高峰方案1[Sim_sta + 3 * 3600, Sim_sta + 4 * 3600]] # 平峰方案2 Sim_end = Scheme_time[-1][-1] Vissim_com, S_net, SC, Sim = Simulator(Path, SC_number,Sim_end, Sim_res)for i_step in range(Sim_sta * Sim_re, Sim_end * Sim_res + 1):if i_step == Sim_end * Sim_res:breakif i_step == Scheme_time[0][0] * Sim_res:SC.SetAttValue("ProgNo", 1)elif i_step == Scheme_time[1][0] * Sim_res:SC.SetAttValue("ProgNo", 2)elif i_step == Scheme_time[2][0] * Sim_res:SC.SetAttValue("ProgNo", 3)Sim.RunSingleStep()Sim.Stop()

總結(jié)

本文主要介紹VISSIM和Python軟件的二次開(kāi)發(fā)環(huán)境搭建、以及COM接口的調(diào)用,并以多時(shí)段信號(hào)控制功能為例編輯了具體的Python程序。

總結(jié)

以上是生活随笔為你收集整理的基于VISSIM和Python的二次开发基础—多时段配时控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。