版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Arena:Arena基础操作与界面介绍1Arena概述1.1Arena的历史与发展Arena,作为一款先进的离散事件仿真软件,自1990年代初由SystemModeling公司开发以来,已经历了多个版本的迭代与升级。随着技术的不断进步,Arena从最初的单一仿真平台发展成为集模型构建、数据分析、优化决策于一体的综合性工具。2000年,SystemModeling被DassaultSystems收购,Arena进一步整合了Dassault的资源,增强了其在制造业、物流、服务行业等领域的应用能力。2010年后,Arena开始支持云计算,使得用户可以在任何地方进行仿真分析,大大提高了其灵活性和可访问性。1.2Arena的主要功能与应用1.2.1主要功能模型构建:Arena提供了一个直观的图形用户界面,用户可以通过拖放组件来构建复杂的系统模型,无需编写大量代码。数据分析:Arena内置了强大的数据分析工具,可以对仿真结果进行统计分析,生成报告和图表,帮助用户理解系统行为。优化决策:通过Arena的优化模块,用户可以对模型进行参数调整,寻找最优的系统配置,以提高效率和降低成本。1.2.2应用领域制造业:Arena被广泛应用于生产线的仿真,帮助优化生产流程,减少浪费,提高生产效率。物流:在物流领域,Arena可以模拟仓库操作、运输网络,优化物流布局和运输策略。服务行业:Arena同样适用于服务行业的仿真,如银行、医院、餐厅等,帮助改善顾客服务体验,优化资源分配。1.2.3示例:构建一个简单的生产模型#导入Arena的Python接口库
importarena
#创建一个Arena模型
model=arena.ArenaModel()
#定义一个源,每5分钟产生一个实体
source=model.add_source('Source',interarrival_time=5)
#定义一个处理器,处理时间服从正态分布,平均值为10分钟,标准差为2分钟
processor=model.add_processor('Processor',processing_time=arena.Normal(10,2))
#定义一个接收器,用于收集处理完成的实体
sink=model.add_sink('Sink')
#设置源到处理器,再到接收器的流
source.flow_to(processor)
processor.flow_to(sink)
#运行模型,仿真时间为24小时
model.run(24*60)
#输出仿真结果
results=model.get_results()
print(results)在这个例子中,我们使用Arena的Python接口创建了一个简单的生产模型。模型包含一个源(Source),一个处理器(Processor),和一个接收器(Sink)。源每5分钟产生一个实体,处理器处理实体的时间服从正态分布,平均处理时间为10分钟,标准差为2分钟。模型运行24小时后,我们收集并输出了仿真结果。通过这个模型,我们可以分析生产线的效率,例如,实体在处理器的等待时间,处理器的利用率,以及24小时内处理的实体总数等。这些信息对于优化生产流程,提高生产效率至关重要。2Arena界面与基础操作指南2.1界面介绍2.1.1主界面布局Arena是一款强大的离散事件仿真软件,其主界面设计直观,便于用户进行模型构建与分析。主界面主要由以下几个部分组成:菜单栏:位于界面顶部,提供文件、编辑、视图、仿真、工具、帮助等选项,用于执行软件的主要功能。工具栏:紧邻菜单栏下方,包含常用的工具按钮,如新建、打开、保存、运行仿真等,便于快速访问。模型构建区:界面的中心区域,用户在此处放置和连接模型元素,构建仿真模型。属性面板:位于界面右侧,显示当前选中模型元素的属性,用户可以在此编辑元素的参数。消息窗口:位于界面底部,显示仿真过程中的信息和警告,帮助用户了解模型运行状态。2.1.2工具栏与快捷键Arena的工具栏提供了快速访问常用功能的途径,同时,软件支持一系列快捷键,提高操作效率:新建模型:点击工具栏上的“新建”按钮或使用快捷键Ctrl+N,可以创建一个新的模型文件。打开模型:使用Ctrl+O快捷键或工具栏上的“打开”按钮,可以加载已保存的模型。保存模型:Ctrl+S快捷键或工具栏上的“保存”按钮用于保存当前模型。运行仿真:点击工具栏上的“运行”按钮或使用F5快捷键,开始仿真过程。暂停仿真:在仿真运行中,使用F6快捷键或工具栏上的“暂停”按钮,可以暂停仿真。停止仿真:使用F7快捷键或工具栏上的“停止”按钮,可以立即终止仿真。2.1.3模拟视图与数据分析Arena允许用户在模拟视图中观察模型的运行情况,同时提供数据分析工具,帮助用户理解仿真结果:模拟视图:在模型构建区,用户可以切换到模拟视图模式,通过动画直观地看到模型的运行过程。这有助于理解模型的行为和发现潜在的问题。数据分析:Arena内置了多种数据分析工具,如图表、统计报告和敏感性分析。用户可以通过这些工具分析仿真结果,识别系统瓶颈,优化模型参数。例如,使用Report功能可以生成详细的仿真报告,包括系统性能指标和资源利用率等。2.2示例:构建与分析一个简单的排队系统模型假设我们要构建一个简单的银行排队系统模型,以分析平均等待时间。以下是如何在Arena中构建和分析此模型的步骤:2.2.1步骤1:创建模型打开Arena,使用Ctrl+N创建一个新的模型文件。从工具箱中拖拽Queue和Server元素到模型构建区,构建一个基本的排队系统。2.2.2步骤2:配置模型元素选择Queue元素,使用属性面板配置其参数,如最大队列长度、服务优先级等。对Server元素进行配置,设置服务时间分布、服务人员数量等。2.2.3步骤3:运行仿真使用F5快捷键运行仿真。在模拟视图中观察模型运行,确保模型行为符合预期。2.2.4步骤4:分析结果仿真结束后,使用Report功能生成仿真报告。分析报告中的平均等待时间、服务时间等关键指标,以评估系统性能。2.2.5步骤5:优化模型根据分析结果,调整模型参数,如增加服务人员数量,以减少等待时间。重新运行仿真,比较优化前后的系统性能。通过以上步骤,我们可以有效地使用Arena来构建、运行和分析离散事件仿真模型,从而为决策提供数据支持。3Arena基础操作与界面介绍3.1基础操作3.1.1创建新项目在开始使用Arena进行仿真建模之前,首先需要创建一个新的项目。这一步骤是所有仿真工作的起点,涉及到项目的基本设置,包括项目名称、模型类型等。步骤说明启动Arena软件:双击桌面上的Arena图标,启动软件。选择“新建”:在Arena的主界面中,选择“文件”菜单下的“新建”选项,或直接点击工具栏上的“新建”按钮。设置项目属性:在弹出的对话框中,输入项目名称,选择模型类型(例如,离散事件模型、连续系统模型等),并指定保存位置。确认创建:点击“确定”按钮,完成新项目的创建。注意事项项目名称应具有描述性,以便于后续识别。保存位置应选择容易访问的目录,避免文件丢失。3.1.2导入与导出模型Arena允许用户导入和导出模型,这对于模型的共享和备份非常有用。导入模型选择“导入”:在Arena的主界面中,选择“文件”菜单下的“导入”选项。选择模型文件:在文件浏览器中,选择要导入的Arena模型文件。确认导入:点击“打开”按钮,完成模型的导入。导出模型选择“导出”:在Arena的主界面中,选择“文件”菜单下的“导出”选项。指定导出位置:在弹出的对话框中,选择导出的文件格式(默认为Arena模型格式),并指定保存位置。确认导出:点击“保存”按钮,完成模型的导出。示例代码#由于Arena主要使用图形界面,以下示例为伪代码,用于说明模型的导入与导出过程。
classArenaModel:
def__init__(self,name):
=name
defimport_model(self,file_path):
"""导入模型"""
#读取文件
model_data=read_file(file_path)
#解析模型数据
self.parse_model_data(model_data)
print(f"模型'{}'已成功导入。")
defexport_model(self,file_path):
"""导出模型"""
#生成模型数据
model_data=self.generate_model_data()
#写入文件
write_file(file_path,model_data)
print(f"模型'{}'已成功导出。")
#创建模型实例
model=ArenaModel("生产系统模型")
#导入模型
model.import_model("C:/Models/production_system.aren")
#导出模型
model.export_model("C:/Backup/production_system_backup.aren")3.1.3运行模拟与结果分析运行模拟是Arena的核心功能之一,通过模拟可以观察和分析系统的运行情况。运行模拟设置模拟参数:在“运行”菜单中,选择“设置”,设置模拟的运行次数、随机数种子等参数。开始模拟:点击工具栏上的“运行”按钮,开始模拟。监控模拟进度:在模拟运行过程中,Arena会显示模拟进度和当前状态。结果分析查看结果:模拟完成后,选择“结果”菜单下的“查看”,可以查看模拟结果。分析结果:使用Arena内置的统计工具和图表,对结果进行分析,识别系统瓶颈和优化点。导出结果:选择“结果”菜单下的“导出”,可以将结果导出为Excel或CSV格式,便于进一步的数据分析。示例代码#以下示例为伪代码,用于说明如何在Arena中运行模拟和分析结果。
classSimulationRunner:
def__init__(self,model):
self.model=model
defset_simulation_parameters(self,num_runs,seed):
"""设置模拟参数"""
self.num_runs=num_runs
self.seed=seed
defrun_simulation(self):
"""运行模拟"""
#设置随机数种子
set_seed(self.seed)
#运行模拟
foriinrange(self.num_runs):
self.model.run()
print(f"模拟运行{i+1}/{self.num_runs}完成。")
defanalyze_results(self):
"""分析结果"""
#获取模拟结果
results=self.model.get_results()
#分析结果
bottleneck=find_bottleneck(results)
print(f"系统瓶颈为:{bottleneck}")
#创建模拟运行器实例
runner=SimulationRunner(model)
#设置模拟参数
runner.set_simulation_parameters(100,12345)
#运行模拟
runner.run_simulation()
#分析结果
runner.analyze_results()3.2结论通过上述步骤,用户可以熟练掌握在Arena中创建新项目、导入与导出模型以及运行模拟与结果分析的基本操作。这些技能是进行有效仿真建模和系统分析的基础。4Arena:实体与流程设计4.1实体类型定义在Arena仿真环境中,实体是模拟过程中的基本单位,可以是人、产品、车辆等任何需要在系统中移动或变化的对象。定义实体类型是构建仿真模型的第一步,它决定了实体的属性、行为和外观。4.1.1原理实体类型定义涉及到实体的属性设置,如实体的名称、颜色、初始状态等,以及实体的行为逻辑,如移动规则、处理时间等。通过定义不同的实体类型,可以模拟系统中不同种类的对象,从而更准确地反映真实世界的复杂性。4.1.2内容实体名称:每个实体类型需要一个唯一的名称,用于在模型中识别和引用。实体属性:包括颜色、形状、大小等外观属性,以及初始状态、处理时间等行为属性。实体行为:定义实体如何在系统中移动,如何与资源交互,以及如何响应事件。4.1.3示例在Arena中,定义一个名为“Customer”的实体类型,用于模拟顾客在餐厅中的行为。以下是一个简化版的实体类型定义示例://定义Customer实体类型
EntityCustomer{
//设置实体颜色为蓝色
color=blue;
//设置实体形状为圆形
shape=circle;
//设置实体大小为中等
size=medium;
//设置实体初始状态为“Waiting”
state="Waiting";
//定义实体处理时间,假设平均等待时间为10分钟
processTime=10;
}4.2流程路径创建流程路径是实体在系统中移动和处理的路径,它描述了实体从进入系统到离开系统的整个过程。4.2.1原理流程路径创建涉及到定义实体的移动顺序、处理节点以及在每个节点上的停留时间。通过创建不同的流程路径,可以模拟实体在系统中的不同经历,如顾客在餐厅中的点餐、等待、用餐和离开过程。4.2.2内容起点和终点:定义实体进入和离开系统的节点。路径节点:实体在系统中移动和处理的各个节点。路径顺序:实体经过各个节点的顺序。停留时间:实体在每个节点上的处理或等待时间。4.2.3示例继续使用餐厅顾客的示例,创建一个流程路径,描述顾客从进入餐厅到离开的整个过程://创建Customer流程路径
PathCustomerPath{
//定义起点为“Entrance”
start="Entrance";
//定义终点为“Exit”
end="Exit";
//定义路径节点
nodes=["Entrance","Queue","Order","Wait","Eat","Exit"];
//定义在每个节点上的停留时间
times=[0,5,3,15,20,0];
}4.3资源分配与管理资源是系统中用于处理实体的有限能力,如餐厅中的服务员、餐桌等。资源分配与管理是确保系统高效运行的关键。4.3.1原理资源分配与管理涉及到资源的定义、资源的使用规则以及资源的优化策略。通过合理分配资源,可以减少实体的等待时间,提高系统的吞吐量和效率。4.3.2内容资源定义:包括资源的名称、类型、数量等。资源使用规则:定义资源如何被实体使用,如排队规则、优先级等。资源优化:通过分析仿真结果,调整资源的配置和使用策略,以提高系统性能。4.3.3示例在餐厅模型中,定义一个名为“Waiter”的资源,用于处理顾客的点餐和送餐过程://定义Waiter资源
ResourceWaiter{
//设置资源名称
name="Waiter";
//设置资源类型为“Server”
type=server;
//设置资源数量为3
quantity=3;
//定义资源使用规则,如先到先服务
rule="FIFO";
}通过以上三个模块的详细讲解,我们了解了在Arena仿真环境中,如何定义实体类型、创建流程路径以及管理资源。这些是构建复杂仿真模型的基础,通过它们,我们可以模拟和分析各种系统的行为和性能,为决策提供数据支持。5高级功能5.1事件编程在Arena仿真环境中,事件编程是实现复杂系统动态行为的关键技术。通过定义事件,可以精确控制模型中各种活动的触发时机,从而模拟出更接近真实世界的行为。事件可以是时间触发的,也可以是状态触发的,这为模型的灵活性和准确性提供了保障。5.1.1时间触发事件时间触发事件是最基本的事件类型,它在指定的时间点发生。例如,假设我们需要模拟一个工厂的生产线,生产线在每天的8:00开始工作,可以使用时间触发事件来实现这一行为。#示例代码:定义一个时间触发事件
fromdatetimeimportdatetime,timedelta
fromarenaimportArena,Event
#创建Arena仿真环境实例
sim=Arena()
#定义事件
start_production=Event(sim,'StartProduction',datetime(2023,1,1,8,0))
#事件处理函数
defhandle_start_production(event):
print(f"生产线在{event.time}开始工作")
#注册事件处理函数
start_production.add_listener(handle_start_production)
#运行仿真
sim.run()5.1.2状态触发事件状态触发事件则是在模型中的某个状态改变时触发。例如,当生产线上的某个机器发生故障时,可以触发一个事件来停止生产线,直到机器修复。#示例代码:定义一个状态触发事件
fromarenaimportArena,Entity,Event
#创建Arena仿真环境实例
sim=Arena()
#定义实体(机器)
machine=Entity(sim,'Machine',state='Working')
#定义状态触发事件
machine_breakdown=Event(sim,'MachineBreakdown',condition=lambda:machine.state=='Broken')
#事件处理函数
defhandle_machine_breakdown(event):
print(f"机器在{event.time}发生故障,生产线停止")
machine.state='Repairing'
#注册事件处理函数
machine_breakdown.add_listener(handle_machine_breakdown)
#模拟机器故障
machine.state='Broken'
#运行仿真
sim.run()5.2动画效果设置在Arena中,动画效果的设置不仅能够帮助用户更直观地理解模型的运行状态,还能够用于教学和演示目的。通过设置动画,可以动态展示实体的移动、状态的变化等,使仿真结果更加生动。5.2.1动画基本设置动画的基本设置包括定义实体的外观、移动路径和状态变化的视觉效果。例如,可以设置一个实体在不同状态下的颜色变化,以直观显示其工作状态。#示例代码:设置实体动画效果
fromarenaimportArena,Entity
#创建Arena仿真环境实例
sim=Arena()
#定义实体(产品)
product=Entity(sim,'Product',state='InProcess',color='blue')
#设置状态变化时的颜色
product.set_state_change_color('Finished','green')
product.set_state_change_color('InProcess','blue')
product.set_state_change_color('Waiting','yellow')
#运行仿真,观察产品状态变化时的颜色变化
sim.run()5.2.2动画路径设置对于需要在模型中移动的实体,可以设置其移动路径的动画效果。例如,模拟一个物流系统中,产品从生产线到仓库的移动过程。#示例代码:设置实体移动路径动画
fromarenaimportArena,Entity,Path
#创建Arena仿真环境实例
sim=Arena()
#定义实体(产品)
product=Entity(sim,'Product',state='InProcess')
#定义移动路径
path=Path(sim,['ProductionLine','QualityCheck','Warehouse'])
#设置实体的移动路径动画
product.set_path_animation(path,speed=1)
#运行仿真,观察产品沿路径移动的动画
sim.run()5.3性能指标优化性能指标优化是Arena仿真中的重要环节,它旨在通过调整模型参数,找到系统最优的运行状态。性能指标可以是吞吐量、利用率、等待时间等,优化的目标是提高这些指标的效率。5.3.1吞吐量优化吞吐量是系统在单位时间内处理的实体数量,提高吞吐量通常意味着提高系统的生产效率。例如,在一个制造系统中,可以通过调整生产线的配置来优化吞吐量。#示例代码:吞吐量优化
fromarenaimportArena,Entity,Resource
#创建Arena仿真环境实例
sim=Arena()
#定义资源(生产线)
production_line=Resource(sim,'ProductionLine',capacity=1)
#定义实体(产品)
product=Entity(sim,'Product',state='InProcess')
#优化吞吐量:增加生产线的容量
production_line.capacity=2
#运行仿真,观察吞吐量的变化
sim.run()5.3.2利用率优化利用率是指资源在单位时间内被有效利用的比例,优化利用率可以减少资源的浪费。例如,在一个服务系统中,可以通过调整服务人员的数量来优化利用率。#示例代码:利用率优化
fromarenaimportArena,Entity,Resource
#创建Arena仿真环境实例
sim=Arena()
#定义资源(服务人员)
server=Resource(sim,'Server',capacity=1)
#定义实体(顾客)
customer=Entity(sim,'Customer',state='Waiting')
#优化利用率:增加服务人员的数量
server.capacity=2
#运行仿真,观察利用率的变化
sim.run()5.3.3等待时间优化等待时间是实体在系统中等待处理的时间,减少等待时间可以提高客户满意度和系统效率。例如,在一个医院系统中,可以通过优化预约流程来减少患者的等待时间。#示例代码:等待时间优化
fromarenaimportArena,Entity,Queue
#创建Arena仿真环境实例
sim=Arena()
#定义队列(预约队列)
appointment_queue=Queue(sim,'AppointmentQueue')
#定义实体(患者)
patient=Entity(sim,'Patient',state='Waiting')
#优化等待时间:增加预约队列的处理速度
appointment_queue.service_time=5#原来是10分钟,现在减少到5分钟
#运行仿真,观察等待时间的变化
sim.run()通过上述高级功能的介绍和示例代码,可以深入理解如何在Arena仿真环境中实现事件编程、设置动画效果以及优化性能指标,从而构建出更复杂、更直观、更高效的仿真模型。6案例分析6.1生产线模拟案例在制造业中,生产线的效率直接影响到企业的生产成本和市场竞争力。使用Arena模拟软件,我们可以构建生产线的虚拟模型,通过模拟运行来分析生产线的性能,识别瓶颈,优化资源配置,从而提高生产效率。下面,我们将通过一个具体的生产线模拟案例,来展示如何使用Arena进行生产线的建模和分析。6.1.1案例背景假设我们有一家生产电子产品的工厂,其生产线包括三个主要工序:组装、测试和包装。每个工序都有不同的设备和人员配置,且存在一定的故障率和维修时间。我们的目标是分析当前生产线的效率,找出瓶颈工序,并提出优化建议。6.1.2模型构建在Arena中,构建生产线模型通常涉及以下几个步骤:定义实体:在本案例中,实体可以是待加工的产品。创建流程:定义产品从组装到测试再到包装的流程。设置资源:包括设备和人员,以及它们的可用性和效率。引入随机性:考虑到设备故障和维修的不确定性,需要在模型中引入随机变量。运行模拟:设置模拟参数,运行模拟以收集数据。分析结果:根据模拟结果,分析生产线的性能,识别瓶颈。6.1.3代码示例以下是一个简化版的Arena模型代码示例,用于模拟上述生产线://定义实体
Entityproduct;
//创建流程
Processflow{
//组装工序
product->"Assemble"->Server(1,"AssembleMachine")->Queue("TestQueue");
//测试工序
product->"Test"->Server(1,"TestMachine")->Queue("PackQueue");
//包装工序
product->"Pack"->Server(1,"PackMachine");
}
//设置资源
ResourceAssembleMachine(1);
ResourceTestMachine(1);
ResourcePackMachine(1);
//引入随机性
AssembleMachine.SetDownTime(Exponential(0.01));//设备故障率
TestMachine.SetDownTime(Exponential(0.02));
PackMachine.SetDownTime(Exponential(0.03));
//运行模拟
Simulationsim;
sim.SetEndTime(86400);//模拟一天
sim.Run();
//分析结果
Reportreport;
report.Write("AssembleMachine","Utilization");
report.Write("TestMachine","Utilization");
report.Write("PackMachine","Utilization");6.1.4结果分析运行上述模型后,我们可以通过分析报告来查看每个工序的设备利用率。如果某个工序的设备利用率远高于其他工序,那么这个工序可能是生产线的瓶颈。例如,如果组装工序的设备利用率接近100%,而测试和包装工序的设备利用率较低,那么组装工序可能是限制生产线整体效率的关键因素。6.1.5优化建议基于结果分析,我们可以提出以下优化建议:增加组装工序的设备或人员:以提高组装速度,减少等待时间。优化测试和包装工序的流程:例如,通过并行处理或改进操作流程来提高效率。提高设备的可靠性和维修效率:减少因设备故障导致的停机时间。6.2物流系统优化实例物流系统是连接供应链各环节的关键,其效率直接影响到货物的交付速度和成本。使用Arena,我们可以模拟物流系统的运作,分析其性能,识别瓶颈,并通过优化策略来提高物流效率。下面,我们将通过一个物流中心的模拟案例,来展示如何使用Arena进行物流系统的建模和优化。6.2.1案例背景假设我们有一个物流中心,负责接收、存储和分发来自不同供应商的货物。物流中心包括接收区、存储区和分发区。我们的目标是分析当前物流系统的效率,找出瓶颈区域,并提出优化建议。6.2.2模型构建构建物流中心的模型,我们需要:定义实体:在本案例中,实体可以是货物。创建流程:定义货物从接收、存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府职工住房协议书模板
- 机电一体化实习报告
- 《2024年 VEGF和FGF5调节绒山羊绒毛生长机制的研究》范文
- CAXA制造工程师2008第2讲曲线生成
- 《2024年 冬季开幕直播策划方案范文》范文
- 标准化培训考卷91279
- 北师大版小学英语五年级下册期末考卷含参考答案
- 2022-2023学年贵州省毕节市高一下学期期末联考化学试题(解析版)
- 2024届河南省九师联盟高三下学期4月联考(三模)物理试卷(解析版)
- 2023年遥测单元项目评估分析报告
- 籍贯对照表完整版
- 山西省会计师事务所服务收费标准(汇编)
- 六年级音乐下册 《感恩的心》音乐课件
- 理论力学知识点概括
- 《报关实务》PPT课件.ppt
- PVC生产工艺流程图
- 施工现场装配式轻钢结构活动板房技术规程
- 全国社保行政区域划分代码
- 初中历史课堂教学中存在的问题及相关对策
- 中药学_羊肾_药材详解课件模板_性味
- 道路环卫清扫保洁项目安全生产及文明作业培训方案
评论
0/150
提交评论