一种工程量计算方法

文档序号:6335970阅读:224来源:国知局
专利名称:一种工程量计算方法
技术领域
本发明涉及工程预决算技术领域,尤其涉及一种采用并行增量式计算的工程量计 算方法。
背景技术
在建筑工程预算、施工决算等方面都需要引用工程量数据,包括混凝土方、人工费 用等等。而要得到这些工程量数据,需先计算建筑的体积、表面积等基础几何量。由于复杂 的几何相交扣减关系,这些量的人工计算繁琐而费时,准确性也比较差。这正是工程量自动 计算软件发挥作用之处。上述预决算方法的主要任务在于工程量计算,其核心思想均基于三维布尔运算, 即对任意两个三维几何体,求其交、并和补,得到新的几何体,然后对它们的量进行运算、汇 总。这种运算本质是对工程量扣减计算的数学描述,围绕这套数学方法普遍操作流程是(1)对建筑构件三维建模,从图纸中的信息还原出建筑物完整的三维几何信息;(2)基于(1)中的信息,利用三维布尔计算求得建筑物的整体几何量,例如墙体体 积、梁体积(已计入扣件关系)、模板面积等等;(3)套用清单或者定额,得到最终需要的汇总量。其中,主要的计算量集中在第(2)步。参见图1,示出了一种典型的现有工程量计算方法的计算过程,包括以下步骤SlOl、对构件建模。S102、判断是否建模完毕,若是,进入步骤S103;若否,返回步骤S101。S103、计算单个构件的工程量。S104、计算构件间相交部分的扣减工程量。S105、根据全部构件的工程量及构件间相交部分的扣减工程量,得到汇总工程量。S106、套用清单或定额,得到预决算结果。图1示出的工程量计算方法采用建模完毕再计算的思路,即集中计算的模式。由 于工程计算量非常庞大,导致用户建模后等待数分钟甚至数小时才能看到计算结果。也有 些方案采用了 一些加速技巧,但总体讲对计算速度的改进都杯水车薪,远远达不到实时效 果(建模完成即看到计算结果)。由此可见,现有技术的主要缺点体现在两方面(1)计算速度慢。每次计算需要数分钟甚至数小时的计算时间,在此期间用户不能 操作软件,只有等待计算完成。即便用户对工程设计只做了一些细微的调整,也会导致工程 重头到尾计算,计算时间得不到改观。(2)没有充分利用现代CPU的多核心特性,最大化地调动计算资源,提高效率。无 论用户的电脑有多少个处理核心,都只能利用其中一个,资源利用率低。

发明内容
有鉴于此,本发明的目的在于提供一种增量式工程量计算方法,可实现建模后即 完成工程量计算的实时计算效果。进而本发明采用后台多线程并行增量式工程量计算方 法,以充分利用CPU的多核心资源,提高工程量计算效率。为解决上述技术问题,本发明提供的技术方案是,一种工程量计算方法,包括(10)提取已建模构件集合;(20)编辑构件,并识别已建模构件集合中与编辑构件存在相交和扣减关系的目标 构件子集合;(30)计算编辑构件的工程量,计算并更新目标构件子集合中每个目标构件的工程 量;(40)判断建模是否结束,若是,进入步骤(10);若否,返回步骤(20);(50)汇总已建模构件集合中所有已建模构件的工程量。较优地,编辑构件的类型为添加构件、删除构件或修改构件。较优地,修改构件按照添加修改前构件、删除修改后构件两个步骤操作。较优地,采用并行计算方式。较优地,引入以下计算线程建模主线程,用于提取已建模构件集合、编辑构件并识别已建模构件集合中与编 辑构件存在相交和扣减关系的目标构件子集合;工程量计算线程,用于计算编辑构件的工程量,计算并更新目标构件子集合中每 个目标构件的工程量。较优地,引入带标记的垃圾回收线程,用于标记目标删除构件并在计算队列为空 时清理已标记删除构件。较优地,若发生因构件被删除而导致的非法内存地址访问错误,根据已标记删除 构件排除错误。较优地,在步骤(50)之前,判断是否发生因构件被删除而导致的冗余计算错误, 若是,剔除冗余计算结果。较优地,引入计算准备线程,用于执行工程量计算之前的预备工作。较优地,工程量计算之前的预备工作包括建立构件的三维实体模型、确定构件之 间的影响关系、以及将待计算的工作添加入计算队列之中。与现有技术相比,本发明采用增量式工程量计算方法,即在建模的同时进行工程 量计算,可实现建模后即完成工程量计算的实时计算效果。由于同时在后台进行多线程计 算,即开启后台计算线程,利用一个或多个线程计算,这样与建模主线程互不干扰,既不影 响用户体验,同时也能充分利用多核CPU资源,加快工程量的计算速度。特别地,采用了基 于标记的垃圾回收机制,用一个单独的线程定期清理已删除构件,从而避免线程并发运行 可能引入的错误情况。


图1为现有工程量计算方法的流程图;图2为本发明工程量计算方法实施例一的流程图;图3为图2中针对不同编辑构件工程量的处理方法的流程图;图4为本发明工程量计算方法实施例二的多线程架构图。
具体实施例方式本发明的核心为采取增量式计算,即在建模的同时进行工程量的计算,实现建模 后即完成工程量计算的实时效果。进而采用多线程并行计算方式,以充分利用CPU资源,从
而提高工程量计算效率。为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实 施例对本发明作进一步的详细说明。实施例一增量式工程量计算方法本发明采用增量式工程量计算的出发点是基于这样的观察——工程量软件计算 的时间耗费远小于其前期建模的时间耗费。由此,本发明改变传统的工程量计算处理流程, 把集中计算改为增量式计算。也就是说,在用户建模的同时对已完成建模的部分做计算,从 而把计算时间摊薄到建模时间中;最后用户作总体计算的时候仅仅是简单的汇总而已,而 最主要的计算在之前的建模过程中即早已完成,由此可实现建模后即完成工程量计算的实 时或准实时效果。为实现此目的,须得建立一套增量式计算框架。其中的建模过程包括图纸智能识 别和用户手绘构件,可看成逐个往建筑物中添加、删除或修改构件的过程。取任意的一个时 间点,并假设在此之前完成的建模部分已完成全部计算,则采取以下处理方式(1)若添加新构件a此时,构件a只会影响那些与它空间上相交并且规则上有扣减关系的构件。设在 添加a之前已完成建模的建筑中所有的构件集合为Ω,并设Ω中所有与a有相交和扣减关 系的构件集合为S。则只有S中的每个构件8和3需要重新计算,Ω-S不受影响。重新计 算的过程和传统方法类似,对每个s e S,用三维布尔运算结合工程量扣减计算规则求得s 新的工程量(主要计算a的影响),并加入计算得到的a的工程量。(2)删除构件a类似(1),构件a也只会影响那些与它空间上相交并且规则上有扣减关系的构件, 设在删除a之前已完成建模的建筑中所有的构件集合为Ω (不包括a),并设Ω中所有与a 有相交和扣减关系的构件集合为S。只有S中的每个构件s和a需要重新计算,Ω-S不受 影响。此时对每个s e S,用三维布尔运算结合工程量扣减计算规则求得s新的工程量(主 要计算a的影响),并删除a的工程量。(3)修改构件a类似(1),构件a也只会影响那些与它空间上相交并且规则上有扣减关系的构件, 设在修改a之前已完成建模的建筑中所有的构件集合为Ω (不包括a),并设Ω中所有与构 件a修改前或后有相交和扣减关系的构件集合为S (S为构件a修改前与其相交和扣减关系 的构件集合和修改后与其相交和扣减关系的构件集合的并集)。只有S中的每个构件S和a需要重新计算,Ω-S不受影响。此时对每个s e S,用三维布尔运算结合工程量扣减计算 规则重新求得s新的工程量(主要计算a的影响),并重新计算a的工程量后予以更新。显然,本发明通过增量式计算可大大减少计算量,从而提高工程量的计算效率,有 利于实现工程量实时计算目的。参见图2,示出本发明工程量计算方法的实施例一的流程图,主要包括以下步骤S201、提取已建模构件集合。提取的已建模构件集合中的每个已建模构件的工程量及该已建模构件集合的工 程量已经完成。已建模构件集合中为空,则已建模构件集合的工程量为0。S202、编辑构件,并识别已建模构件集合中与编辑构件存在相交和扣减关系的目 标构件子集合。每一构件建模视为编辑构件,其类型包括添加构件、删除构件与修改构件,其中的 修改构件也可以按照修改前添加构件、修改后删除构件两个步骤操作。而如何识别已建模 构件集合中哪些构件与编辑构件存在相交和扣减关系,可依照现有技术进行,在此不再赘 述。对于识别出来的目标构件构成目标构件子集合,后续工程量计算时只需要按照三 维布尔运算规则结合工程量扣减规则计算其中的每个目标构件的工程量,而无需计算其它 已建模构件的工程量,这就大大减少了计算量。S203、计算编辑构件的工程量,计算并更新目标构件子集合中每个目标构件的工
程量。当前编辑构件的工程量计算可依现有规则,而目标构件子集合每个目标构件的工 程量计算依照三维布尔运算规则结合工程量扣减规则计算,在此不再赘述。在这些相关构件的工程量计算完毕后,将相应的已建模构件集合的工程量予以更 新。若此时停止建模,只需通过对全部已建模构件工程量简单汇总就可以得到工程量的实 时或准实时计算效果。S204、判断建模是否结束,若是,进入步骤S205;若否,返回步骤S201。S205、汇总已建模构件集合中所有已建模构件的工程量。汇总已建模构件集合中所有已建模构件的工程量时,需对前述编辑构件本身的工 程量进行处理,具体采用如下方式。参见图3,示出编辑构件在不同类型下更新已建模构件集合的工程量时的处理流程。S301、判断编辑构件的种类。S302、若当前编辑构件为添加构件,加入当前编辑构件的工程量;S303、若当前编辑构件为删除构件,减去当前编辑构件的工程量;S304、若当前编辑构件为修改构件,更新当前编辑构件的工程量。建模结束后,依照编辑构件类型加入、减去或更新其工程量,然后对全部已建模构 件汇总后得到全部构件的几何工程量,进一步套用清单或者定额就可以得到最终需要的汇 总量,最终得到预决算结果。
以上对增量式工程量计算方法的基本模式进行了说明,它可以实现工程量实时或 准实时计算效果。它可以采用串行计算方式,也可以采用并行计算方式,其中串行方式仍存 在以下问题(1)计算过程分摊到用户的建模过程之中,如果建模和计算共享主线程,则计算过 程将干扰建模,很可能发生用户界面不响应的情况,影响用户体验;(2)不能利用现代CPU多核心特性;(3)没有考虑到计算拥堵的情况,考虑用户一次编辑多个构件,则这些构件的计算 会因为无法同时完成而发生拥堵情况。为此,本发明进一步提出并行增量式后台工程量计算的解决方案,进一步说明如 下。实施例二 并行增量式后台工程量计算方法并行增量式后台工程量计算方法具体包括以下要点(1)开启后台计算线程,利用一个或者多个线程来计算,这样和建模主线程互不干 扰,不影响用户体验;同时也能充分利用多核CPU。(2)引入带标记的垃圾回收机制,用一个单独的线程定期清理已删除的构件,避免 并发可能引入的错误情况(如多线程计算引用了已经被删除的内存空间导致内存错误)。(3)为简化操作并避免并行计算冲突,将构件修改拆分为两个步骤,即删除修改前 构件和添加修改后构件。考虑计算拥塞的情况,待计算的构件需要做三维布尔运算和几何量运算,可以把 构件和构件上的计算综合看成一个独立的计算任务,在拥塞的情况下多个待计算的任务自 然形成了计算队列,该队列里各个计算任务相互独立,但是计算结果有相关性。例如以下操 作(1)添加构件a ;(2)添加和构件a相交的构件b ;(3)删除构件a。显然第(3)步操作会导致第(2)步中b和a的扣减计算无效化。在串行增量式计 算的框架下,只有一个计算线程,因(1)、(2)、(3)顺序执行因果操作不会引入任何错误。但 考虑到多线程情况下,每个计算子线程的执行时机通常无法预测,尽管每次它们都是从计 算队列头部取任务,避免了很多乱序的情况,但依然可能产生(1)、(3)、(2)这样的乱序。此 时,可能发生两种错误(1)冗余计算。构件b计算了与a的相互扣减关系。(2)构件b访问构件a,而构件a已经被删除,可能导致非法的内存地址访问。对于前一种错误,本发明的应对策略是允许冗余计算,只是最后汇总前或者垃圾 收集阶段判断一次,剔除冗余的计算结果。这样保证了程序的简单性和可靠性。对于后一种错误,引入带标记的垃圾回收线程。即每次删除构件的时候,被删除的 构件不做真正的删除,只是打个标记表明需要删除;然后当计算队列为空时,挂起所有的计 算线程,并启动垃圾回收线程,由它来逐个检查构件的标记,对那些标记了的构件做真正的 删除工作,并清空内存。此外,为确定计算中编辑构件a后需要进行哪些计算,编辑构件a后需要先进行一定的准备工作,如果同时编辑了多个构件,则可能会使响应变慢,从而影响用户体验。为此, 在计算和编辑构件之间增加了一个额外的计算准备线程,专门执行计算之前的预备工作, 包括建立构件的三维实体模型、确定构件的影响关系,准备工作完成后把待计算的工作添 加入计算队列中。上述构思集中体现为多线程并行计算方式,以下进一步对各线程进行说明。参见图4,示出并行增量式工程量计算方法的多线程架构,包括线程调度程序401,在线程进入了就绪状态时,根据优先级决定该线程何时执行;建模主线程402,用于提取已建模构件集合、编辑构件并识别已建模构件集合中与 编辑构件存在相交和扣减关系的目标构件子集合;计算准备线程403,用于执行工程量计算之前的预备工作,包括建立构件的三维实 体模型、确定构件之间的影响关系、以及将待计算的工作添加入计算队列之中;工程量计算线程404,用于计算编辑构件的工程量,计算并更新目标构件子集合中 每个目标构件的工程量;带标记的垃圾回收线程405,用于标记目标删除构件并在计算队列为空时清理已 标记删除构件。在设置带标记的垃圾回收线程405的基础上,若发生因构件被删除而导致的非法 内存地址访问错误,可根据已标记删除构件排除错误;若汇总工程量前判断发生因构件被 删除而导致的冗余计算错误,根据相关已标记删除构件剔除冗余计算结果。由此,在线程调度程序401的调度下,建模主线程402、计算准备线程403、工程量 计算线程404、带标记的垃圾回收线程405并发运行,能更高效地提高系统资源的利用率和 吞吐量。通过以上方法,将原串行计算过程设计为全增量并行计算,在不影响用户操作体 验的前提下,大大提高了计算效率,最终的计算仅仅是构件结果的汇总过程,仅需要数秒即 可完成。本实施例的主要优点是(1)实时计算,建模完毕即可查看计算结果,用户无需任何等待时间;(2)后台多线程计算,充分利用了现代多核CPU的计算能力。本实施例通过增量式算法+后台多线程计算机制,充分利用了建模时间大于计算 时间的特性,边建模边计算,从而在现有多核CPU计算平台上做到实时计算。本发明的上述实施例解决了以往土建工程量计算中存在的计算速度缓慢慢的问 题,把以往数分钟到数小时的计算时间缩短到数秒钟以内(在大量不同配置个人电脑上测 量平均0 3秒钟),从而使得计算程序以实时或准实时的速度运行。顺便指出的是,另一种可能达到实时计算的方法是利用GPU通用计算平台。由于 GPU惊人的并行高性能计算能力,只要把运算尤其是几何体三维布尔运算迁移到GPU平台, 就有希望在传统计算方案下也做到实时计算。但是目前GPU平台一者计算速度远达不到工 程量实时计算的要求,二者高精度计算能力还有欠缺,三者价格高昂非一般人群可以负担, 要在实际产品中采用上述方案还有待时间考察。以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对 本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的
8普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改 进和润饰也应视为本发明的保护范围。
权利要求
1. 一种工程量计算方法,其特征在于,包括(10)提取已建模构件集合;(20)编辑构件,并识别已建模构件集合中与编辑构件存在相交和扣减关系的目标构件 子集合;(30)计算编辑构件的工程量,计算并更新目标构件子集合中每个目标构件的工程量;(40)判断建模是否结束,若是,进入步骤(10);若否,返回步骤(20);(50)汇总已建模构件集合中所有已建模构件的工程量。
2.根据权利要求1所述的工程量计算方法,其特征在于,编辑构件的类型为添加构件、 删除构件或修改构件。
3.根据权利要求2所述的工程量计算方法,其特征在于,修改构件按照添加修改前构 件、删除修改后构件两个步骤操作。
4.根据权利要求1、2或3所述的工程量计算方法,其特征在于,采用并行计算方式。
5.根据权利要求4所述的工程量计算方法,其特征在于,引入以下计算线程建模主线程,用于提取已建模构件集合、编辑构件并识别已建模构件集合中与编辑构 件存在相交和扣减关系的目标构件子集合;工程量计算线程,用于计算编辑构件的工程量,计算并更新目标构件子集合中每个目 标构件的工程量。
6.根据权利要求5所述的工程量计算方法,其特征在于,引入带标记的垃圾回收线程, 用于标记目标删除构件并在计算队列为空时清理已标记删除构件。
7.根据权利要求6所述的工程量计算方法,其特征在于,若发生因构件被删除而导致 的非法内存地址访问错误,根据已标记删除构件排除错误。
8.根据权利要求6所述的工程量计算方法,其特征在于,在步骤(50)之前,判断是否发 生因构件被删除而导致的冗余计算错误,若是,剔除冗余计算结果。
9.根据权利要求5所述的工程量计算方法,其特征在于,引入计算准备线程,用于执行 工程量计算之前的预备工作。
10.根据权利要求9所述的工程量计算方法,其特征在于,工程量计算之前的预备工作 包括建立构件的三维实体模型、确定构件之间的影响关系、以及将待计算的工作添加入计 算队列之中。
全文摘要
本发明公开一种工程量计算方法,包括(10)提取已建模构件集合;(20)编辑构件,并识别已建模构件集合中与编辑构件存在相交和扣减关系的目标构件子集合;(30)计算编辑构件的工程量,计算并更新目标构件子集合中每个目标构件的工程量;(40)判断建模是否结束,若是,进入步骤(10);若否,返回步骤(20);(50)汇总已建模构件集合中所有已建模构件的工程量。本发明采用增量式计算方法,建模的同时进行相关构件的工程量计算,从而将工程量计算时间摊薄至建模时间之中,有利于实现实时计算效果。
文档编号G06F17/50GK102004828SQ20101054608
公开日2011年4月6日 申请日期2010年11月15日 优先权日2010年11月15日
发明者余侠, 张鹏, 陈顺斌 申请人:成都鹏业软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1