惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
O
OpenAI News
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
K
Kaspersky official blog
Security Latest
Security Latest
T
Tailwind CSS Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
N
News and Events Feed by Topic
aimingoo的专栏
aimingoo的专栏
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
爱范儿
爱范儿
宝玉的分享
宝玉的分享
腾讯CDC
H
Heimdal Security Blog
Webroot Blog
Webroot Blog
AI
AI
WordPress大学
WordPress大学
Recorded Future
Recorded Future
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
C
Check Point Blog
TaoSecurity Blog
TaoSecurity Blog
Cisco Talos Blog
Cisco Talos Blog
The Cloudflare Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - Franky
云风的 BLOG
云风的 BLOG

机核

游戏性能旗舰最强之选,一加 Ace 6 至尊版国补到手价2999元起 6元钱自己更换电动车刹车线 《生化危机9:安魂曲》编剧Haris Orkin专访 摸金游戏?音乐游戏!暗区新赛季这把能弹的琴有何来历? 好评国产武侠SRPG《息风谷战略》免费DLC现已推出 | 机核 GCORES 碎片 《生化危机:安魂曲》将于5月实装首个免费更新内容 | 机核 GCORES 新锐东方游戏,谱写世界新章! 沉浸式恋爱视觉小说游戏《心象演算》免费试玩版现已正式上线 | 机核 GCORES 互动影游《代号三国:龙起》上线!穿越三国与曹操并肩、与佳人同行、与权谋博弈! 《老头收集梦想生活》,游戏酒桌会6,录音笔VOL.689 | 机核 GCORES 破界·共生——《白日梦:无限世界》五大核心游戏特点解析 价格已到史低,锐龙5 9600X/锐龙7 9700X正适合抄底 时间循环之旅即刻启程!《归环》一周目测试今日开启 热门在线韩游变魂游,洛奇衍生作能否打破“花瓶”魔咒? LG UltraGear evo 全新高端显示器系列:当“5K”遇见“AI”,不止强大,更懂热爱 反套路三国互动影游《代号三国:龙起》今日上线! 愿望单登记人数突破10万!备受瞩目的“女儿养成游戏” 《梦幻魔法公主》今日于Steam平台上线!限时八折优惠中 《黑神话:悟空》全球音乐会2026巡演将于4月29日12时开票 | 机核 GCORES “Snowguelike”生存肉鸽挖矿新作《蛙穿雪境》公布发售日期,5月7日正式上线 | 机核 GCORES 重塑移动办公、AI创作新境!全新华硕灵耀Air系列、ProArt 骁龙版震撼首发,创芯未来 均分88:《Saros》媒体评分汇总 | 机核 GCORES 上海烛龙公布合作遗迹探险游戏《吉时已到》首支预告片 | 机核 GCORES 首个独立游戏《萝薇日记》已上线Steam! 烛龙新IP《吉时已到》首曝,打造国内首款中式合作遗迹探险游戏 喜加一:《暗黑破坏神Ⅳ》国服现已开启限时免费领取本体活动 | 机核 GCORES 新版《生化危机》电影定于9月18日上映,官方网站现已上线 | 机核 GCORES 《冲就完事模拟器2》“星球大战”联动DLC正式宣布 | 机核 GCORES SteamController将于5月4日发售,售价99美元 | 机核 GCORES 事已至此,内存这么用也算省钱了,“2+1”非对称双通道应用实测 505游戏母公司现已收购《明末:渊虚之羽》IP | 机核 GCORES 基石 手动杂谈12|格斗游戏也能讲好故事 | 机核 GCORES I Love You Mr Snowball 我的向日葵小姐 会比GTA6先发售吗?最硬核的生存游戏《DAYZ》要推新DLC了 周记02:在2026遇到新怪谈 什么硬件,能让游戏Loading界面快速消失? | 机核 GCORES GadioSpec《百年风云世界杯》免费试听集 | 机核 GCORES 百年风云世界杯Vol.1丨足球崛起 | 机核 GCORES 100年前,一群人提前替我们经历了AI恐惧 | 机核 GCORES 《呼啸山庄》2026 ——一辆当代艺术的大卡车冲撞了我的大脑 手游《天穗之咲稻姬:日之香巡灵传》宣布将于7月27日停服 | 机核 GCORES 集结梦之队,征战世界杯,《最佳球会ONLINE》上线Steam 山水绝景随心拼 休闲建造游戏《千里山河录》Steam商店页公开 巫师帽、法袍、魔杖,为什么它们是影视、游戏里的法师必备三件套? 《无鞘信使》-第一章 复古风自动战斗肉鸽《终结之终结》Steam商店页面现已上线 电脑里有一款不破不立的MMO,录音笔VOL.688 | 机核 GCORES 《生化危机》30周年纪念周边发售,这次是真的“保护伞” 可靠耐用+AI全能,惠普战66 2025锐龙版深度体验 《时之书:无尽终章》关卡“大航海时代”全球首次公开 经典名作《乌龙派出所》改编经营模拟游戏《乌龙派出所~阿两的商店街物语~》正式宣布支持简体中文 明日开冲,解锁反套路三国互动影游《代号三国:龙起》即将上线 独立游戏《这是我的宝藏!》已发售~ 降低难度不是唯一解,无压力死亡也是好体验 Netflix官宣新片《普通人》:讲述韩国现代史上的权力风暴 《生化危机:安魂曲》全球销量现已突破700万份 《绝地鸭卫》PC版5月15日正式发售 亡妻回忆录?女性向情感叙事游戏《S-mail》现已正式发售 全新酷黑风格,酷睿Ultra 200S PLUS的高性价比搭档!七彩虹BATTLE-AX B860M-PLUS S WIFI7 V20 超级黑刃主板测评 胖狗 索尼发布了港台地区PS5产品价格调整公告,将于5月1日起实施 二次元怪猎+性感美女!《碧蓝幻想:无尽黄昏》开启Beta公测 这款怪谈类型中式恐怖游戏居然更新了?! 《百日战纪 -最终防卫学园-》改编漫画将于今年冬季开启连载 《如被附身,请致电我们》:匈牙利黑色幽默恐怖小说 《竹屿山房杂部卷五》(译文) 大树 超越引擎 摄影分享丨四月 碎片杂记vol.72 当老式FPS与老式动画技术碰撞出新时代的火花—《神探杰克鼠》 想做独游,如何避免首个项目就褒姒? 在线多人动作游戏《OCTOPinbs》将于5月12日上线Steam! 《酒鬼女神的酒诡》确定将于2026年登陆Steam 《CRYMELIGHT》将于11月5日(周四)正式发售!4月25日开始预购! 钢铁国度MKI部落Evolution,蛮兵部分 【钢铁国度】部落-Primal MK I,蛮兵部分 这是一个高中生用ai跑出来的作品,我自称他为物理神话 钢铁国度MKI部落Metamorphosis,蛮兵部分上 钢铁国度MKI部落Metamorphosis,蛮兵部分下 INDIE Live Expo于4月25日举办:首发9款新作,超200款独立游戏亮相 暗黑卡牌策略新作《魔忌:穷鼠啮狸》发布全新中文试玩版和发售预告片,4月30日正式上线在即 战锤40K长篇小说:变节者・苦难主宰(三)(全书完) 战锤40K长篇小说:变节者・苦难主宰(二) 战锤40K长篇小说:变节者・苦难主宰(一) 英语语言学习丨短语专题1:短语的特点 唯一的EVE战争 【少前同人】【M200】战术人形会梦见音乐会吗 【昏迷3】即将发售,前作主角悉数到场!“恶灵”宋老师化身可操控角色 业内人士:游戏公司“十有八九”使用生成式AI,包括卡普空 欢庆一周年:《光与影:33号远征队》全新纪念艺术图、超值折扣与免费更新同步上线 才刚刚开始呢 【抽奖】《星际卡车司机》推出免费大型更新,四折平史低折扣进行中 四人合作FPS游戏《佣兵猎手》抢先体验重大更新 1 现已上线 Raw Fury新作《深馅地牢 Deep Dish Dungeon》将于今秋加入 XGP 塔防幸存者游戏《魔怪来袭》推出首个 DLC 《饿狼传说:群狼之城》1周年纪念!新DLC“沃尔夫冈·克劳萨”今日参战 猫狗相伴 欢乐闯关 双人合作平台跳跃游戏《猫狗同行》上线Steam商店页 《同行:月球逃脱》(Together: Moon Escape)上线将于明日上线Steam
关于“参数化建筑”的一些事情(三)
YQBelmont贲 · 2022-03-12 · via 机核

欢迎来到——遗传算法实操篇。

不知道这里在发生什么的朋友,请前往前两篇文章:

上一次我们大体地总结抽象了一下典型的人类做设计的流程,并且尝试着论证了其中不同步骤能被现有数字化工具代替的可行性。

这次该说到实操了,笔者准备了一个工作中真实遇到的例子。本来是想理论部分尽可能的精简,更多注重于实际上手操作。然而后来意识到,过于精简的理论,会让这次实践变成是无脑的“看说明书跟着做”。于是我决定任性滴扩充本篇的篇幅,理论实践一把抓。(信息量绝对有保障的一篇……)

本篇内容提要:

  • 首先解释清楚遗传算法是个啥。

  • 然后一同发现一个将遗传算法用在设计优化上的方法论。

  • 最后一起实践一个小案例。

“一笔带过”的理论:

遗传算法是一种被进化论启发的,可以从海量可能性中快速搜索到近似最优解的算法。旨在通过模拟生物进化繁衍的过程,不断优胜劣汰迫使种群进化,以便最终获得近似最优个体。

人话:

举例来说。你想要一个比世界上所有香蕉都甜的香蕉品种。但你完全搞不懂香蕉的基因里面哪几对碱基是控制甜度的,能做的只有买来市面上所有香蕉的种子,种了下去。

第一年收获了之后逐个品尝,然后把不甜的扔了,甜的品种杂交一下,再种。

第二年同样扔掉不甜的,甜的杂交。

时不时地你还会想点招让香蕉们随机变异一下增加基因多样性碰碰运气。

就这样过去了好几万年。 ('ω' )

你的棚子里面的香蕉越来越甜越来越甜。直到你觉得好了没时间继续种了,就这样吧。然后收了当时在你棚子里面最甜的那个香蕉树。

搞定。

只不过我们是在电脑里,以极快的速度来做这件事情。

其实遗传算法大体就是这么个事儿~

然后我们来拆分一下这个例子,这个香蕉进化的过程里头,人要做的事情有这么几个:

  1. 培育香蕉直到结出果实。

  2. 尝香蕉果实甜不甜。

  3. 杂交,并进行下一次播种。

  4. 决定什么时候停下。

还记得我们上篇文章中提到的,设计的大体步骤分解吗?

解读任务书和解读场地 出第一个方案,元设计 评价方案 改方案 定方案

上文关于香蕉的1、2和4步的核心动作分别对应着“生成/修改方案”“评价方案”。那么差的只是3(杂交,并进行下一次播种 )

而这3,便是今天要说的遗传算法

我们得稍微解释一下遗传算法的内部运行方式。如开篇提到,它是一种模仿生物优胜劣汰进化的算法,所以首先我们需要提炼一下生物进化的过程是怎样。

在进化论这个提法里面,生物的进化的基本要求有俩:

  1. 足够的个体数量形成种群保证基因多样性。

  2. 种群内部可以繁殖,代代传递基因库。

(人得多,而且不能是近亲,并且得男女搭配。)

基因,众所周知,我们发育的过程基本上就是“RNA把DNA转录(翻译)成蛋白质”的过程。DNA一开始是一堆编码,没翻译之前谁也看不懂是什么内容(种子看不出果实甜不甜)。然后RNA出现了,把它翻译成了有用的蛋白质,蛋白质又次序井井有条地发挥着作用,发育成了一个完整的生物,最后开花结果(香蕉)。至此我们才知道哇塞,原来这条基因(基因型)的表现型是这样的。

(人话:基因是个密码,只要它确定了,最后的生物大体形态就确定了。工蜂和蜂后这种,会后天根据外在环境不同发育的,我们就先不理它了。但!如果不翻译成生物的话,基因谁也看不懂,更无从得知这条基因发育成的生物成体是否满足我们的需求。

进化是一个宏观上渐进的过程(先别说突变够乱的了已经),这种改变是在种群尺度上发生的,让过程中整个种群的某一个特征变得越来越明显与普遍。它的动力是外在环境(自然选择),让那些不太适应环境的个体找不到对象或者早早夭折,没什么机会繁衍后代传递自己的基因;而那些很适应的,就可以很容易找到对象而且很长寿,生一大堆孩子把自己的基因传递下去。

这里有个很有趣的例子,不一定是真,但用来解释进化的现象很恰当:

有个理论说,母爱其实是进化出来的。一开始母亲都是要怀胎远长于10个月才分娩,如此婴儿发育的更健壮,夭折的概率就更小。可当人类开始直立行走,产道变窄,体积太大的婴儿已经无法出生了,就导致大家都在早产。可怀胎十月的孩子幼年脆弱之极,只有那些真正悉心呵护自己孩子的母亲们,得以把孩子养大,她们的基因才得以传下来。而她们的基因里便有着“母爱”这一片段。

基因中没有母爱行为的母亲的孩子都夭折了,而有母爱的母亲们得以把孩子养大,母爱的基因也得以继续在孩子们身上流传下去。如此万年,如今不只所有的母亲都有母爱了,甚至所有的人类面对婴儿都有照顾保护的强烈冲动。

所以进化的本质其实说白了就是:代表适应环境的特性的基因会传递下去,同时环境不喜欢的那些特性的基因呢,就没什么机会把自己传递下去了。而且环境不需要知道到底是哪条基因决定的甜不甜(比如香蕉),它只需要把不甜的香蕉搞死,或者让它孤独终老即可,结果就会导致:只有带有比较甜的基因的香蕉有机会繁殖,然后整个香蕉种群越来越甜。

你看,这种方法的好处是非常普适,因为只要:

  1. 生物的特性是由基因决定的

  2. 他们每次繁殖都会传递个体的基因

那么这种方法就可以略过极度复杂的转录翻译过程透过表现型直接对基因型进行筛选,这是一种相当聪明的机制。并且因为每一代都是基于上代的迭代,所有前人的进化都不会浪费。(如果知识也可以像基因一样传递多好。)

那这套东西我们得咋扯到设计上呢?

首先,经过上文的讨论,有这么几个东西是必要的:

  1. 基因型。

  2. 把基因型翻译成表现型的转录器。

  3. 可以对表现型进行筛选的“自然环境”。

在这里停顿,看下去之前请再次在头脑中回顾一下“元设计”的概念。

元设计指的是“用来生成设计的设计”。大多数情况下是一段程序,但也包含一些物理装置,例如高迪的悬垂找型铁链。 一段GH定义,或者一段可以用参数控制最终形态的代码,都可以叫做“元设计”。因为一个“元设计”里面随着参数的修改包含着成千上万个具体的方案可能性。比如高迪做好了垂链模型,他就可以很方便快捷地调节每根铁链的长度,从而快速生成无穷多个不同,但又都符合他的重力找型需求的方案。

好,如果元设计就是一个你设计出来的物种,它里面会涵盖着有成千上万种不同的个体(因为它的参数有着成千上万种不同的组合方式),但所有这些不同的个体,都有共同的几个输入参数(基因型),只不过每个参数的具体取值不一样。而且你还有一个转录器,就是那段从参数生成最后方案的程序。然后你还有一个挑剔的自然环境(量化评价自己方案好坏的方法),可以是上篇中我们提到的评价的数字化工具,也可以是你自己规定的一种评价方法,只要评价的结果是量化的。那么,你的元设计物种就已经准备好可以开始进化了。

请再次回看本段中的加粗部分。

于是,从方法论上说,只需要把以下几个部分逐一做好:

  1. 输入参数(基因型)

  2. 转录器,就是那段从参数生成最后方案的程序。

  3. 挑剔的自然环境(量化评价自己方案好坏的方法)

然后再把这几块东西用遗传算法联系到一起,我们就得到了一个可以在电脑里自行进化的“物种”。

理论部分小结论

如果把你的方案看成一种生物,它的参数就是基因型,最终生成的几何体就是表现型,加上量化评价表现型好坏的方法,我们便可以实现让这种生物在电脑里高速地“进化”。

实践开始!

来打开Rhino和GH。 (本文后半部分就完全开始当做教学写了哈。)

实例问题

这次我们来用一个在实际工作中遇到过的问题做例子。

有时候我们会拿到这种无法进一步编辑的曲线(因为控制点实在太密了):

这种曲线多数时候,是因为在不同软件之间互导,或者是投影过导致的。但是如果偏偏我们就是需要很优雅地,用寥寥数个控制点,来进一步编辑它的形态,那怎么办呢……是的有人选择徒手描线……或者牺牲很大一部分原来的曲线细节,直接rebuild……又或者可控性很低的Fitcrv……

接下来,我们就来介绍一个与以上方法相比,看起来要更有逼格也更可控的方法:用遗传算法描线。

读者可以自己画一个线,然后投影到一片自由曲面上。

那么好的~你是不是已经拿到了一条3d扭来扭去的,而且有好几百控制点的曲线呢?

我们拿到线了之后第一件事情自然是把它拾取进入Grasshopper:

然后关键的部分来了:构建元设计。如上文,我们的程序需要分成三块:

  • 一个基因型(参数池);

  • 一块生成表现型的程序;

  • 和一个量化评价表现型个体的评价算法。

在这个例子里面我们用EvaluateCrv里面的t来做基因型,这些t会通过Evaluate Crv运算器给我们取到曲面上面不同位置的点,0代表曲线的头,0.5代表曲线的中点,1代表曲线的尾端,以此类推。每个个体有若干个t,就会取到若干个在曲线上的点。所以我们只要把基因池的取值范围,设置成从0到1,那么每个单独基因的取值范围,就包含了几乎所有在这根曲线上的点的可能性。在串联所有的点成为新的曲线之前呢,我们需要把基因池给出的基因排序一下,以便最后点的顺序是从头到尾,不会随意乱画:

然后我们串联所有的点,形成一根新的曲线:

这里有一个隐形的坑,等到你第一次执行算法之后我们再说,先往下看。

请试试看拉动一下基因池里面的参数基因(这里需要你调动一下自己的nurbs感觉,大概估计一下,诠释这个曲线大概需要几个控制点。然后相应地给基因池放几个基因参数),看到新生成的曲线是如何随着变化的,那么表现型我们已经得到了,就是这根曲线,并且这个基因池应该已经包含了所有的可能性,其中自然也就有我们想要的那个基因取值组合。

那么怎么告诉电脑我们想要什么呢?(构造量化评价方式)

在这个例子里,我们细分新生成的曲线,均匀在上面取100个点,然后测量这些点距离原来曲线的距离,这100个点就有100个距离,我们把这100个距离全部累加起来,最后得到了一个数字(总误差):

这个数字,就可以用来量化衡量新曲线和目标曲线的相似度,明显是误差越小越好。

接下来轮到主角出场:Galapagos。这是个运算器的名字,GH默认自带的。它只有两个接口,一个是评价值,一个是基因型。

于是最后一步便是连接上Galapagos的评价值(fitness)到这个评价系数上,然后把基因型链接到我们的基因池上(注意Galapagos的连线需要从它身上往外拖动) 。

双击Galapagos,在参数这边改到“minimum”,因为我们希望fitness越小越小~然后点击start:

等候一段时间,你会看到代表种群适应度排序的图表不断地收敛,并且最佳适应度屡屡突破新高。你可以点击辐射按钮给种群加入随机基因,也可以点击窗口右上角那几个半球,切换是否显示即时生成的表现型,然后在犀牛窗口里预览看到飞快变换的个体们。

等到整个种群的基因型已经基本没有多样性了,而且结果也算是可以接受的满意时候,就可以停下了,然后关掉galapagos,你会发现基因池和之前不一样了,已经自动设置成了目前算法找到的最优解:

如果你没有遇到那个隐形的坑呢,应该会得到一条满意的结果:用寥寥数个点就画得与原曲线非常非常贴近的曲线了。但如果遇到了坑,会发现最佳结果的误差值是0,而且内差点曲线Int Crv报错,然后没有新曲线生成。这种情况多半是因为在基因池里面一不小心出现了两个一样的数字,结果就是两个重叠点。重叠点输入进IntCrv的结果自然就是报错,所以没有新曲线被画出来,结果适应度就变成了0。因为我们命令算法搜索的是最小值,于是它就会觉得0这个结果是目前最好的,就把它的基因型保留了下来。这正是我们前面说的,筛选只看表现型,完全不会理会生成过程是如何。

解决这一问题的方法有不只一个,我推荐的方法是去重。在基因池刚刚出来数字的时候,就把所有重复的数字去掉,然后再排序,再取点。如此排除此bug:

以上,恭喜已经完成了第一次遗传算法优化操作。记得把这个小程序存下来,如果以后去了喜欢搞曲线的事务所工作是真的用得到的。(其实这是笔者在参加工作后为公司做的第一个“实用”的内部参数化小工具。)

然后给针对遗传算法想要进阶的朋友:

  1. 请思考一下,如果我们想要同时使用两个评价方法,比如“越贴近原曲线越好”的同时“控制点越少越好”。那该如何整合这两个评价方法一同放进Galapagos呢?

  2. 去找一下一个叫做Octopus的插件,相比GH自带的Galapagos而言,它可以做多目标的优化(也就是同时向好几个方向进化)并且还会提供比较炫酷的出图支持。

没错,2就是1的插件版答案,但1这个问题其实也是值得思考并尝试的。

最后给接触GH时间不长的朋友留个关于GH的思考题:

如果我们要描的曲线不是闭合的,这个小程序要做哪些改动呢?

其实遗传算法还有蛮多东西可以说的,但再继续拆开就真没完了。但其实了解的更透彻一点的话,非常有助于你有方向性地根据需求调节执行算法时的具体参数,比如初代倍增,淘汰率,变异率,精英保留等等,好的设置会对结果和搜索效率产生蛮大的影响,要是有兴趣的同学,可以有空自行寻找相关信息深入研究噢~

祝一切顺利。

注:此篇主体成文于多年以前,故如有朋友识得请放心,别处应也是笔者本人。P.S. 未来更新计划大概如下

  • 概念慎读——当我们在谈“非线性”的时候,我们……真的知道自己在谈什么吗?

  • 反思与沉淀——参数化的“三个原罪”(不是说不好,但是彻底想清楚了我们才能有的放矢)

  • 从业前线指北——在真正的设计前线使用参数化工具的一些小建议