引言
[#Algorithm optimization#]系列是一个进阶系列,这个系列讲的是在grasshopper里如何使用各种智能算法辅助我们进行设计。希望通过这些简单的介绍,能为设计从业者和爱好者带来些灵感。
➤ 正式内容
上次就说到Octopus可以进行多个目标的优化,不仅如此Octopus还能通过布尔值设置约束条件。我看官方给的案例不错,今天就讲解这个案例。
蓝白色的是风车 黄白色的是城镇 红色的是禁止区域
现在要做的目标优化有三点:
(1)将风车放置到地形的最高处。(地形的高度变化已经用颜色渐变表示,其中最高点是绿色锥体处)
(2)将风车放到离城镇最近的地方。
(3)风车不许放到禁止区域内。
可以很明显看到,做这个设计时不可能同时最大化的满足前两点,必定要有所取舍,所以就要调用今天的主角:Octopus。
还记得上次说过的#遗传算法#的逻辑吗?首先要有控制表现型的基因值,显然这里的基因值控制的就是风车在#地形#上的位置。
同样要把作为表现型的数值输入至Octopus,可能细心的人发现了,这里与galapagos有几点不同:
(1)将输出的风车所处高度变为负值,因为Octopus采取坐标轴的形式表达,所以总是显示最小值(坐标轴原点),求最大值时将其变为负值有利于图表表达。
(2)因为Octopus采用坐标轴显示,所以可以加上文字显示在坐标轴上。
(3)这里涉及多个目标条件优化,我们只需将两个目标条件组合成一组接入Octopus即可。
(4)Octopus有个P输入端是可以接入现有的表现型,PS输出端可以输出你所得到的解决方案与输入方案的变化值。
接下来讲如何设定约束条件。
相信大家到投影点到平面上及判断点是否在禁止区域内都能看懂。后面的电池可能要解释一下。因为Point In Cruve这一电池在点在曲线外时输出值为0,点在曲线内时输出值为2。
而布尔值TURE=1、FLASE=0。Gate Not可将输入的布尔值执行否定处理,所以输入值为FLASE时将其否定后输出的布尔值就是TRUE。将输出的布尔值接入Octopus即完成了约束条件的设置。
可算是把这个部分的电池图讲完了,然后双击Octopus就可以打开运算界面了。
打开运算器,点击start。
然后中间的坐标轴就会生成若干个小方块,不断地在运算。
运算一段时间后的成果,有必要给大家解释一下这个图的意义:
图里的每一个小方块都代表着一种解决方案,还记得上文提到的把高度变为负值的操作吗。
通过那个操作,使得坐标轴原点就是同时最大化满足那两个条件的位置。而我们最后得到的这条曲线在逼近坐标轴原点,我们就可以在曲线中间段去选取合适的方案。
点击你看中的小方块就可以查看其相应的解决方案,也可以标记它然后继续运算看有没有更合适的方案。
这种两者相矛盾的目标条件靠人的计算显然非常花时间,在我们的设计中常遇到这种设计要求,学会Octopus会对设计起到很大的辅助作用。前文也说到了Octopus的另一个优点在于其支持炫酷的图表表达。(如下图)
这种图表表达的信息和上文那种是一致的,点击左上的AxeView后选择MutiAxeViewOn即可以这种形式显示。
还可以直接以表现型显示,然后标记你想要的解决方案。
本文标题图片就是以这种方式表达的。
本期分享接近尾声,不知道各位有没有发现最后得到的图和文章开头的图差别在哪,其实就是目标条件数量不同,这个案例的目标条件数是两个,文章开头的图目标条件有五个。相信大家读懂这个案例后也能知道目标条件更多时应如何连接电池图。
评论2