复杂形态钢结构设计培训班

首页 非解构-公众号 惊喜!设计院实习两个月,竟成了码农!——小白攻城狮的代码升级之路

惊喜!设计院实习两个月,竟成了码农!——小白攻城狮的代码升级之路

小白攻城狮的代码升级之路

最近十几年人工智能以惊人的速度在发展, 取代了各种传统行业。让我感触最深的就是最贴近我们生活的几个行业领域:零售业被互联网商城冲击到商场里大部分都是餐厅和娱乐,人工智能机械臂淘汰了大部分纯靠体力劳动的生产线工人,已经试点的无人驾驶大巴让我们可以预测司机们的下岗时间,还有各种离我们生活较远的行业,比如士兵等等都被人工智取代带了很大一部分。那么我们结构工程师有多大的可能性被人工智能取代呢?答案大家都知道,肯定会被取代的,只不过是时间问题。因为现在工程师的很多工作都是机械性重复的,比如计算分析各种弯矩形变等等,其实大部分只是根据规范找公式,这种工作已经被各种软件取代很大一部分了,比如SAP2000,盈建科,Revit等等。现在之所以还需要很多手算是因为所有的软件都不够成熟,很多情况软件都识别不了所以会导致软件计算出错。那么当软件成熟到能够识别模型里所有杆件以及连接方式的那一天,明显就是一大批设计师下岗的时候。

小编才刚刚毕业,当然不想自己的职业生涯在短短几年以后就被人工智能给终结,过着领社会低保,做三和大神的日子。想来想去自救的办法就是学习敲代码。做结构师里会写代码的,编程师里会结构的,想必不会那么快就被淘汰了吧。学习代码,小编认为最难的就是入门,曾经大二虽然学过MATLAB,但是当时想着攻城狮哪需要写代码呢,就并没有怎么上心,那节课让小编对于代码的理解还没开始就已经结束了。小编在非解构小组实习的两个月里,总算感觉自己入了点代码的门,于是来分享一下心得。

01

零基础学代码

Python这个语言对新手还是非常友好的,用GitHub网站学习的话,从完全零基础到写出循环跑出完整的代码只需要一两天,之后就是建立一个个小目标,不断的学习去完成一个个小目标就行了。小编最开始的目标是:在建模软件里建立一个圆柱体,模拟风压提取数据,因为数据都是散点,画出散点图并网格化数据使数据都成整齐的行列,拉平圆柱体使之成为一个长方体,在长方体上随意输入一个坐标点计算出风压系数,最后用渐变色画出风压图。从小白到完成这个小目标大概需要两周的时间,学习成本还是很低的。结果如下:

(这是圆柱体模型和风压分析)

这种数据处理的任务没什么难度,但是大量数据的话,重新计算一个一个点并网格化他们就不能用简单的三个for循环,那样电脑会炸的,这里推荐一个关键字:isin。isin这个关键字代表判断是否在内并找出,这个关键字的运行效率还是很高的。另外对于数据的处理,小编用的是pandas和numpy这两个包, dataframe和array这两种数据格式用起来很舒服。

02

曲线拟合

小编的第二个小目标就有一点与实际接轨了,是建模一个屋顶斜坡,导出数据并用画出风压散点图。对于负风压的那部分,找出极值,对这一部分进行曲线拟合,拟合出的函数可以通过输入x得出风压最低值。图片结果如下:

(这是房屋模型和要分析的坡面)

对于曲线拟合,小编推荐scipy这个包,虽然包找到了,但是求出拟合函数还是有一点烦的,具体代码如下:

(这是一段求三次拟合的代码)

03

Grasshopper

对于数据处理,到这里暂时够用了,接下来小编开始学习rhino里的grasshopper。小目标是可以自己写出参数化建模的电池,大目标是自己写出rhino与SAP2000的接口电池。

第一步学会参数化建模,先熟悉grasshopper里自带的各种电池,画出一个半圆形的球,可以通过number slider控制半径,竖向分割线以及横向分割线, 并且每四个点之间建面。前三个小目标非常简单,熟悉grasshopper里各种电池就好了,大概一两天就可以,学习成本很低。但是每相邻四点之间建面却有点难度,这个需要自己写电池,需要熟悉grasshopper里面独有的数据结构datatree, 也就是数据树。了解datatree以后可以根据datatree里的branch对数据进行排列组合,找出相邻的4个点并对其进行顺时针或逆时针排列。结果长这样:

(可以看见圆面并不是单纯的半球面, 四点之间的面是平面,这也是建筑和结构所需要的面)

图中的grasshopper里只有一个电池,但这不是真正的电池,只是小编把所有的步骤打包成了一个cluster而已。所有的步骤里最重要的就是处理并且排列点了。Grasshopper里有四点建面的电池叫 4point surface。那么小编需要通过编程提取出4组点的list,使这四组点输入四点建面电池以后能够按照顺时针或者逆时针排列。具体方法如下:

(这是自己写的电池和grasshopper四点建面电池的连接)

(这是点的排列的代码)

从学习grasshopper里的数据结构到写出排列数据的电池大概需要一周左右的时间,学习成本还算可以接受。其实grasshopper里也有网格化建面的电池叫做mesh,但是这个电池经常出错,远远没有自己弄懂datatree以后写出的电池那么好用,毕竟不同情况自己可以写出不同的排列方式,而mesh电池明显没有那么万能。

接下来小编又自己做了几个电池练练手,加深对datatree的理解和运用, 比如在任意长方形内分割成边长为n的正方形们(n用number slider做成可以自己调节的参数),并对每一个正方形建面,边上无法形成正方形的地方也进行四点建面。结果如图:

(这是cluster内的具体流程)

但是总是把步骤打包成cluster自我欺骗做了个电池太过弟弟,于是小编开始学习怎么真正做出能够在grasshopper里显示并且调用的电池(类似于上图一直在用的4point surface那种电池)。这个时候小编发现python语言没法写, 于是小编又学习了c#。因为有一点python的基础,c#语言通过GitHub网站学了2天就可以开始写代码了(语言的思路都是差不多的, 大部分差异都在格式上)。

小编首先写了一个叫做spacial spiral的电池,通过number slider输入原点,向量(spiral朝哪个方向延伸),半径,长度和螺旋的数量来画一个三维螺旋,结果如图:

(这个电池就真正的加到了grasshopper里了, 目前虽然是curve这一栏, 但是也可以新建属于自己的一栏)

(这是电池运行的结果, 还蛮理想)

04

Grasshopper to SAP2000

熟悉了怎么写入电池以后,小编就冲向了自己的大目标:写出rhino和sap2000的接口电池,在rhino里建模,一键导入sap2000。毕竟小编受够了在sap2000里面究极低效的建模。具体过程还是很复杂的,可以参考非解构里的另外一篇文章,有详细讲解如何写接口电池。写这种接口电池的大致思路就是:我们需要把模型从grasshopper拆解成sap2000需要的东西, 比如按顺序排列的点, 这样才可以通过这些有序的点写出sap2000的面,再导入sap2000。小编做的这个电池是从sap2000里导入点、线、面。点、线都很简单,但是面就复杂了。如果电池直接输入surface的话,没有办法得到边线。但是如果导入brep的话,很难判断每个面是不是平的,因为通过grasshopper里的电池得出的brep face有很大的问题,只要是三角形的面他都会给你一个四边形,它的内部代码还是有待改善。小编找到了一个东西叫做brep loop。这个关键字会输出一个loop list,每个面都有一个loop。因为loop可以转化为一条polyline,那么我们就可以用关键字ifplanar判断这条线是不是在同一平面上。这样非平面的面就可以报错了。具体实例如下:

(完成电池以后的操作实例)

到这里,最基本的rhino-SAP2000接口已经写出来了,当然还剩无尽的优化等着去做,比如输入荷载,连接方式,材料属性等等。从一开始接触grasshopper到写出接口电池大概需要一个月左右的时间,非常适合暑假里在家无聊的同学去做做这类小研究。

05

Class

小编的最后一个小目标是用c#语言写出一个链表(chain table)的class, 类似于python里面需要下载的包。以后需要用到链表数据结构的时候,直接调用自己写的class就行啦。想想自己用自己写的关键字去写代码,就很鸡冻呢。这种代码难的地方在于需要把自己的思维转变成电脑的思维,因为对于数据的排列,电脑并不懂。小编认为最难的一段代码是给链表赋予index,代码如下:

(public T this[int index] 这一段就是赋予index了,对于小编这种小白来说,理解起来真的困难)

这个class可以实现很多list比较难以实现的功能。基本的关键字有增、删、改、查这四个。因为他是chaintable,每个block都有next指向下一个block,所以直接console.writeline无法读取value。于是小编又写了个output关键字,用来直接读取所有block的值。另外因为输入值为T, 所以任何格式的输入都支持, 不管是int,float,string都可以。这个class还具有chaintable的属性,见缝插针的数据储存方式非常节约内存。总之小编对自己的这个final project还是比较满意的。

小编暑假两个月的实习到这里就结束了,非常感谢非解构小组里的几位大神,对小编耐心的教导,在小编很多简单的问题也能卡几个小时的时候,丝毫没有觉得小编蠢钝如猪,让小编学到了海量的课外知识。对比大学里整天计算bending moment的结构狗来说,换一种思路写写代码真的非常的有趣。主要是自己写出能实际运用的电池和class以后真的很有成就感。所以大家以后有长假的时候除了吃鸡撸啊撸是不是又多了一种活动呢^ ^

扫码关注我们

猜你喜欢

当结构设计遇到遗传算法,于是它学会了自己进化!

如何教会房子学会自己设计自己的基础——当结构设计遇到遗传算法(二)

结构不只有眼前的CAD,还有python和秀发!

用袋鼠让犀牛(Rhinoceros)跳起来!

Python爬虫实战——从太平洋地震工程研究中心数据库自动下载地震波时程

制作你的第一个grasshopper电池

“转自:非解构-公众号”上海结构设计圈仅限在上海从事结构设计的朋友们。

本文来自网络,不代表钢构人的立场,转载请注明出处。搜索工程类文章,就用钢构人网站。 https://www.ganggouren.com/2019/08/5cdcad62dd/
上一篇
下一篇

作者: ganggouren

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

17717621528

在线咨询: QQ交谈

邮箱: 1356745727@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部