|
很多时候,我们在建立仿真模型的时候会遇到现实中复杂的情形。对于这些情形,如果能按现实中一致的方式表达固然是最好的,但有时受仿真软件的功能限制或开发时间限制,难以在仿真中和现实一致的表达。此时,仿真抽象就是解决问题的一个很好方法。那么,什么叫仿真抽象呢?这名字是我起的,如果定义的话,就是提取复杂事物中最本质的内容,用简单的方法来表达。 `; d6 Q' e/ R; Y0 }0 e/ {8 _
举个例子,在plant simulation中是没有立体库的,可有些人可能见过老外开发的立体库模块,其实就是用一些singleproc和method封装了一个frame,外层用对话框包装一下,填写长、宽、高、货叉速度等立体库参数,就可以用了。那么,这个立体库模块是怎么表达立体库的出、入库过程呢?通常在其他三维仿真软件里,大家会看到完美表达的立体库动画,堆垛机从入库口取了货物,经过纵向、横向的运行,再由货叉把货物放到指定空位,这个过程动画和现实中一样,很容易理解。但要仔细想想,这个过程到底要表达什么?什么才是最关键的?答案是时间,货叉从入库口取货到放货完成的时间是仿真最重要的内容,因为这个时间决定了生产量,决定了每个货物的出、入库周期。所以在plant simulation的立体库模块,只用一个singleproc来表达这一过程,只不过proctime属性是动态的,是通过一个数学模型计算出来的。这个数学模型逻辑也很简单,就是随机一个库位(有X/Y坐标),然后根据库位坐标和入库口位置,结合堆垛机的速度、加速度计算横向运行时间和纵向运行时间,把最大的那个时间赋值给proctime。所以这样一个方法,很简单的就可以描述立体库,虽然它没有绚丽的三维动画,但同样做仿真,它的输出数据比三维动画的输出还准确(很多人怕仿真数据不准,要看动画,其实动画很准,但数据可能差很远)。而且,更为重要的是,这种抽象方法建立的模型仿真速度非常快,可以在极短的时间内完成几万次仿真,产生较为全面的仿真数据(因为是随机货位,所以立体库的仿真需要很多次仿真才能归纳其内在的规律)。
9 M, K% W, q0 i3 W9 S4 | 再如,曾经有个学生想做超市的仿真,建了个很复杂的模型,模拟人进超市、逛各个区、再到缴费的过程。但这个过程在现实中非常复杂,有各种各样的因素影响。所以我问他,你到底建这个模型想表达什么?他想了半天,说看到超市缴费排队太长,想建个模型分析下。因为缴费的人数受逛超市人数的影响,逛超市受进超市人数影响。我问,如果这么想的话,进超市人数是否还受这个城市人口基数的影响?是否还受这个城市20年前的出生率的影响?这其中的内在规律,没人能说的清,你仿真怎么能表达出来?所以如果要研究缴费排队问题,就老老实实建个多服务台的排队模型就好了,顾客到达按泊松分布,具体参数到超市调研去。# _7 t2 P# [* o, }+ C) T6 c
通常我们讲仿真和数学建模方法是两种不同的方法,数学方法粗、仿真方法细,而且仿真方法是按时间进度一步一步推算出来的。但在仿真一步一步推算过程中,很多细节如果和现实中完全一致,其实是没有必要的,需要用数学模型表达现实中静态的过程,再用仿真的动态方法不断往复计算,获得计算结果,这个过程才是仿真建模的本质。但这个过程中的每一个细节,其内在规律和特性一定是人类能获知的,能用数学方法表达出来的,否则仿真就不是预测未来的工具,而是坑蒙拐骗的神棍了。 |
评分
-
查看全部评分
|