介绍
在上一篇文章中,我们详细介绍了完全在 Ansys Workbench 中使用 optiSlang 为 Ansys Mechanical 校准材料模型的过程。在本系列文章中,我们将详细介绍使用 PyAnsys 和 Probabilistic Intelligence 的 Stochos 6.0.2 Python 3.12 库、Ansys Workbench 和外部 Python 脚本的相同过程。
完成整个校准需要执行以下步骤;粗体项目将在当前文章中讨论:
- 参数定义:边界和类型
- Workbench 模型设置和验证
- Stochos 优化和约束函数定义
- 使用 Stochos 开始生成实验设计 (DOE)
- 通过使用 PyAnsys 将参数传递给 Workbench 来开始生成 DOE 结果
- DIMGP 模型校准和优化循环以及 Stochos 建议的下一个设计点
- 优化结果和最终参数选择
安装 PyAnsys 和 Stochos
PyAnsys 和 Stochos 是 Python 3.12 库。建议创建一个虚拟环境,或者更好的是,创建一个 Anaconda Python 环境,您可以在其中安装 PyAnsys 和 Stochos。我们不会在本文中进一步讨论这些问题。
参数定义
回顾上一篇文章中详述的模型设置,我们指定了 Voce 硬化材料模型参数的边界和单位,如下所示,并注意所有这些参数都是连续类型:
参数 | 单位 | 边界 |
杨氏模量 (Young's Modulus),E | 兆帕 | [160000, 200000] |
初始屈服应力 S0 | 兆帕 | [1100, 1600] |
线性硬化系数 (Linear Hardening Coefficient),R0 | 兆帕 | [1, 1000] |
指数硬化系数 (Exponential Hardening Coefficient),R英孚 | 兆帕 | [400, 900] |
指数饱和度参数 b | 没有 | [160, 400] |
Stochos 要求边界和类型位于列表中。以下是所述参数定义的代码片段:
Workbench 模型设置和验证
我们使用的 Workbench 模型是上一篇文章中使用的模型的简化版本。在这里,我们只要求维护 Parameter Set(参数集),如下所示,并注意输入参数 ID:
为了保持参数信息井井有条,我们在 Python 中设置了一个字典:
在项目 user_files 目录中,我们有参考信号文件 force_displacement_ref.txt,其格式如下,请注意我们在开头添加了一个 (0,0) 点:
求解模型时,APDL 命令将生成相同格式的文件 force_displacement_sim.txt,并将其存储在 dp0\SYS\MECH 项目文件夹中。我们将在每个模型求解后读取此文件,并将其作为优化过程的一部分进行处理。
最后,我们必须确保模型可以在整个参数边界范围内求解,以便我们可以自动进行参数研究。此模型已在所有极端情况下运行,并显示出在所有情况下收敛。
Stochos 优化和约束函数
Python 导入
对于整体代码,我们导入以下库:
Stochos 定义
Stochos 通过庞大的示例库提供现成的目标和约束函数。在这里,我们将仿真信号回归为参考信号,因此我们修改示例函数以实现以下内容:
- 最小化仿真信号和参考信号之间差值的平均值和标准差。
- 计算仿真信号的最小梯度,拒绝任何具有负梯度的仿真信号;我们不允许在材料模型曲线的末端出现负斜率,因为这会导致仿真问题。
请注意优化器定义中的 acq_func=“SEI” 行,该行适用于信号回归。
使用 Stochos 开始生成 DOE
要开始优化过程,我们需要运行启动 DOE 来生成用于 DIMGP 模型训练的数据。根据 optimization 和 constraint 函数,Stochos 很容易创建一个最佳的空间填充设计:
我们将生成的 “DOE_start_design_matrix.csv” 文件存储在与 Workbench 模型相同的目录中,以便于检索。
使用 PyAnsys 和 Workbench 启动 DOE 结果
使用 PyWorkbench 启动和控制 Workbench
PyWorkbench 是一个 PyAnsys 模块,我们使用它来通过外部 Python 脚本启动和控制 Workbench。首先,我们定义重要的目录和路径:
接下来,我们需要 IronPython 格式的 Workbench 命令字符串,用于控制 Workbench 并在 Workbench 中设置参数值。
有了这些控制字符串,我们启动 Workbench 2025 R1,使用以下代码显示 GUI:
在完整 Python 脚本结束时,我们使用以下命令正常关闭 Workbench:
运行和分析所有设计点的结果的功能
运行和分析起始 DOE 设计点的函数应用以下算法:
- 创建空的 Pandas 结果 DataFrame。
- 阅读 DOE 矩阵并遍历每个设计点,执行以下作:
- 将参数值传递给 Workbench。
- 更新 Workbench 项目以求解模型并生成 force_displacement_sim.txt 文件。
- 对仿真结果信号进行线性插值,使其与参考信号具有相同的长度和横坐标。
- 计算仿真信号的最小梯度,如果 min(gradient) >= 0,则保留 reject。
- 计算仿真信号和参考信号之间的 L2 距离。
- 将保留的仿真信号存储在 results DataFrame 中。
- 将 L2 距离和参数值存储在摘要结果 DataFrame 中。
- 返回所有适当的 DataFrame。
以下是此函数的代码分为两部分:
用于实现流程的控制代码
以下代码片段显示了用于控制进程的代码,但请注意某些参数未显示:
Start DOE 的结果
运行起始 DOE 后,我们获得了 13 个(共 30 个)有效的仿真信号(在所有位置都有正梯度)。
此外,我们还从 Stochos 获得了启动敏感性分析,该分析显示了哪些参数最重要。显然,R0不是一个重要的参数。
最后,摘要数据显示,运行 5 与参考信号的 L2 距离最低,但需要进行优化以获得更好的校准。
结论
总之,我们展示了使用 Stochos 和 PyAnsys 在 Ansys Mechanical 中优化材料模型的过程的第一部分。我们展示了如何使用 PyWorkbench 自动化更新参数和求解模型的过程。此外,我们还展示了 Stochos 如何提供起始 DOE 来训练 DIMGP 模型,以用于未来的优化。最后,我们展示了如何使用简单的 Python 脚本来自动化整个过程。