APP下载

基于MATLAB的钢筋下料优化算法

2019-01-11漏家俊

建筑施工 2018年2期
关键词:数目长度钢筋

漏家俊

1.上海市基础工程集团有限公司 上海 200002;2.上海市非开挖建造工程技术研究中心 上海 200002

随着建筑业的热度不断减缓,建筑市场的竞争也日益加剧,利润空间的压缩导致不少建筑企业举步维艰。承建方一方面要具备雄厚的技术实力和经济实力,另一方面要有科学管理的能力,需要通过不断对地项目成本进行优化与控制以寻求最大限度的成本节约,确保整个工程的盈利目标[1]。钢筋作为建筑设计、施工和造价的重要组成部分,其造价占据整个项目造价的30%~40%[2],因此对于钢筋下料优化的研究能为企业创造巨大的利益。

针对钢筋优化下料研究较多有一维线性规划法、启发式的遗传算法、混合遗传算法、模拟退火算法等[3],其中后几种方法对钢筋优化人员专业化要求高,难于在项目实际应用过程中推广。而传统的人工优化下料方法受人为影响因素大,过程繁琐,难以保证能够十分有效地进行钢筋下料优化。

随着信息化时代的到来,计算机的应用面越来越广泛,本文建议通过采用现代化信息技术MATLAB辅助进行钢筋下料优化,通过简洁的编译实现优化过程,达到为企业节省钢筋损耗开支的目的。

1 数学模型

钢筋优化下料问题可以简单表述为:企业拥有原材为定尺长度(l)的钢筋一批,下料长度为a1、a2、…、an,钢筋对应下料数量分别为b1、b2、…、bn根;c(j,i)为针对单根原料分割方法中相应下料长度的数量;x1、x2、…、xn代表每一种分割方法所采用的次数。要求在满足钢筋下料需求的情况下,实现钢筋原材用料最省。

对于单根原料进行分割,枚举。为防止枚举遗漏,采用循环的方式列举出所有可行方案。首先对下料长度a1、a2、…、an从大到小进行排序,优先选取长的下料长度进行切割,同时便于后续设置约束条件。

原材料定尺长度为l,最多可以切割出:

其中,int为余数向下取整,因此ai的选择方法有0~int(l/ai)种选项,假设l=9,ai=2.3,那么就有(0,1,2,3)4种选择方式。假设a1对应的选择方式为c(j,1),ai对应c(j,i),an对应c(j,n)。

另外,要使得下料方法最优,必然切割所剩下的余料不得大于下料长度最小的那一段[4],即需要满足:

其中,矩阵A、矩阵X代表每一种分割方法对应的采用数目,矩阵b代表对应钢筋下料需求数目。

2 求解方法

针对一维线性钢筋下料问题,常用的方法是线性规划或整数规划,包括Excel规划求解[5]、LINGO求解、LINDO求解以及MATLAB求解。在调研及分析每种方法的实用性上,筛选出Excel求解、LINGO求解,以及MATLAB求解,分析求解效果如下。

2.1 Excel求解

采用Excel电子表格,其功能较为简单,在完成规划求解之前,必须手动列举出所有可行解。随着工程越来越复杂,当下料长度种类多且短时,枚举种类达上百种,因此列可行解的过程非常繁琐。同时该过程不具有通用性,在应对不同的实际问题时,表格需要不断地进行修改调整,因此表格法在数据量大时,难于胜任辅助下料工作。

2.2 LINGO求解

在LINGO中,我们不必确定具体的分割方案[6],分割方案可以由软件自动运行后得出,但是我们需要确定分割方案的数目,这个数目在列出具体的分割方案之前是不可知的,所以往往是赋予一个预估值,同样,预估值越小,软件进行求解的时间越短,而预估值越大,软件需要求解时间相应成几何倍数增长,如当x数目为15时,运行了5 h,仍未运行完毕,尽管在开始运行的3 min内,软件就给出了最优化的方案,但是出于严谨的考虑,在其他实际案例中,必须要等待程序完整运行完毕才能得出最优解,运行时间漫长。

2.3 MATLAB求解

在Excel以及LINGO的铺垫下,MATLAB可以很好地处理实际工程问题,其自带循环语句可以迅速列举出所有可行解,可用linprog语句进行线性规划,用intlinprog语句进行整数规划。最终得到满足工程实际要求的可行解。从时间上来看,MATLAB运行时间短,可以迅速给出最优解;从应对不同问题的程序修改上来看,很多数据都可以作为矩阵直接输入,只需要应对实际下料类型的数目进行相应的修改。因此,结合程序运行时间以及程序通用性考虑,提出以MATLAB来求解下料优化问题效果最佳。

3 实例分析

3.1 下料可行方案的确定

以实际的工程案例为例:现供应长为9 m的钢筋原材,需求下料长为2.3 m钢筋200根,1.9 m钢筋400根,1.3 m钢筋200根。在不考虑切割损耗的情况下,求解最佳钢筋下料方法,要求使用9 m钢筋原材最省。

因此,l=9,a1=2.3,a2=1.9,a3=1.3,通过程序运行可以得到表1。

表1 组合方式

表1中数据为从MATLAB工作区中直接导出数据。至此,对于单根原料分割方法的列举已经完成。

3.2 优化求解实例

针对该实际问题,设表格内深色部分数据为矩阵a,而矩阵a的转置矩阵即为矩阵A,矩阵b=[b1,b2,b3]T,其中:b1=b3=200,b2=400,而目标待求矩阵为X。

矩阵A如下:

矩阵A、矩阵X、矩阵b需要满足AX =b。

当满足公式时,必然可以求得所需求的最优化下料方法,将上述公式代入MATLAB自带的linprog函数后,可以获得矩阵X:x4=33.3,x6=66.7,x15=66.7。其余为0,总计需要使用钢筋原材165根。

矩阵X即为所求理想状态下最优解,但是实际上来说,采用的整料不可能出现小数,即代表当出现完美AX=b的时候所求最优解在实际情况中不存在。因此,只要满足原切割后每一种下料数目不少于需求数目即可。因此,对公式作出更改:AX≥b。

在满足该公式的情况下,在MATLAB中调用intlinprog函数进行整数规划后,可以获得矩阵X:x3=1,x4=31,x6=67,x8=2,x15=66。其余为0,总计需要使用钢筋原材167根,完成了对于最优解的探索,如表2所示。

表2中的每一行代表了每一种分割方法所对应的切割出下料多少根,以及对应的余料长度。最后一列代表了完成目标下料优化每一种分割方案所对应使用的次数,将最后一列求和便可完成下料优化。总计需要使用长9 m的原材167根。

表2 最终结果

4 结语

本文结合工程实际中钢筋下料优化问题,提出了一种切实可行且十分有效的求解方法,即通过MATLAB进行优化的钢筋下料办法。

针对超出定尺长度钢筋进行整料分割取剩余下料长度,然后列举出了单根原材料所有可行的切割方法,最后用整数规划来解决下料最优解。整体条理清晰,操作过程简单实用,并且便于项目现场使用,该方法对于一般情况下的实际钢筋下料问题都能适用,从而尽可能地提高原材料的利用率,进而节省企业成本。

猜你喜欢

数目长度钢筋
D10mm热轧带肋钢筋五切分生产工艺开发
移火柴
绳子的长度怎么算
我把一吨废钢筋搬成了三吨
1米的长度
爱的长度
截钢筋
长度单位
这批没收钢筋该如何处置
《哲对宁诺尔》方剂数目统计研究