基本介绍
编辑计算机模拟(Computer Simulation)是一种核心的科研与工程方法,其基本定义是为某一研究对象(即系统)建立数学模型或描述性模型,并利用计算机的强大运算能力来运行此模型,通过试验和分析其结果来研究该对象的行为、特性和演变规律。
计算机模拟的研究对象涵盖了各种类型的系统。当人们需要设计和构造复杂的工程系统,或是研究自然界及社会科学中那些演变周期漫长、不易重复或试验成本高昂的事物时(例如天气演变、经济波动、星系演化),直接对真实系统本身进行试验,往往在时间、人力、物力上需付出昂贵的代价,甚至完全不可行。因此,制造一个用以替代真实系统的“模型”来进行各种模拟试验,便成为必要的研究手段。
为了对系统进行模拟,首要步骤是确定和表达所研究的系统。数学模型(Mathematical Model)能够便捷地确定一个系统,并全面反映研究者对系统的已有认知或需要验证的假设,但其缺点是高度抽象,缺乏直观性,也不便于直接进行动态试验。在数学模型的基础上,可以进一步制作实物模型(Physical Model)。实物模型能直观地体现真实系统的相关性质(尽管在形式和规模上不必完全一致),用其实验比较直观、可信,但其制作和试验过程通常仍不够经济和方便。

可编程数字计算机的出现彻底改变了这一局面。凭借其强大的数学运算和数据处理能力,研究人员得以将复杂的数学模型编制成计算机程序,从而提供了一种全新的、通用的、高效且经济的试验方法。计算机不仅能模拟物理系统,也可用于模拟与运筹学相关的活动,例如推演(模拟)参加竞争的双方可能采取的步骤和最终的结局。计算机模拟的应用领域迅速扩展到各种类型的系统,从规模巨大的系统(如宇宙、全球气候)一直到小型的系统(如分子运动),尤其是那些数学描述极其复杂、难以给出完整解析解或精确数值解的系统。通过计算机模拟的反复试验,人们得以深入了解系统性能、检验预想假设,并进行系统分析、设计、预测或评估。此外,它还能提供高度逼真的虚拟环境,借以培养和训练相关人员(如飞行员、医生)。时至今日,计算机模拟已成为工程研制、自然科学研究、经济和社会问题研究、教学训练活动、军事研究、组织管理等诸多领域中一个不可或力的工具。
基本方法
编辑一个完整的计算机模拟过程,通常从问题的形成到最终模型的确认,必须经过多个严谨的步骤。首先是“形成问题”,即明确模拟的目的和具体要求。其次是“收集数据”,尽可能全面地收集和处理与真实系统相关的历史数据和运行数据。第三步是“形成数学模型”,这包括识别组成系统的各个部件,并描述它们在各时刻状态的有关变量(通常包括输入变量、状态变量和输出变量)或参数;同时确定各部件之间相互作用和影响的规则,即这些描述变量之间的函数关系。选择参数和变量时,还必须考虑它们能否被辨识或求解,以及模型最终是否适于根据真实系统的数据进行检验。
第四步是“确定参数”,根据收集的数据来估计或确定模型中的参数,并选择模型的初始状态。第五步是“编制程序”,设计逻辑或信息的流程图,直至编制出可执行的计算机程序。第六步是“程序验证”(Verification),即检验程序代码与数学模型逻辑之间的一致性,以及输入量的合理性。第七步是“进行模拟试验”,对给定的输入在计算机上执行程序。第八步是“结果数据分析”,收集和整理试验结果并作出解释,必要时可能需要改变输入量或部分模型结构,重新进行试验。第九步是“模型确认”(Validation),即检验由模型所得的结果与真实系统的性能数据之间的一致性程度。
模型确认是关系到计算机模拟是否有效的关键问题。它依赖于对真实系统本身进行试验的水平、能否获得足够的观测数据以及判别一致性的准则。模型有效的级别可分为:重现有效的(模型可重现真实系统的历史性能)、预测有效的(模型能有效地预测真实系统的未来性能)和构成有效的(模型能准确反映真实系统内部的结构)。由于许多真实系统本身是随时间变化的,或者具有显著的随机性,因此在对真实系统数据和模型试验结果进行比较时,常常需要采用时间序列分析方法或统计分析的方法。
离散时间模型的模拟
编辑离散时间模型(Discrete-Time Model)是指系统状态只在固定的时间间隔点上发生变化,时间被表示为整数序列(代表某一时间单位的整数倍)。一个典型的离散时间模拟程序通常包括以下步骤:①设置模拟时间T的初始值为t0。②设置状态变量的初始值。③根据当前模拟时间的输入变量值,以及模型中的状态转移函数,确定在下一时刻T=t+h(h为时间步长)状态变量的值,并根据模型中的输出函数确定该时刻的输出变量值。④将模拟时间T推进一个单位时间h。⑤检查模拟时间T是否达到预定的终止时刻,若已达到则停止;否则转移到步骤③,继续计算下一时刻。
离散事件模型的模拟
编辑在离散事件模型(Discrete-Event Model)中,系统的状态改变并非发生在固定的时间间隔点,而是发生在离散的、间隔不一的时刻点,这些时刻点被称为“离散事件”(例如在排队系统中,“顾客到达”和“服务完成”就是事件)。建立这种模拟模型的基本步骤和方法是:①确定系统中包含的所有有关“实体”(Entities)及其“属性”(Attributes),以及所有可能改变系统状态的“事件”(Events)及其前因后果(例如,排队系统中的实体是“服务站”和“顾客”)。②确定模拟时间推移的方法。一种是“固定时距法”(按等间隔划分时间,顺序考察是否出现事件);另一种是“可变时距法”或称“下一事件法”(时间每次推移的长度以下一次即将发生的事件的时刻为依据)。③由于系统中事件的出现常具有随机性(如服从一定的概率分布),因而在计算机上需要产生符合这些分布的随机数。④为了灵活有效地记录系统状态、进行事件的调度、积累性能数据并形成报表、以及自动管理未来事件文件,在程序设计中采用数据库技术非常适宜。
连续系统模拟
编辑状态随时间连续地发生变化的系统称为连续系统(Continuous System),其状态变化的速率通常满足一定的微分方程(组)。在计算机上建立对应的模拟模型,其核心技术有赖于求解微分方程的有效的数值方法(如欧拉法、龙格-库塔法等)。这些数值方法通常被编制成标准子程序,以便用户能方便地使用各种方程阶数、系数、初值条件或边值条件。对包含反馈和自动控制的系统进行模拟,是连续系统模拟的典型例子。
模拟语言
编辑编制计算机模拟程序时,开发者可采用多种编程工具,包括底层的汇编语言、通用的编程语言(如FORTRAN、ALGOL等),还可以采用专门的“模拟语言”(Simulation Language)。模拟语言是一种高级的、专门用于描述系统模型的编程语言,它为用户提供了用以表示系统模型中许多基本单元、部件和调度操作的标准模块。用户使用模拟语言可较方便地确定模型的基本结构,只需再添加一些辅助的程序,即可编出完整的模拟程序。
模拟语言一般是在其他通用编程语言的基础上建立的。它需要自己的编译程序进行预编译,先把模拟语言程序转换成通用编程语言(如FORTRAN)的程序,然后再经过一次通用编译,转换成计算机上可执行的机器码。模拟语言能显著减轻用户的程序工作量,但也不可避免地会带来一些使用上的限制,并且通常会消耗更多的内存和运算时间。模拟语言可分为“离散事件模拟语言”(如GPSS、SIMSCRIPT、CSL、SIMULA等)和“连续系统模拟语言”(如DARE、ACSL、CSSL等)两大类型。此外,针对各种特定的应用领域,还衍生出了许多专用的模拟语言。
计算机模拟技术与计算机硬件和软件技术的发展关系非常密切。为了便于建立模型和进行模型的有效性检验,人们期望模拟模型在时间和空间上能与真实系统有一定程度的相似关系。在模拟过程中,用户希望能方便地改变参数甚至改变模型的结构,并能通过键盘命令等方式随时输出数据和图表。因此,高效的计算机模拟对计算机的能力提出了很高的要求,包括强大的并行处理能力、高速的运算速度、良好的人机交互能力以及易于使用的模拟语言支持。
参考书目
编辑G. Gordon, System Simulation, Prentice Hall, Englewood Cliffs, New Jersey, 1978.
百科词条作者:小小编,如若转载,请注明出处:https://glopedia.cn/397391/
