在微观交通流仿真软件中,Python 脚本可以用于实现高级的仿真控制和数据处理功能。通过 Python 脚本,用户可以动态地调整仿真参数、生成仿真数据、分析仿真结果等。
使用 Python 脚本可以动态调整仿真中的各种参数,例如车流密度、信号灯配时、车辆速度等。这在进行复杂的交通流分析时非常有用,可以在仿真过程中根据实际情况进行调整,从而获得更准确的结果。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 获取仿真配置
simulation_config = vissim.Simulation
# 动态调整仿真参数
# 例如,调整车流密度
vissim.Network.VehicleInput(1).SetAttValue('VehsPerHour', 1200)
# 例如,调整信号灯配时
vissim.Network.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('GreenTime', 30)
# 例如,调整车辆速度
vissim.Network.VehicleTypes.ItemByKey(1).SetAttValue('MaxSpeed', 60)
# 开始仿真
vissim.Simulation.RunContinuous()
Python 脚本可以用于生成仿真所需的输入数据,例如车辆输入、路径选择、交通信号等。这在进行大规模仿真时非常有用,可以自动生成复杂的输入数据,节省时间和提高准确性。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 生成车辆输入数据
for i in range(1, 5):
vissim.Network.VehicleInput.ItemByKey(i).SetAttValue('VehsPerHour', 1000 + i * 100)
# 生成信号灯配时数据
for i in range(1, 3):
vissim.Network.SignalControllers.ItemByKey(i).SGs.ItemByKey(1).SetAttValue('GreenTime', 30 + i * 10)
# 开始仿真
vissim.Simulation.RunContinuous()
Python 脚本还可以用于分析仿真结果,例如计算车辆延误、路径选择概率、交通流量等。通过 Python 的数据分析库(如 Pandas、NumPy),用户可以更方便地处理和分析仿真数据。
# 导入必要的库
import win32com.client
import pandas as pd
import numpy as np
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous()
# 获取仿真结果
# 例如,获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 计算平均延误
average_delay = df['Delay'].mean()
print(f'平均延误: {average_delay} 秒')
# 计算最大延误
max_delay = df['Delay'].max()
print(f'最大延误: {max_delay} 秒')
# 计算最小延误
min_delay = df['Delay'].min()
print(f'最小延误: {min_delay} 秒')
# 计算延误的标准差
std_delay = df['Delay'].std()
print(f'延误标准差: {std_delay} 秒')
除了 Python,VBA 也是常用的脚本语言之一,可以用于实现高级的仿真控制和数据处理功能。VBA 脚本可以直接在 VISSIM 中编写和运行,具有较好的集成性和实时性。
使用 VBA 脚本可以动态调整仿真中的各种参数,例如车流密度、信号灯配时、车辆速度等。
' 连接 VISSIM
Dim vissim As Object
Set vissim = CreateObject("Vissim.Vissim")
' 打开 VISSIM 仿真文件
vissim.LoadNet "path_to_your_net.inpx"
' 动态调整仿真参数
' 例如,调整车流密度
vissim.Network.VehicleInput.ItemByKey(1).SetAttValue "VehsPerHour", 1200
' 例如,调整信号灯配时
vissim.Network.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue "GreenTime", 30
' 例如,调整车辆速度
vissim.Network.VehicleTypes.ItemByKey(1).SetAttValue "MaxSpeed", 60
' 开始仿真
vissim.Simulation.RunContinuous
VBA 脚本可以用于生成仿真所需的输入数据,例如车辆输入、路径选择、交通信号等。
' 连接 VISSIM
Dim vissim As Object
Set vissim = CreateObject("Vissim.Vissim")
' 打开 VISSIM 仿真文件
vissim.LoadNet "path_to_your_net.inpx"
' 生成车辆输入数据
Dim i As Integer
For i = 1 To 4
vissim.Network.VehicleInput.ItemByKey(i).SetAttValue "VehsPerHour", 1000 + i * 100
Next i
' 生成信号灯配时数据
For i = 1 To 2
vissim.Network.SignalControllers.ItemByKey(i).SGs.ItemByKey(1).SetAttValue "GreenTime", 30 + i * 10
Next i
' 开始仿真
vissim.Simulation.RunContinuous
VBA 脚本还可以用于分析仿真结果,例如计算车辆延误、路径选择概率、交通流量等。
' 连接 VISSIM
Dim vissim As Object
Set vissim = CreateObject("Vissim.Vissim")
' 打开 VISSIM 仿真文件
vissim.LoadNet "path_to_your_net.inpx"
' 运行仿真
vissim.Simulation.RunContinuous
' 获取仿真结果
' 例如,获取车辆延误数据
Dim vehicle_delays As Variant
ReDim vehicle_delays(1 To 100, 1 To 2)
Dim i As Integer
For i = 1 To 100
Dim vehicle As Object
Set vehicle = vissim.Network.Vehicles.ItemByKey(i)
Dim delay As Double
delay = vehicle.GetAttValue("DelayTotal")
vehicle_delays(i, 1) = i
vehicle_delays(i, 2) = delay
Next i
' 计算平均延误
Dim total_delay As Double
total_delay = 0
For i = 1 To 100
total_delay = total_delay + vehicle_delays(i, 2)
Next i
Dim average_delay As Double
average_delay = total_delay / 100
Debug.Print "平均延误: " & average_delay & " 秒"
' 计算最大延误
Dim max_delay As Double
max_delay = vehicle_delays(1, 2)
For i = 2 To 100
If vehicle_delays(i, 2) > max_delay Then
max_delay = vehicle_delays(i, 2)
End If
Next i
Debug.Print "最大延误: " & max_delay & " 秒"
' 计算最小延误
Dim min_delay As Double
min_delay = vehicle_delays(1, 2)
For i = 2 To 100
If vehicle_delays(i, 2) < min_delay Then
min_delay = vehicle_delays(i, 2)
End If
Next i
Debug.Print "最小延误: " & min_delay & " 秒"
' 计算延误的标准差
Dim mean_delay As Double
mean_delay = average_delay
Dim variance As Double
variance = 0
For i = 1 To 100
variance = variance + (vehicle_delays(i, 2) - mean_delay) ^ 2
Next i
Dim std_deviation As Double
std_deviation = Sqr(variance / 100)
Debug.Print "延误标准差: " & std_deviation & " 秒"
在微观交通流仿真软件中,用户可以通过自定义车辆类型来模拟不同类型的车辆,例如不同长度、不同速度、不同加减速特性的车辆。这在进行特定交通场景的仿真时非常有用。
自定义车辆类型的基本属性包括车辆长度、最大速度、加速度、减速度等。这些属性可以根据实际需求进行设置,以更准确地模拟特定类型的车辆。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建自定义车辆类型
vissim.VehicleTypes.AddVehicleType 1
vissim.VehicleTypes.ItemByKey(1).SetAttValue('Length', 5.0) # 车辆长度
vissim.VehicleTypes.ItemByKey(1).SetAttValue('MaxSpeed', 120) # 最大速度
vissim.VehicleTypes.ItemByKey(1).SetAttValue('Accel', 2.0) # 加速度
vissim.VehicleTypes.ItemByKey(1).SetAttValue('Decel', 4.0) # 减速度
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
自定义车辆类型的高级属性包括车辆的舒适性、驾驶行为、优先级等。这些属性可以进一步细化车辆的行为,使仿真结果更加真实。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建自定义车辆类型
vissim.VehicleTypes.AddVehicleType 1
vissim.VehicleTypes.ItemByKey(1).SetAttValue('ComfortFactor', 0.8) # 舒适性因子
vissim.VehicleTypes.ItemByKey(1).SetAttValue('DriverBeh', 'Aggressive') # 驾驶行为
vissim.VehicleTypes.ItemByKey(1).SetAttValue('Priority', 2) # 优先级
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
在微观交通流仿真软件中,用户可以通过自定义交通信号来模拟不同的交通控制策略,例如自适应信号控制、固定配时信号控制等。这在研究交通信号优化和控制策略时非常有用。
自定义固定配时信号可以通过设置信号灯的绿灯时间、黄灯时间和红灯时间来实现。这些时间可以根据实际需求进行设置,以模拟特定的交通控制策略。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建自定义信号控制器
vissim.SignalControllers.AddSignalController 1
vissim.SignalControllers.ItemByKey(1).SetAttValue('Pos:Longitudinal', 100)
vissim.SignalControllers.ItemByKey(1).SetAttValue('Pos:Lateral', 0)
# 创建信号灯组
vissim.SignalControllers.ItemByKey(1).SGs.AddSignalGroup 1
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('GreenTime', 30) # 绿灯时间
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('YellowTime', 3) # 黄灯时间
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('RedTime', 30) # 红灯时间
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
自定义自适应信号可以通过编写脚本来动态调整信号灯的配时,以适应交通流量的变化。这在实际交通控制中非常有用,可以提高交通效率和安全性。
# 导入 VISSIM API 和必要的库
import win32com.client
import numpy as np
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建自定义信号控制器
vissim.SignalControllers.AddSignalController 1
vissim.SignalControllers.ItemByKey(1).SetAttValue('Pos:Longitudinal', 100)
vissim.SignalControllers.ItemByKey(1).SetAttValue('Pos:Lateral', 0)
# 创建信号灯组
vissim.SignalControllers.ItemByKey(1).SGs.AddSignalGroup 1
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('GreenTime', 30) # 初始绿灯时间
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('YellowTime', 3) # 黄灯时间
vissim.SignalControllers.ItemByKey(1).SGs.ItemByKey(1).SetAttValue('RedTime', 30) # 红灯时间
# 定义自适应信号控制函数
def adaptive_signal_control(signal_group, traffic_flow):
if traffic_flow < 500:
green_time = 30
elif traffic_flow < 1000:
green_time = 40
else:
green_time = 50
signal_group.SetAttValue('GreenTime', green_time)
# 运行仿真
vissim.Simulation.RunContinuous
# 获取交通流量数据
traffic_flow = vissim.Network.VehicleInput(1).GetAttValue('VehsPerHour')
# 调用自适应信号控制函数
adaptive_signal_control(vissim.Network.SignalControllers.ItemByKey(1).SGs.ItemByKey(1), traffic_flow)
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
在微观交通流仿真软件中,用户可以通过自定义路径选择模型来模拟驾驶员在交通网络中的路径选择行为。这在研究交通分配和路径选择策略时非常有用。
基于概率的路径选择模型可以根据各种因素(如交通流量、道路长度、交通信号等)来计算驾驶员选择某条路径的概率。这种模型可以更好地反映驾驶员在复杂交通网络中的选择行为。
# 导入 VISSIM API 和必要的库
import win32com.client
import numpy as np
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 定义路径选择函数
def choose_path(vissim, vehicle, paths):
probabilities = []
for path in paths:
# 计算路径的概率
probability = 1.0 / (1 + np.exp(-0.1 * (path['length'] + path['traffic_flow'])))
probabilities.append(probability)
# 归一化概率
probabilities = np.array(probabilities) / np.sum(probabilities)
# 选择路径
chosen_path = np.random.choice([path['id'] for path in paths], p=probabilities)
vehicle.SetAttValue('DesiredRoute', chosen_path)
# 获取所有路径
paths = [
{'id': 1, 'length': 1000, 'traffic_flow': 500},
{'id': 2, 'length': 1200, 'traffic_flow': 600},
{'id': 3, 'length': 800, 'traffic_flow': 400}
]
# 获取所有车辆
vehicles = vissim.Network.Vehicles.GetMultiAttributes(['No', 'DesiredRoute'])
# 对每个车辆进行路径选择
for vehicle in vehicles:
choose_path(vissim, vissim.Network.Vehicles.ItemByKey(vehicle[0]), paths)
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
基于最短路径的路径选择模型可以根据道路网络的拓扑结构和交通流量来选择最短的路径。这种模型适用于需要最优化路径选择的场景,例如导航系统或交通规划。
# 导入 VISSIM API 和必要的库
import win32com.client
import networkx as nx
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建道路网络图
G = nx.Graph()
# 添加节点和边
# 假设节点编号为 1, 2, 3, 4
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
# 添加边及其权重
G.add_edge(1, 2, weight=1000)
G.add_edge(1, 3, weight=1200)
G.add_edge(2, 4, weight=500)
G.add_edge(3, 4, weight=400)
# 定义路径选择函数
def choose_shortest_path(vissim, vehicle, source, target):
# 计算最短路径
shortest_path = nx.shortest_path(G, source=source, target=target, weight='weight')
# 设置车辆的路径
vehicle.SetAttValue('DesiredRoute', shortest_path)
# 获取所有车辆
vehicles = vissim.Network.Vehicles.GetMultiAttributes(['No', 'DesiredRoute'])
# 对每个车辆进行最短路径选择
for vehicle in vehicles:
# 假设所有车辆的起始节点为 1,目标节点为 4
choose_shortest_path(vissim, vissim.Network.Vehicles.ItemByKey(vehicle[0]), 1, 4)
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
在微观交通流仿真软件中,用户可以通过自定义交通事件来模拟各种突发事件,例如交通事故、道路施工等。这些事件可以用来研究突发事件对交通流的影响。
自定义交通事故事件可以通过设置事故发生的地点、持续时间等参数来模拟事故对交通流的影响。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建交通事故事件
vissim.Events.AddAccident 1
vissim.Events.ItemByKey(1).SetAttValue('Pos:Longitudinal', 1000) # 事故发生的纵向位置
vissim.Events.ItemByKey(1).SetAttValue('Pos:Lateral', 0) # 事故发生的横向位置
vissim.Events.ItemByKey(1).SetAttValue('Duration', 600) # 事故持续时间(秒)
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
自定义道路施工事件可以通过设置施工地点、施工时间等参数来模拟施工对交通流的影响。施工事件可以用于研究施工期间的交通流量变化和延误情况。
# 导入 VISSIM API
import win32com.client
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 创建道路施工事件
vissim.Events.AddMaintenance 1
vissim.Events.ItemByKey(1).SetAttValue('Pos:Longitudinal', 1500) # 施工开始的纵向位置
vissim.Events.ItemByKey(1).SetAttValue('Length', 500) # 施工区域的长度
vissim.Events.ItemByKey(1).SetAttValue('StartTime', 3600) # 施工开始时间(秒)
vissim.Events.ItemByKey(1).SetAttValue('Duration', 7200) # 施工持续时间(秒)
# 保存仿真文件
vissim.SaveNet('path_to_your_net.inpx')
数据可视化是将仿真结果以图形的形式展示出来,以便于更好地理解仿真数据。常用的可视化工具包括 Matplotlib、Seaborn 和 Plotly 等。
Matplotlib 是一个强大的绘图库,可以用于生成各种静态和动态的图表。
# 导入必要的库
import win32com.client
import matplotlib.pyplot as plt
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append(delay)
# 绘制车辆延误分布图
plt.hist(vehicle_delays, bins=10, alpha=0.7, color='blue')
plt.title('车辆延误分布')
plt.xlabel('延误时间(秒)')
plt.ylabel('车辆数量')
plt.show()
Plotly 是一个交互式绘图库,可以生成动态的图表,便于进行交互分析。
# 导入必要的库
import win32com.client
import plotly.express as px
import pandas as pd
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 绘制车辆延误分布图
fig = px.histogram(df, x='Delay', nbins=10, title='车辆延误分布')
fig.update_xaxes(title_text='延误时间(秒)')
fig.update_yaxes(title_text='车辆数量')
fig.show()
报告生成是将仿真结果以报告的形式展示出来,以便于分享和存档。常用的报告生成工具包括 Pandas、Jinja2 和 ReportLab 等。
Pandas 用于数据处理,Jinja2 用于生成 HTML 报告。
# 导入必要的库
import win32com.client
import pandas as pd
import jinja2
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 计算统计量
average_delay = df['Delay'].mean()
max_delay = df['Delay'].max()
min_delay = df['Delay'].min()
std_delay = df['Delay'].std()
# 定义报告模板
template = jinja2.Template("""
仿真结果报告
仿真结果报告
车辆延误统计
- 平均延误: {{ average_delay }} 秒
- 最大延误: {{ max_delay }} 秒
- 最小延误: {{ min_delay }} 秒
- 延误标准差: {{ std_delay }} 秒
车辆延误数据
车辆ID
延误时间(秒)
{% for row in data %}
{{ row.VehicleID }}
{{ row.Delay }}
{% endfor %}
""")
# 渲染报告
report = template.render(average_delay=average_delay, max_delay=max_delay, min_delay=min_delay, std_delay=std_delay, data=df.to_dict(orient='records'))
# 将报告保存为 HTML 文件
with open('simulation_report.html', 'w', encoding='utf-8') as f:
f.write(report)
ReportLab 是一个强大的 PDF 生成库,可以用于生成高质量的 PDF 报告。
# 导入必要的库
import win32com.client
import pandas as pd
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib import colors
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 计算统计量
average_delay = df['Delay'].mean()
max_delay = df['Delay'].max()
min_delay = df['Delay'].min()
std_delay = df['Delay'].std()
# 定义 PDF 报告的内容
data = [['车辆ID', '延误时间(秒)']] + df.values.tolist()
# 创建 PDF 报告
doc = SimpleDocTemplate("simulation_report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
content = []
# 添加标题
content.append(Paragraph("仿真结果报告", styles['Title']))
# 添加车辆延误统计
content.append(Paragraph("车辆延误统计", styles['Heading2']))
content.append(Paragraph(f"平均延误: {average_delay} 秒", styles['Normal']))
content.append(Paragraph(f"最大延误: {max_delay} 秒", styles['Normal']))
content.append(Paragraph(f"最小延误: {min_delay} 秒", styles['Normal']))
content.append(Paragraph(f"延误标准差: {std_delay} 秒", styles['Normal']))
# 添加车辆延误数据表
content.append(Paragraph("车辆延误数据", styles['Heading2']))
table = Table(data)
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('FONTSIZE', (0, 0), (-1, 0), 14),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black)
]))
content.append(table)
# 生成 PDF 报告
doc.build(content)
数据导出和格式转换是将仿真结果保存为其他格式(如 CSV、Excel、JSON)以便于进一步分析和处理。
将仿真结果导出为 CSV 文件,便于使用 Excel 或其他数据分析工具进行处理。
# 导入必要的库
import win32com.client
import pandas as pd
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 导出为 CSV 文件
df.to_csv('vehicle_delays.csv', index=False, encoding='utf-8')
将仿真结果导出为 Excel 文件,便于使用 Excel 进行数据分析和图表生成。
# 导入必要的库
import win32com.client
import pandas as pd
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 导出为 Excel 文件
df.to_excel('vehicle_delays.xlsx', index=False, encoding='utf-8')
将仿真结果导出为 JSON 文件,便于进行数据交换和处理。
# 导入必要的库
import win32com.client
import pandas as pd
import json
# 连接 VISSIM
vissim = win32com.client.Dispatch('Vissim.Vissim')
# 打开 VISSIM 仿真文件
vissim.LoadNet('path_to_your_net.inpx')
# 运行仿真
vissim.Simulation.RunContinuous
# 获取车辆延误数据
vehicle_delays = []
for i in range(1, 101):
vehicle = vissim.Network.Vehicles.ItemByKey(i)
delay = vehicle.GetAttValue('DelayTotal')
vehicle_delays.append({'VehicleID': i, 'Delay': delay})
# 将数据转换为 DataFrame
df = pd.DataFrame(vehicle_delays)
# 导出为 JSON 文件
with open('vehicle_delays.json', 'w', encoding='utf-8') as f:
json.dump(df.to_dict(orient='records'), f, ensure_ascii=False, indent=4)
通过以上方法,用户可以将微观交通流仿真软件中的仿真结果以多种格式导出,并使用不同的工具进行可视化和报告生成,从而更好地理解和分析仿真数据。