APP下载

基于Agent 的单体民用建筑智能方案设计

2014-11-18李云丰

山西建筑 2014年19期
关键词:流线方案设计楼层

徐 欣 李云丰

(1.中国矿业大学(北京)力学与建筑工程学院,北京 100000;2.浙江广川工程咨询有限公司台州分公司,浙江 台州 318000)

人工智能是个涉及多学科的综合技术,它在众多领域得到了广泛的应用。房屋建筑设计领域在结构计算方面早已实现智能化,但在方案设计方面,离智能化的要求还很远。Minsky 于1986年出版了《思维的社会》一书,提出了Agent 的思想。Minsky 认为社会中的个体Agent 经过协议可求得某些问题的解,个体具有社会交互性和智能性等特点。从此,Agent 的概念被引入人工智能和计算机领域,并逐渐成为研究热点。方案设计是建筑设计的重要阶段,在建筑物的整体设计中至关重要。将Agent 引入方案设计流程、设计过程智能化是计算机辅助建筑设计领域一项创新的工作。

1 方案设计前期准备工作

1.1 经需要甲方提供的资料

用地红线图、原始地形图、相应区域城市规划图、规划要点、各地政府的相关规定、城市规划管理条例等,甲方提供的设计任务书(涉及到具体的设计内容、设计方向、出图深度、时间控制等)、用地批文。

1.2 设计师相应的准备工作

明确相关设计的一些规范及防火规范;在场地、单体设计上有何约束;根据设计任务书明确建筑的定位、把握大的设计方向;将建筑用地根据不同情况分类,明确优势劣势;根据规划要点及设计任务书测算建筑规模;根据甲方的进度要求及工作量拟定工作时间表,时间表上应留出必要的审图时间,甲方配合的时间则较为机动;收集整理相应的参考资料。场地设计可在地理信息系统中运用Agent 进行仿真优化,本文探讨的是建筑单体设计中结合建筑信息初步模型的创建如何运用Agent 实现智能设计。

2 Agent 与单体民用建筑的智能设计

2.1 Repast 的运用

本文运用Agent 的主流软件之一Repast 来实现单体民用建筑的智能设计。Repast 建立方案设计建筑信息模型(PDBIM)相当于设计一个状态机,该机的核心状态是PDBIM 中所有成员的集体状态属性集合。成员则分为底层结构和表层结构。Repast 一共有数百个类,封装在11 个库中,本文对几个主要的类库进行扩充:Analysis 库通过使用DataRecorder 类进行数据分类整理和挖掘;Engine 库负责建立、操纵和运行PDBIM,simModel 接口是Repast 中所有模型的超类,库中包含的控制类负责通过图形用户界面处理气泡图,时序表及相关行为类主要用来改变模型中的状态;GUI 库有对图形界面显示的快照功能以及制作模型运行的活动录像,多个Display 类与Space 空间库中的类协同工作,把空间位置关系的抽象和空间关系的显示分离出来,可以针对不同建筑空间特征设计不同的可视化显示方案;Network 库包括实现网络仿真的类,各种特殊定义的可记录网络数据的记录类;Space 库主要包括创建气泡—房间空间关系的类,研究多个Agent 在一定空间内的活动使用网格空间,网格空间被划分成许多气泡(cell),其中每个气泡可以同时容纳一个或多个Agent,并按照方案设计规则,网格的状态不断发生变化。

2.2 可视化的实现

进行单体建筑方案设计之初,进行功能气泡分析,实质是创建一个动态的可视网络图。先用RasterSpace 类,表现出PDBIM数据分楼层的二维网格,用Object2DGrid 类描述离散的二维网格。通过这两个类的配合使用,对象的逻辑上的移动在RasterSpace 上进行,而视觉上的移动则在Object2DGrid 上来实现。PBBIM 楼层信息需用到特定规则的一个流数据文件,通过标记来识别出文件中的一些相关信息。

用二维矩阵行列分别对应着上面的nrows 和ncols,矩阵中的每一个值都代表着特定的信息,这些值将在功能气泡分析的过程中起着重要的作用,可以使用不同的值去代表约定的一些特定信息和性质。使用数字0 代表不可通行的结构部分,使用数字2 代表楼层内的楼梯和电梯,使用其他数字代表可以行走的通道,1 代表一般的走廊,56x(x 代表任意数字)代表逗留,70x(x 代表任意数字)代表各个房间的门。Cx(xϵ1~3)代表各个房间的窗,x(xϵ4~7)代表单体建筑各方向的入口等等,任何想要用到的标识信息都可以简化为数字来代表加入到这个代表楼层信息的矩阵中,功能气泡的分析过程,实质是逐步深化这个楼层信息矩阵的过程。

2.3 功能气泡图分析的运行过程

在开始运行PDBIM 后,系统初始化,首先调用begin()函数,通过buildSchedule()方法设置好模型的时钟机制schedule,控制模型在之后的时刻按照这个schedule 进行相应的方法调用和操作,然后,开始建立具体的气泡,此时执行buildModel()方法,在这个方法里涉及到了初始化模型内包括的所有对象,包括气泡对象、流线对象、人对象,还有代表地块的容器对象和楼层的点阵点对象等等。完成了模型的初始化之后,创建显示机制,采用了首先将需要创建显示的对象加入一个可供维护及更新用的各自的对象列表即ArrayList,然后将这些对象列表通过DisplaySurface 类的addDisplayable()方法将这些对象列表按特定顺序依次加入到显示界面中,然后通过实时同步的刷新列表对象显示,达到动态的显示各对象行为的效果。此处addDisplayableProbeable()创建可点击性(Probeable),当点击这些对象时,将会返回一个弹出窗口,里面将会列出该对象相关的一些参数状态信息。在初始化模型成功之后,当单击运行按钮时,PDBIM 的功能分析便开始执行了。仿真按照既定的schedule 来执行,schedule 通过不停的调用step 方法来实现PDBIM 的分析运行。在模型主类PDBIMModel 中的step()方法中通过向下调用各个对象的step()方法来实现对所有对象的模拟运行。在step()方法的末尾一句是用于更新显示的:DisplaySurface.updateDisplay(),通过执行这一句话在每一步各对象的行为改变后对显示进行更新可以实现动态的显示模拟。

3 设计仿真运行中所包含的具体对象

3.1 Person,PersonContainer,PersonFactory

Person 类即使用建筑的人物类,见图1,主要是对移动行为进行模拟的类,也可以通过对参数的不同设定模拟出不同种类的人群,每一个Person 对象都包含了大量的信息,每一个Person 都必须对自己的状态有一个完整的维护,例如此时是否在某个Babble、是否遭遇拥堵以及自己的移动策略等。Person 类拥有自己的step()方法供上一层对象调用,在这个step()方法中,包括了根据当前Person 的状态来决定这一步应该执行的动作,例如Person 当前的状态是行走,则执行Person 的move()方法来对Person 进行移动,如果当前状态是正处于房间内逗留的状态,则执行Person的stay()方法,使Person 在自己所位于的房间范围内自由的移动。

PersonFactory 类即控制产生所需要产生的人物类,通过在此类中调用Person 类的构造方法同时赋予不同的参数值,例如需要构造的人物年龄、性别等性质,可以构建出一系列具体的构造方法,例如creatPerson(),creatOldPerson(),creatChild()等等方法可以分别构造出普通成年人、老人和小孩。一般情况下是在Person-Container 里面初始化人物对象时或者在分析期间加入新的人物对象时用到此类,该类和即将提到的PersonContainer 类都采用了单实例的构造方法,防止冗余对象的产生,也便于程序的管理。

PersonContainer 类负责对众多Person 类对象进行系统的调度和管理。此类主要维护了两类Person 的List,在初始化时,利用PersonFactory 类的构造方法初始化人群并且加入到PersonList 列表中。在这个类中还有一个负责统计人物状态信息的方法countTheAgents(),可以统计各楼层内的人数,各Babble 内人数等。该类的step()方法调用每一个进入到Babble 的Person 的step()方法,实现人物的各种行为。

图1 主要对象关系图

3.2 Babble,BabbleFactory,BabbleContainer

Babble 类即气泡类,非常具体地可以将楼层内的每个房间看作是一个气泡。气泡类的功能是实现对一个Babble 的分裂、合并、控制,并且每一个Babble 都拥有自己的功能和面积,在设计仿真运行时,建筑物对每一个Person 的出入时间都随机指定。Babble 类内部自带一个统计内部逗留Person 数目的计数器,当一个Person 进入这个Babble 时,该计数器加1,反之该计数器减1,可以达到统计人数的目的,同时每一个Babble 又有一个自身的可容纳的最大Person 数量。在创建PDBIM 视图时,将这个计数器和最大容量都显示在Babble 标志的附近,便于观察。为了实现Babble 的人数分级显示功能,PDBIM 采用了让Babble 的标志图片在所含有人数不同时显示不同的标志,达到动态图片提示的目的,相似的还可以加入声音提示功能。

BabbleFactory 类就是用于产生Babble 的类,通过这个类可以产生出拥有各种各样不同功能的气泡。BabbleContainer 类,相似的是用作管理气泡的类,由于和Babble 的区别,该类主要是有一个用于初始化Babble 列表的方法initBabble(),用于完成对一系列Babble 的初始化。

3.3 Streamline,StreamlineFactory,StreamlineContainer

Streamline 类即Person 行走形成的轨迹,智能方案设计体现在流线和气泡的产生和调整上。方案设计之初用一个大Babble代表整个单体建筑,然后按楼层分为若干个floorBabble,相应产生上下垂直交通流线。某楼层Babble 按建筑类型又进一步分裂,比如对内Babble、对外Babble 以及两者结合的Babble,对内Babble又可分为管理人员用气泡、普通人员用气泡和后勤人员用气泡,气泡依据功能的细化进一步分解,相应的流线生成都通过StreamlineFactory 产生。气泡和出入口之间一个Person 的行走轨迹,必须初始化以下参数:轨迹起止点所位于的位置、轨迹的宽度、Person 的通行节点、流线的类型以及流线的ID 号。在该类中加入了用于方便设置流线参数的方法setStreamlineParameter()可以方便的更改轨迹参数如起止点、宽度和节点。轨迹的产生利用的是迷宫算法(path 类),迷宫算法有这样的一个功能:在一个二维矩阵空间中,一旦约定了代表可以通行的数据值,给定一个起始点和一个目的点,它能够自动的寻找出一条通行路线。这样的设计给流线调整提供了方便,可以通过随机产生的情况得到对应的解决策略,然后实时的获取正确的一条线路,可以绕开不想去的区域以及人员拥堵的节点。所有Person 行走轨迹形成Streamline,该类拥有自己的step()方法供上一层对象调用,在这个step()方法中,调用了Streamline 的移动方法moveByPoint(),即根据一条既定的路线点链表进行移动。通过setStreamlineParameter()方法赋予Person 一条线路,将会把这条线路包括的一系列点通过一个List 对象传给Person,然后在move()方法中按照先后顺序依次走完list 中的每一个点,达到所有Person 行走的轨迹形成流线的目的。StreamlineContainer 类是一个比较重要的类,它主要负责管理流线的整体评价问题。评价逻辑采用不同类型流线交叉度和流线臃肿度相结合的策略,根据交叉节点的分布情况实时的调整出入口的分配策略,达到消除拥堵和方便交通的目的。对建筑物的出入口进行初始化,即initEntranceandExit()方法,将每类Person具体的初始化到各自的出入口,随着具体的Person 在建筑物内行走,流线形成。

3.4 其他重要对象

Point 类是用于代表某楼层中的任意一个点,它本身包含了其自身的坐标信息,主要用于辅助Path 类对最优路径的求解。

Path 类是用于自动生成两个点之间的路径,可以运用迷宫算法、蚁群算法等智能算法来实现,Path 类包括一个主要的方法go()方法,该方法的参数是一个起始点和一个终止点,返回值是一个包含诸多Point 类对象的列表。列表中的对象Point 按照先后顺序排列,形成的是一条可行的路径。

StructureandRoom 类用于记录墙、柱等结构的位置和结构围合成的房间,由Babble 生成。StructureandRoomContainer 类用于维护一个StructureandRoom 类的列表,里面可以有多个Structureand-Room 类对象。

passageway 类用于记录走廊等通行空间的位置,由Streamline生成。passagewayContainer 类用于维护一个passageway 类的列表,里面可以有多个passageway 类对象。

SiteandFloor 类是用于向PDBIM 中导入场地和楼层信息的类,该类里面提供了初始化场地和楼层信息的方法,方法里使用到了两个类:1)Object2DGrid 类,该类用于生成一个二维网格型的空间,在PDBIM 中起到像素化的模拟出地面和楼层的作用;2)RasterSpace 类,该类可以处理特定的文本文件,这种文本文件内包含的场地楼层信息一般与SiteandFloor 对象有着关联。当该初始化方法成功执行后,场地和楼层信息便成功导入到PDBIM 中,Person,Streamline,Babble 类等就可以按照方案设计流程进行互动式操作。

4 结语

智能方案设计的过程就是气泡分裂,流线生成与调整,气泡再分裂,流线细化与调整,直至最后将气泡变为一个个具体的房间,流线变为一个个具体的厅廊、楼梯、坡道,相应生成建筑主体结构,按房屋制图标准成图,从而完成方案设计的智能化、实时的互动优化设计和方案评价的全部内容。设计过程智能化是计算机辅助建筑设计领域一项创新的工作,进一步实现了建筑信息模型的动态调整和功能优化,缩短了设计时间,提高了设计效率。

[1]Jiming Liu.多智能体原理与技术[M].北京:清华大学出版社,2003.

[2]Russell S,Norving P.Articicial Intelligence:A modern Approach[M].Pretice Hall.1995.

[3]Shoham Y,Tenenholtz M.Agent-Oriented Programming[J].Artificial Intelligence,Elsevir Science Publisher B,1993(60):51-92.

[4]Manuel Kolp,Paolo Giorgini,John Mylopoulos.Multi-agent architectures as organizational structures[J].Journal of Autonomous Agent and Multi-Agent System,2006,13(2) :3-25.

[5]Nicholas R,Jennings,Michael.Wooldridge.Agent-Oriented Software Engineering[M].Bradshaw J,editor,Handbook of Agent Technology.AAAI/MIT Press.2002.

[6]方美琪,张树人.复杂系统建模与仿真[M].北京:中国人民大学出版社,2011.

[7]Conor,Brendan Ward.Brian Henderson-Sellers.Utilizing Dynamic Roles for Agents[J].Journal of Object Technology,2009,8(3) :177-198.

[8]David V Pynadath,Milind Tanbe.An Automated Teamwork Infrastructure for Heterogeneous Software Agents and Humans[J].Autonomous Agents and Multi-Agent Systems,2003,7(2) :71-100.

[9]Abdelaziz T,Elammari M,Unland R.MASD:Multi-agent systems development methodology[J].Journal Multiagent and Grid Systems,2010,6(3) :68-99.

猜你喜欢

流线方案设计楼层
利用楼层废水势能的发电装置
100MW光伏车间自动化改造方案设计
一种适用于高轨空间的GNSS矢量跟踪方案设计
方案设计在建筑设计中的重要性与应用
几何映射
电梯的升与降
自动扶梯楼层板周边环境的安全防护
任意夹角交叉封闭边界内平面流线计算及应用
方案设计我做主
考虑土与结构相互作用的核电站厂房楼层反应谱分析