本文地址: https://www.zhangxinxu.com/life/?p=1000
一, 大象不会玩象棋
通常的产品设计用不到本文的包容体系理论, 如果是带有 "智能" 性质的, 复杂的, 与现实世界强映射的产品, 则需要站在系统层面好好梳理下设计思维.
举个例子, 如果让你设计一个会走路, 会躲避障碍的机器狗, 你会如何设计其功能实现?
很多人会这么设计: 给机器狗安装一个中央大脑, 这个大脑通过各种传感器 (例如接触传感器, 光线传感器和超声波传感器) 从环境中获得信息, 然后根据这些信息和预设的地图场景发送对应的行为, 例如, 检测到前面不远处有障碍物, 机器狗就停下, 计算周围没有障碍物的位置, 然后再通过和中央大脑相连的电缆控制机器狗 4 条腿部各自马达的运动, 以实现转向及前进.
但是, 这种方法是有问题的. 问题之一是它需要进行大量计算. 另外, 因为外部环境总是在变化, 所以很难让环境地图符合最新情况.
罗德尼. 布鲁克斯 (Rodney A. Brooks - MIT AI Lab 的现任领导)早些年设计机器人的时候就是按照上面的思路实现, 结果备受困扰, 挫折不断, 因为各种和大脑交叉的线缆无法不受静电干扰有能传输丰富多样的信号. 后来其被迫此案有非常简单的逻辑步骤以及短而简单的连接, 结果出乎意料, 在完成简单任务的时候, 这种简陋的自带神经的电路表现要比有中央大脑表现更好.
一番探索后, 在 1986 年发布了著名的文章 "Elephants Don't Play Chess(大象不会玩象棋)", 提出了提出了包容体系结构, 用来实现基于行为的机器人学(behavior-based robotics,BBR, 当今的机器人实验室中占有主要地位).
还是机器狗的实现, 我们无需任何中央大脑(中央处理器), 只需要在每条腿上装两个马达控制起落, 以及一些传感器. 腿只要抬起, 就执行会落下. 至于什么时候抬起, 取决于周围几条腿做什么动作. 如果前面腿抬起, 我也抬起, 于是, 机器狗就 "一二一, 一二一,......" 走起来了. 可以看到没有中央处理器, 机器狗也能运动. 而且, 就算某一条腿折断, 剩下 3 条腿也会自动重组, 继续正常走路.
至于躲避障碍物, 我们只需要在现有的稳健的步行功能上按照一个感应装置, 如果触碰障碍物, 那就把信息传递给第一组腿, 规则很简单:"如果你感觉到什么, 停下, 转个角度; 否则继续走." 由于后面的腿都是基于第一个腿运动的, 因此, 我们只需要一个简单的传感器, 就能实现机器狗躲避障碍物的智能行为.
这就是包容体系结构的精髓, 当某个系统能够正常运转, 不要扰乱它, 要以它为基层来构建, 在以后层级上建立新的层级, 动物的进化与学习就是如此, 这里的机器狗也是如此, 通过建立行为层级来学会穿越复杂的世界.
二, 如何设计宠物狗形象制作工具?
对于靠软件吃饭的互联网公司, 自然不会去设计机器人, 但是, 在软件开发中, 有很多产品其实本质上是和机器人设计类似的. 比方说, 想开发一款虚拟宠物的工具, 其中有个重要功能就是用户可以自己制作一套宠物狗形象, 包括选择品种, 毛色, 眼睛形态, 尾巴动画, 舌头动作等等. 然后基于这些素材用户自己组装狗狗开心时候样子, 不开心时候样子, 无聊时候样子, 玩耍时候的样子等.
其中, 就存在一些与现实世界相匹配的冗余逻辑处理, 例如, 如果用户要捏一个宠物狗不开心时候的形态, 则就不能选择尾巴摇摆得很 High 的素材, 应该选择尾巴下垂素材更合适; 如果捏无聊的狗, 就不能选择眼睛放光的素材等; 例如捏瑞典牧羊犬形象的时候就不能选择长尾巴素材.
这些逻辑处理很多人会这么设计, 给这个软件系统背后安装一个逻辑大脑, 这个大脑实时获取用户当前选择信息, 然后根据这些信息和预设的逻辑进行判断, 例如选择了不开心形象, 就控制后面摇尾巴, 眼睛放光等素材不显示, 只呈现大脑认为正确的素材.
但是, 这种设计是由问题的. 问题之一是它需要进行大量计算, 开发和维护成本会相当大, 尤其当这种筛选逻辑很多的时候. 另外, 外部环境总是在变化(如新增宠物狗类型, 出现新的素材, 用户特殊需求等), 所以很难让当前内置的复杂逻辑符合最新情况. 务必进行改动, 此时系统的稳定性必定进一步削弱.
此时, 我们不妨参考机器人的包容体系结构设计理念, 基于行为实现我们的宠物狗形象制作工具.
我们无需任何中央大脑(中央处理器), 让所有的素材都可以自由组合, 品种就是品种, 毛色就是毛色, 眼睛就是眼睛, 尾巴就是尾巴. 这个时候, 一个宠物狗的形象就会出现, 这个形象组合是非常稳健的. 所有素材发生增减, 或者添加另外一个层级素材, 例如狗绳, 也不会影响系统的运行.
然后, 我们不要扰乱这个系统, 而是以它为基层来构建新的层级, 通过建立行为层级来学会穿越复杂的世界. 这个新的层级就是不合理的筛选规则匹配处理.
例如, 当用户捏完一个宠物狗形象, 合理性判断层开始工作, 用户要捏一个不开心状态的狗, 结果发现眼睛放光, 尾巴摇地很欢快, 此时就可以进行不合理反馈, 至于是强制形象禁用, 还是对形象开放 (用户知道不合理还执意使用也允许) 这个就要看产品定位. 我个人是推荐后者, 虽然会有糟粕形象产生, 但是产品有了更多可能性, 有了更强生命力, 也增加了成为爆款可能性(引爆网络的往往都是无法预知的东西).
包容体系结构设计的好处在于, 无论你日后增加多少规则, 最底层的组装系统都是稳定的, 只需要在上层不断累加匹配规则即可.
三, 最后总结
当你想要创建一个机器人, 不要想着创建整个机器人, 只需添加行为并看看会发生什么.
两者区别在于: 前者提前预知冲突并改变方向 (冲突不会发生) 和行为; 后者是一直保持稳定的行为, 当遇到冲突(冲突会发生), 改变方向.
对于复杂产品设计, 试试使用后者进行设计, 基于行为, 使用包容体系结构, 无论对设计, 开发还是整个产品而言会更友好更稳健.
参考资料:
《失控》 - 3.2 章节: 快速, 廉价, 失控
Paul Reiners(2008 年 1 月 11) 机器人, 迷宫和包容体系结构
(本文完)
来源: http://www.tuicool.com/articles/QZjEjyE