NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
利用生成式设计可以探索多个场景并找到平衡多个目标的问题的最佳解决方案。 本文介绍了如何应用生成式设计和自动化原理来优化道路网络的设计。
设计从描述场地的 GIS 输入开始:它的特征,例如边界、现有建筑物和水流。 使用 InfraWorks 和 Civil 3D,可以创建模型以开始设计定义。 Dynamo 支持计算设计方法和定义建模策略以实现优化。 最后,借助 Dynamo for Civil 3D,可以创建复杂的对象,如路线、剖面和走廊,以管理选定的解决方案并根据需要改进建模。
1、问题陈述
目标是找到利用生成式设计方法生成选项以将关键位置(由设计师定义)与道路系统连接起来的方法。 道路横断面具有固定的宽度和固定的挖方和填方坡度。 该设计考虑了现有结构,例如建筑物、水流,当然还有现有的地面。
本文的范围是更多地关注方法并展示新的可能性。 采用了工作简化来突出方法中的关键步骤。 这绝不是将生成式设计应用于道路的唯一方法或“正确”方法。
在这种情况下,系统中的道路是三种元素的组合:
- 由直线和圆曲线组成的水平定线。
- 垂直剖面,沿路线定义并由直线段组成; 对齐和剖面的组合生成道路基线。
- 一组横截面,每个横截面都连接到表示道路路面的水平线段中点的基线。
2、关键考虑因素
可衡量的目标使我们能够比较两个不同选项的性能。 以下是道路设计优化的常见目标列表。
最小化目标:
- 碰撞次数
- 水流交叉口的数量(代表桥梁和涵洞等额外结构的成本)
- 长度
- 绝对切
- 绝对填充
- 切割/填充平衡
最大化目标:
- 服务的关键地点数量
- 能见度
目标值比较的结果使我们能够对选项进行排序并指导研究向最佳解决方案发展。 它们甚至可以彼此形成对比; 很多时候,没有简单的分析“捷径”来为这类问题找到最优解,或者开发一个同样灵活的算法解决方案可能会很昂贵。
这些是解决此类问题的原因:采用进化策略更方便,幸运的是,Revit 的生成设计 (GDiR) 中存在解决多目标优化的技术。 本文说明了如何在道路设计环境中利用该技术。
读者可能会感到惊讶,在这种方法中可以容忍不需要的选项(例如,与建筑物发生一次或多次冲突,或者没有道路服务于一个或多个关键位置)。
这是与其他在不同程度上利用某种形式的自动化或人工智能的方法的关键区别。 与机器学习应用程序不同,生成式设计的目标不是模仿设计师的工作,而是探索问题以寻找最佳解决方案。
这些可能与人类通过利用他们的直觉或经验所想到的有很大不同,这是无偏见的目标驱动方法的价值的一部分。
设计师定义了生成设计研究中使用的策略,该策略允许次优解决方案,因为随着时间的推移,由于 GDiR 使用的进化算法,它将揭示设计变量和执行解决方案之间的关系。
在这个新范例中,设计师的创造力在于他们如何构建问题,定义采用哪些策略以及考虑建立生成设计研究的目标。 需要新的技能来释放这种方法的潜力。
3、通过 InfraWorks 和 Civil 3D 添加数据
对InfraWorks 和 Civil 3D 软件的详细介绍超出了本文的范围。 Civil 3D 中用于放坡的生成设计功能未参与本文档中分析的工作流。
可以说,这种软件集成是获取启动设计所需数据的关键。 提议的用例从 InfraWorks 连接到 ArcGIS 服务并下载建筑物、公用设施等上下文数据开始,然后在 Civil 3D 中传输和优化,同时集成其他数据源(例如 SHP 文件) 或直接通过设计师输入。
4、在 Dynamo for Civil 3D 中定义逻辑
使用 Dynamo for Civil 3D 可以读取 DWG 文档中包含的信息、导出输入并将它们组合到自定义逻辑中以创建 AutoCAD 或 Civil 3D 对象等。 在这种情况下,Dynamo for Civil 3D 允许我们获取在生成设计研究期间不会改变的固定输入; 例如,现有的地面网格、关键位置的坐标、研究区域的边界等。
本质上,Dynamo 允许我们从 AutoCAD 和 Civil 3D/Map 3D 对象的输入中提取底层几何实体。 这是生成式设计研究的关键步骤,因为在撰写本文时,无法直接利用在 AutoCAD 或 Civil 3D 对象上运行的节点(例如,计算在现有地面上投影水平对齐的剖面) 。
这就是不允许直接优化 Civil 3D 道路的原因,但仍然可以优化其主要几何组件(路线、剖面和横截面定义)。
5、Civil 3D 工具包
Civil 3D 工具包是 Dynamo for Civil 3D 的免费包,其中包含开箱即用节点的扩展,以涵盖 AutoCAD 和 Civil 3D 中使用 Dynamo 的更多工作流。 用户可以从 Dynamo 包管理器安装包。
在这种情况下,它有助于获取信息,例如 Map 3D 多边形和折线的几何形状或提取现有地面的快速网格表示。 不幸的是,在撰写本文时,我们无法通过 Dynamo 节点或通过 Dynamo 包对网格做很多事情。 这是开发外部 Python 模块来处理这些类型的几何实体的原因之一。
它还为直接创建更复杂的对象(例如路线、纵断面、装配体和子装配体)提供便利,并将它们组合到具有基线、区域和目标的 Civil 3D 道路中。 我将 Civil 3D Toolkit 的这种用法称为“自动化”。 有关 Civil 3D 工具包的详细信息,请参阅土木工程师计算设计和 Dynamo 论坛。
6、在 Civil 3D 中使用生成式设计结果
要在 Revit (GDiR) 中使用衍生式设计,我们需要先在 Dynamo 图中创建逻辑,然后将其及其依赖项导出以进行生成式设计。 如果有任何问题,该工具将报告要采取的纠正措施。 在导出过程中,可以添加描述和缩略图以清楚地识别研究并提供高级文档。
从 Revit 用户界面的管理下,可以启动生成式设计并创建新研究。 可用研究的列表将出现,选择其中一项将打开设置窗口,从中可以启动研究。 获取有关如何设置创成式设计研究的更多信息。
当研究完成所有循环或设计人员停止计算时,设计人员可以从 GDiR 界面中选择一个解决方案并将其发送回 Dynamo。 从这里可以利用相同的序列化概念,但在这种情况下将其应用于输出或代理模型,代表对齐和配置文件。 这些创建了 Civil 3D 对象的基本成分,这些对象结合起来生成了一条走廊。
7、Dynamo和计算设计简介
Dynamo 是一个可以直观地定义算法的平台,指令序列是使用称为节点的块生成的,这些节点执行预定义的任务,并使用连接器按顺序连接在一起。 Dynamo 算法称为图形以强调可视化编程方法,这是 Dynamo 与任何其他脚本语言之间的主要区别之一。
Dynamo 是一种数字瑞士刀,可以包含适合工作的刀片,即使它的使用方式非常直观,但它也非常有效。 Dynamo 的另一个重要特性是,无论出于何种原因,如果某个特定的刀片应该丢失,它支持多种方法,从外部包的公共存储库添加一个,或者使用传统的脚本语言(如 Python 或 C#)创建更复杂的功能。
Dynamo 将编程平民化并使其更接近设计人员,负责复杂的操作,例如处理数据库和事务、序列化更改和更新模型,而不是执行“即发即弃”的自动化。 Dynamo 介于 Civil 3D 或 Revit 等交互式工具与更传统的脚本语言之间,以利用产品 API。
Dynamo 可以作为称为 Sandbox 的独立应用程序找到,但也可以与 Revit 或 Civil 3D 等主机应用程序集成。 你可以在这里找到有关 Dynamo 集成以及从何处获取的更多信息。
Dynamo 用户社区以快速稳定的速度增长,这主要是因为可视化编程的易用性以及社区开始免费收集和共享有用的节点集。 这些被捆绑到包中以扩展 Dynamo 功能并简化更复杂工作流的创建并提高采用率和生产力。
社区还积极参与 Dynamo 论坛上的知识共享:对于任何想要联系、学习、寻找问题的创造性解决方案并回馈的人来说都是必要的。
在这种情况下,Dynamo 定义了计算策略以在研究中生成选项,并使用同一图表指定变量及其范围以及衡量目标的逻辑。
8、利用 Python 扩展可能性
Dynamo 支持 Python 脚本的执行。 Python更接近于传统的脚本语言,更接近于阅读和书写英语,语法简单,功能强大。 有关语言本身的更多信息,请访问此链接,要了解如何在 Dynamo 中利用 Python,请访问此链接。
在撰写本文时,Dynamo 支持与 .NET 兼容的两个不同版本的 Python(IronPython 2.7 和 CPython 3.7)。 可以在此处找到有关差异和改进支持的正在进行的工作的更多信息。
在解决方案的开发过程中,可以方便地为可以在其他项目中重复使用的更复杂的功能编写外部 Python 模块,并将它们加载到 Dynamo 的 Python 节点中。 GDiR 利用启动 Dynamo Sandbox 实例的多个进程(例如,不拥有“主机节点”的 Dynamo 版本,例如特定于 Civil 3D 的节点),并且每个进程都支持加载外部模块。 这可用于在生成设计研究中利用自定义功能和现有库。
使用外部模块还可以让我们利用 Python 集成开发环境(例如 PyCharm),并且比 Dynamo 中的 Python 节点具有更多的功能。
这种方法的一个简单应用是向自定义函数添加日志记录功能,以捕获错误、异常、警告或仅出于计时目的跟踪代码的执行。
打开文本编辑器并将文件另存为 my_module.py 到您选择的文件夹中。 在文件中,复制以下代码:
import logging
import os
import Tempie
FORMAT = ‘[%(asctime)s] %(levelname)s: %(processName)s [%(process)d]:
%(module)s.%(funcName)s %(message)s’
logging.basicConfig(filename=os.path.join(tempfile.gettempdir(), ‘MyLog.txt’),
level=logging.DEBUG, format=FORMAT, datefmt=’%Y/%m/%d %H:%M:%S’)
def my_function(): # this is the function to call from Dynamo
logging.info(‘Start’)
# do something here
logging.info(‘End’)
return True
在 Dynamo 中,打开一个新文件并插入一个 Python 脚本节点,右键单击并选择编辑。
在 Python 编辑器中,删除内容并粘贴以下内容,然后编辑包含 my_module.py 的文件夹的路径。
外部模块中的代码在临时文件夹中写入一个名为 MyLog.txt 的文件,当执行 my_function()
时附加两个 INFO 条目,捕获函数开始和结束的时间,如下所示:
在这个例子中,除了进入时间之外,还有严重性(ERROR、EXCEPTION、WARNING、INFO、DEBUG)、进程的名称及其 PID(在本例中为 34052)、包含自定义的模块的名称 函数、函数名称和消息。
在生成式设计中,有多个进程并行运行,因此可以检查其中一个进程是否存在任何问题,更重要的是,为什么会捕获错误消息。
在这种情况下,我一直在用 Python 开发自己的模块,以通过递归促进一些计算量大的操作,处理 Civil 3D 对象而不利用 Dynamo for Civil 3D 节点(例如,找到现有网格上对齐的投影) ,实施算法,例如解决最小生成树的算法(例如,用于计算对齐方式),读取和写入自定义 JSON 模式以存储固定输入等。
9、优化概述
生成设计工作流程从收集有关要解决的问题的数据开始。 结果就像问题 DNA:它包含用于定义替代模型以探索设计空间的基本特征。 在生成阶段,定义了创建问题潜在解决方案的“配方”——换句话说,一种将输入和变量转换为候选解决方案的算法。 一开始,随机生成一些候选人。
然后根据一组标准或目标评估每个候选解决方案,以便可以对其他解决方案进行评分和排名。 生成式设计进入遗传算法引导设计空间探索的循环。 在每个周期,它都会收集有关候选人表现的信息,并随着时间的推移改进所提出解决方案的质量。
在研究结束时,可以浏览结果以更好地了解问题,揭示输入和输出之间的相关性以选择产生更有趣结果的组合。然后可以将替代模型用作进一步详细说明所选解决方案的起点。
10、定义方法
要创建流程的抽象模式,我推荐使用免费在线平台 Cawemo.com 的业务流程建模表示法 (BPMN 2.0)。 作为惯例,我采用以下语法来捕获流程的关键组件:
- 输入:设计者可以更改但在研究期间固定的参数:
I: <name>=<value> (e.g., I: Width=30m)
- 变量:哪些参数被视为设计空间的一部分,以通过生成设计进行探索,指定范围和步骤以及它们如何影响模型中的元素:
V: <name> [<lower>, <upper>] | <step> (e.g., V: Rotation [0,359] | 1)
- 生成:对什么构成替代模型的高级描述,用于通过创建候选解决方案的必要步骤来验证选项。
- 评估:一组目标,用于衡量候选选项的适合度/质量的代理,指定每个选项是否应最小化(减号)或最大化(加号):
例如,面积 [+]、成本 [-]
- 进化:这是 Revit 中的生成式设计接管并开始探索问题和生成选项的时候。
11、序列化数据
GDiR 提供了将研究期间不会更改的信息直接存储到研究类型的 JSON 结构中的可能性。 这可以通过 Data.Remember 节点实现,因为引擎盖下的 Dynamo 文件基于 JSON 模式,并且已经做了大量工作来启用几何实体的序列化(换句话说,转换为稳定的表示形式)。
在这种情况下,一旦来自 Civil 3D 的数据嵌入到研究类型中,就可以将其传输到启动 GDiR 的另一个应用程序。
同样,也可以按照相反的工作流程将数据带回 Civil 3D,将优化结果存储在新的 Data.Remember 节点中。 良好的 Dynamo 图表规划可以帮助找到这些节点的确切位置以运行成功的研究,并且在最新版本的 GDiR 中已经进行了改进以突出显示这些节点应该放在哪里。
同样可以利用 Python 内置功能来读取和写入 JSON 文件。 不同之处在于,数据没有嵌入到 Dynamo 图中,而是嵌入到一个单独的 JSON 文件中,将逻辑与数据分离,这总是一件好事,因为它可以更轻松地管理不同版本的研究。 Python 方法还允许我们为自定义对象开发自定义编码器对象和解码器函数。
下面的代码定义了 Python 中序列化模块的基本结构。
12、设计代理模型
代理模型是生成式设计工作流程的重要组成部分。 事实上,在仔细分析之后,你甚至可能会改变对需要处理的对象类型的看法。 这种情况在生成式设计的实际应用中经常发生。 代理模型是对实际问题的抽象表示,如果你愿意的话,它是一种简化,因此它有助于专注于关键特征。
原文链接:Optimize Road Design with Dynamo for Civil 3D and Generative Design
BimAnt翻译整理,转载请标明出处