计算机模拟的概念
建立研究对象的数学模型或描述模型并在计算机上加以体现和试验。研究对象包括各种类型的系统,它们的模型是指借助有关概念、变量、规则、逻辑关系、数学表达式、图形和表格等对系统的一般描述。
把这种数学模型或描述模型转换成对应的计算机上可执行的程序,给出系统参数、初始状态和环境条件等输入数据后,可在计算机上进行运算得出结果,并提供各种直观形式的输出,还可根据对结果的分析改变有关参数或系统模型的部分结构,重新进行运算。
发展过程
当人们设计和构造复杂的系统时,或研究自然界、人类社会中漫长的演变过程和不易重复试验的事物时,若对研究对象本身进行试验,从时间、人力、物力等因素考虑要付出昂贵的代价,甚至不可能进行。因此,需要制造一个模型来进行各种试验。
为了对系统模拟,首先要确定或表达所要研究的系统。用数学模型能较方便地确定一个系统,全面地反映对系统的已有认识或需要验证的假设,但缺乏直观性,也不便于进行试验。在数学模型的基础上,可进一步作出实物模型,它体现人们所要求的真实系统有关的性质,但在形式和规模上不必与真实系统完全一致。用实物模型试验比较直观、可信,但仍不够经济和方便。
可编程序的数字计算机出现以后,因它具有很强的数学运算和数据处理能力,可把数学模型编制成计算机程序,提供新的、通用的试验方法。计算机也可用于模拟与运筹有关的活动,例如,可以模拟参加竞争的双方所采取的步骤和最终的结局。它的应用领域很快就扩展到各种类型的系统,从规模巨大的系统一直到小型的系统,这些系统的数学描述常常非常复杂,要给出完全的解析解或精确的数值解非常困难。计算机模拟通过反复试验,帮助人们了解系统的性能,检验预想的假设,进行系统分析、设计、预测或评估,还可提供相当逼真的环境,借以培养和训练人员。计算机模拟已成为工程研制、自然学研究、经济和社会问题研究、教学训练活动、军事研究、组织管理等许多领域中的一个有力的工具。
基本方法
计算机模拟一般从形成问题到最后模型确认须经过许多步骤。
①形成问题,明确模拟的目的和要求。
②尽可能收集和处理系统有关的数据。
③形成数学模型,找出组成系统的各个部件,并描述它们在各时刻的状态的有关变量(一般包括输入变量、状态变量和输出变量)或参数;确定各部件之间相互作用和影响的规则,即这些描述变量之间的函数关系。选择参数和变量的时候,还须考虑它们能否辨识或求解,以及模型最后是否适于根据真实系统的数据进行检验。
④根据收集的数据确定或估计模型中的参数,并选择模型的初始状态。
⑤设计逻辑或信息的流程图,直至编制出计算机程序。
⑥程序验证,检验程序与数学模型之间的一致性,以及输入量的合理性。
⑦进行模拟试验,对给定的输入在计算机上执行程序。
⑧结果数据分析,收集和整理试验结果并作出解释。必要时可改变输入量或部分模型结构,重新进行试验。
⑨模型确认,检验由模型所得的结果与真实系统的性能数据的一致性程度。这是关系到计算机模拟是否有效的关键问题,它依赖于对真实系统本身进行试验的水平、能否获得足够的观测数据和判别一致性的准则。模型有效的级别可分为:重现有效的,即模型可重现真实系统的性能;预测有效的,即模型能有效地预测真实系统的未来性能;构成有效的,即模型能反映真实系统内部的结构。由于系统本身是随时间变化的,或者具有随机性,对真实系统数据和模型试验结果的比较常常需要采用时间序列分析方法或统计分析的方法。
离散时间模型的模拟
离散时间模型中的时间表示为整数序列(代表某一时间单位的整数倍),只考虑系统在这些时刻上的状态变化。这种模型的一个典型模拟程序包括下列步骤:
①置模拟时间T 的初始值为t0。
②置状态变量的初始值。
③给出当前模拟时间输入变量的值后,根据模型中的状态转移函数,确定在下一时刻T=t+h状态变量的值。再根据模型中的输出函数确定在该时刻输出变量的值。
④把模拟时间T 推进一个单位时间h。
⑤检查模拟时间T是否达到预定终止时刻。若已达到即停止;否则转移到步骤③。
离散事件模型的模拟
在离散事件模型中,系统的状态改变只出现在离散的时刻,称为离散事件。以排队系统为例,建立这种模拟模型的基本步骤和方法是:
①确定系统中包含的所有有关的“实体”及其属性,系统状态改变的一切“事件”及其前因后果。实体是系统的组成部件,每个实体的属性由表示其性质的数值表示,构成系统的状态。在排队系统中最基本的实体是一定数量的“服务站”和要求服务的“顾客”,它们的属性分别为“服务站”的“服务速率”和“顾客”的服务优先级、到达服务系统的时刻等。基本的“事件”包括:新实体进入系统或现有实体离开系统、实体属性发生变化、调度的时刻表变化等。
②确定模拟时间推移的方法。如果把时间按等间隔划分,顺序考察在这些时刻系统是否出现事件,称为固定时距方法;如果时间每次推移的长度以下一次事件发生的时刻为依据,称为可变时距方法或“下一事件”方法。
③由于系统中事件的出现常具有随机性,服从一定的概率分布,因而在计算机上需要产生这些分布的随机数。
④为了灵活有效地记录系统的状态,进行事件的调度,积累有关性能数据并形成报表,保存和自动管理未来事件文件,在程序设计中采用数据库技术非常适宜。
连续系统模拟
状态随时间连续地发生变化的系统称为连续系统,状态变化的速率满足一定的微分方程。在计算机上建立对应的模拟模型,有赖于求解微分方程的有效的数值方法,并编制成标准子程序,以便能使用各种方程阶数、系数、初值条件或边值条件。对包含反馈和控制的系统的模拟是这种类型的典型例子。
模拟语言
编制模拟程序时可采用汇编语言、通用编程语言(如FORTRAN,ALGOL等),还可采用各种模拟语言。计算机模拟语言是一种高级的描述系统模型的编程语言,它提供表示系统模型中许多基本单元、部件和调度操作的模块。用户用它可较方便地确定模型的基本结构,只要再添加一些辅助的程序就可编出模拟程序。
模拟语言一般是在别的通用编程语言的基础上建立的,它需要自己的编译程序进行预编译,把模拟语言程序转换成通用编程语言程序,再经过一次编译,转换成计算机上可执行程序。模拟语言能减轻用户的程序工作,但也不可避免地带来一些限制,消耗更多的内存和运算时间。
模拟语言可分为离散事件模拟语言(如GPSS及其各种改型、SIMS-CRIPT、GASD、CSL、SIMULA等)和连续系统模拟语言(如 DARE、ACSL、CSS、CSSL等)两大类型。对于各种应用领域还有专用的模拟语言。
计算机模拟与计算机硬件和软件技术的发展关系非常密切。为便于建立模型和进行模型的有效性检验,人们企图使模拟模型在时间和空间上与真正的系统有一定程度的相似关系。在模拟过程中,希望能方便地改变参数甚至改变模型的结构,并能通过键盘命令随时输出数据和图表。因此,计算机模拟要求计算机有很强的并行处理能力,有较高的运算速度,有人机交互能力和便于使用的模拟语言。