《1 引言》

1 引言

工程造价估算在项目管理中十分重要, 它是工程项目可行性研究的基础, 也是招投标制定标底的依据, 其准确与否直接影响项目的投资决策。它是利用已建类似工程的造价资料和市场变化的信息, 对拟建工程投资费用所做的一种预先估计或预测。对于这类问题, 近十多年来, 人们主要采用专家系统 (ES) 、基于案例推理 (CBR) 、计算机模拟技术和人工神经网络 (ANN) 的方法予以解决。人工神经网络与前三种方法相比在知识获取、并行推理、适应性学习、容错能力等方面显示出明显的优越性, 在经济建模中也日益受到重视。

笔者针对建筑工程中的建筑造价问题, 提出基于神经网络的造价预测方法。通过转换将实际问题中的建筑物的各项特征指标归一化为神经网络容易处理的变量, 通过计算, 将资料样本中的非线性关系转化到神经网络的结构和连接权中。然后通过权重分析, 剔除多余和不合理的变量, 最终建立稳定有效的网络, 以对新的输入进行快速有效的估算。

《2 BP网络预测模型的建立》

2 BP网络预测模型的建立

由于含有隐层的BP网络可以逼近任意非线性函数, 而且在实际的预测研究中主要考虑的神经网络是含有一个隐层的BP网络, 所以选用的网络结构为单隐层的BP神经网络。

《2.1输入向量的归一化》

2.1输入向量的归一化

资料来源于文献[1]。选取其单项工程概况的全部指标作为输入变量。根据每个变量所有输入的可能性, 赋予其一个初始值。指标集为{建筑面积, 层数, 结构, 檐高, 地基, 基础, 楼板, 墙体, 屋盖, 地面, 楼面, 屋面, 天棚, 内粉, 外粉, 门窗, 建筑其他特征, 卫生标准, 采暖通风, 线路照明}, 由20个变量组成。

由于各个变量代表不同的物理量, 它们的取值范围可能差别很大, 而BP网络要求的输入范围一般在[0, 1], 所以在将数据交给网络进行训练之前, 应将变量归一化为有效范围的数值。

在20个变量中, 除了第1, 2, 4个指标为实数, 其他全为文字符号, 因此需要使用S/D将其转化为网络可以识别的数值。S/D变化是指从符号到数值的变换, 即将某一字段的值转化为适当的[0, 1]之间的数值, 变化规则应根据资料中字段的特点、要获取的知识与神经网络的结构来确定。根据不同的指标, 分别采用以下2种变化规则:

1) 数值型字段。如建筑面积、层数、檐高, 其值在某一区间内, 在加载到神经网络前应归一化, 以完成从该区间到[0, 1]区间的映像, 通常可取线性映像:

y=(x-a)/(b-a)(1)

式中, x为一记录中该字段的值;a为数据库中该字段取值的最小值;b为最大值;y为归一化后的取值。

2) 多值有序型。如结构指标中具体可分为框剪和砖混, 一般情况下框剪比砖混造价要高, 因此它们之间可按造价做一个排列。有序排列, 可以正序 (从小到大) , 亦可倒序 (从大到小) 。这里采取以下规则

y=x/(a+1)(2)

式中, a为值的个数;x为各个值在排序中的序号。采用以上变换规则对各变量进行归一化预处理, 部分结果如表1所示。

表1 归一化的部分样本数值

Table 1 Table of normalized numeric values of part of the samples

《表1》


变量
样本1样本2样本3样本4样本5样本6样本7

建筑面积
0.43580.22550.13571.00000.80240.15000.8856

层数
1.00001.00000.28570.52380.14290.28570.3809

檐高
0.99621.00000.23560.67820.24140.24330.5441

地基
0.75000.75000.25000.50000.75000.25000.7500

基础
0.37500.50000.62500.75000.87500.12500.7500

楼板
0.33330.66670.66670.66670.66670.66670.3333

墙体
0.40000.80000.20000.40000.60000.20000.2000

屋盖
0.50000.25000.25000.50000.50000.25000.5000

楼面
0.20000.20000.60000.60000.60000.40000.6000

屋面
0.50000.75000.75000.50000.50000.50000.5000

内粉
0.66670.33330.66670.66670.66670.33330.6667

门窗
0.66670.66670.66670.33330.33330.33330.6667

卫生标准
0.50000.50000.75000.25000.25000.25000.7500

采暖通风
0.25000.25000.25000.75000.75000.25000.7500

《2.2神经网络的学习》

2.2神经网络的学习

Kolmogorow理论已经证明经过充分训练的3层BP网络可以逼近任意函数[2], 所以设网络结构为多输入、单隐层、单输出。一般情况下, 选择Sigmoid函数为传递函数, 反对称函数比不对称函数好, 其中最常用的反对称函数是双曲正切, 即

φ(x)=atanh(bx)=a×1-exp(-bx)1+exp(-bx)=2a1+exp(-bx)-a(3)

隐层神经元个数目前还没有公认理想的计算方法。这里采用的是一种经验的估计值, 即神经元的个数为输入变量个数的2倍。实例中输入变量有20个, 所以隐层神经元的个数取40个。

输出层使用线性函数, 线性的输出层保证了网络的输出具有-1到1之间的范围。同时, 具有线性输出单元的BP网络按最小二次方误差学习时, 等价于寻找一个从输入到网络最后一个隐层的变换, 此变换使一个定义在网络最后一个隐层输出空间内的网络分离度函数达到最大, 起到判别分析的作用。计算公式如下:

j个隐单元的输入为

hj=αj0+k=1pαjkxk(4)

j个隐单元的输出为

F(hj)=2a1+exp(-bhj)-a(5)

网络输出为

G(F(hj))=G(β0+j=1qF(hj)βj)(6)

式中, p为输入变量的个数;αjk (k=1, 2, …, p) 为输入层第K个节点到隐层第j个节点的连接权重;βj (j=1, 2, …, q) 为隐层第j个节点到输出层的连接权重。β0αj0为常数单元。

《2.3网络的优化》

2.3网络的优化

实际用来训练网络的样本个数是有限的, 如果要求网络能对实际问题做出有效的预测, 则应有足够的样本对网络进行训练。根据文献[3]和文献[4]的计算可知, 训练网络所要求的样本个数与输入变量的个数有直接关系。因此, 如果实际所能得到的样本个数有限, 不能满足充分训练网络的需要时, 就要对网络的输入变量进行选择。

在经济建模和预测研究中, 变量选择是一项重要的步骤, 也面临着许多困难。对于线性问题, 有比较成熟的方法, 如逐步回归等。但是, 在非线性条件下, 不能简单套用线性情况下的方法。目前, 尚无针对非线性模型变量选择的实用方法, 大多以模型选择来达到选取变量的目的。若所设定模型偏离真实模型形式, 由于同一变量在不同模型中表现形式有异, 该方法就有误选的可能。对于非线性模型而言, 变量选择的好坏对所建立模型的性能影响极大。即使在模型形式正确设定的情况下, 不合理变量的引入将无法保证模型的可靠性及其预测效果, 导致建模和预测的失败。

基于文献[5][6], 笔者采用贡献分析法筛选输入变量, 计算公式为

Ci=j=1qvjuji(7)

式中, uji (j=1, …, q;i=1, …, p) 表示第i个输入对隐层节点j的贡献, vj (j-1, …, q) 表示第j个隐节点对输出的贡献。

yj=G (F (hj) ) , 则式 (7) 中vj, uji按下式计算:

vj=cov(F(hj),yj)var(yj)βjuji=cov(hj,x)var(hj)αji

《3 实例分析》

3 实例分析

针对建筑工程造价问题, 根据以上分析, 借助MatLab 6.5建立网络。按文献[7], 在Matlab 6.5中采用TRAINLM函数作为训练函数, 该函数利用Levenberg-Marquardt规则训练前向网络, 具体公式同式 (3) , 在Matlab 6.5中a取1, b取2。学习函数使用LEARNGD, 该学习函数利用动量规则改进的BP算法, 其权值的变化等于上次权值的变化和这次由于BP准则引起的变化之和。这样可以将动量加到BP的学习中去, 上一次权值变化的影响可由动量常数来调整。性能函数选MSE。

将20组经过归一化处理的资料作为输入变量交由网络处理。经过58步训练, 网络均方误差达到3.54058×10-14

根据训练得到的输入层到隐层的权重和公式 (5) 计算各输入变量对输出的贡献, 结果见表2。

将变量按对输出的贡献由小到大排列, 将贡献最小的变量删除后, 用测试数据检验网络的泛化能力, 发现将第15个变量“外粉”删除后, 网络的泛化误差由20.1 %降为7.8 %。每次删除贡献最小的一个变量直到网络的泛化误差下降幅度不大。

表2 有效输出贡献表

Table 2 Table of effective contribution to outputs

《表2》


建筑面积
层数檐高基础楼板采暖通风屋盖

0.0801
0.06150.05690.03560.03380.02560.0469

地基
屋面内粉门窗楼面卫生标准墙体

0.0516
0.04080.05160.03560.03470.04440.0517

经过对不合适变量的消除, 去掉了5个变量, 得到最终网络。

将2个测试资料利用训练好的网络处理, 得到网络预测的结果, 预测值和实际值分别为[2.8082, 9.6124]和[2.8910, 8.984], 平均误差为4.6 %。

《4 结语》

4 结语

笔者利用BP神经网络建立模型, 处理20个建筑造价资料, 利用Matlab 6.5对网络进行了训练, 并且将权重分析法应用于神经网络模型的变量选择过程, 通过分析输入变量对输出的贡献大小, 剔除不合理变量及分支, 达到合理建模、快速报价的目的。在利用网络对测试资料预测后, 结果证实此方法的有效性。