利用有限元法(FEM)模拟并通过机器学习进行预测以揭示增材制造过程中热场变化:基于ABAQUS和Python的研究实践
1. 引言
增材制造(Additive Manufacturing,AM)近年来引起了大量的研究关注,这主要是因为它可以提供定制化、复杂结构的零件制造解决方案。在AM过程中,热场的分布和变化直接影响了零件的质量和性能。对此,采用有限元法(FEM)进行模拟已经成为了一种广泛使用的方法。然而,由于AM过程的复杂性,对热场进行预测仍然存在很大的挑战。在本文中,我们将介绍一种通过机器学习预测热场的方法,并将其与FEM进行结合。我们将使用ABAQUS进行有限元模拟,并使用Python进行机器学习建模。
实战项目下载
2. 有限元法(FEM)模拟增材制造中的热场
有限元法是一种广泛应用于工程计算中的数值方法,它可以用于求解各种复杂的物理问题,如热传导、流体力学和结构力学等。在AM过程中,FEM常常被用来模拟热场的分布和变化。
首先,我们需要通过建立几何模型和设置边界条件来描述AM过程。然后,利用ABAQUS,我们可以将模型划分成许多的有限元,每一个元素都有自己的热物性参数,如导热系数和比热容等。然后,通过求解热传导方程,我们可以得到每个时间步长下的热场分布。
这里,我们以一个简单的例子来说明这个过程。我们的任务是模拟一个简单的金属板的加热过程。
from abaqus import *
from abaqusConstants import *# 创建模型
myModel = mdb.Model(name='HeatConduction')# 创建几何
mySketch = myModel.ConstrainedSketch(name='sketch', sheetSize=200.0)
mySketch.rectangle(point1=(0.0, 0.0), point2=(50.0, 50.0))
myPart = myModel.Part(name='plate', dimensionality=THREE_D, type=DEFORMABLE_BODY)
myPart.BaseShell(sketch=mySketch)# 定义材料和节面特性
myMaterial = myModel.Material(name='Material-1')
myMaterial.Elastic(table=((210000.0, 0.3), ))
myMaterial.Density(table=((7800.0, ), ))
myMaterial.Conductivity(table=((43.0, ), ))
myMaterial.SpecificHeat(table=((434.0, ), ))# 创建划分
myAssembly = myModel.rootAssembly
myInstance = myAssembly.Instance(name='plate-1', part=myPart, dependent=ON)
myAssembly.seedPartInstance(regions=(myInstance, ), size=10.0)
myAssembly.generateMesh(regions=(myInstance, ))# 创建步骤和载荷
myModel.HeatTransferStep(name='Step-1', previous='Initial', timePeriod=3600.0)
myModel.TemperatureBC(name='BC-1', createStepName='Step-1', region=myInstance.faces.findAt(((25.0, 25.0, 0.0), )),distributionType=UNIFORM, fieldName='', magnitude=500.0)# 创建求解器和作业
myJob = mdb.Job(name='Job-1', model='HeatConduction', description='Heat conduction simulation')
myJob.submit()
myJob.waitForCompletion()
以上代码首先定义了一个名为’HeatConduction’的模型,然后创建了一个50x50的正方形板,定义了板材的材料和热物性参数,如弹性模量、密度、导热系数和比热容。之后,进行了有限元划分,并定义了一个热传递步骤,在这个步骤中,板材被均匀加热到500摄氏度。最后,通过创建和提交一个求解作业来进行模拟。在求解完成后,我们可以得到加热过程中的热场分布。
以上部分是对有限元法(FEM)模拟增材制造中的热场进行的简单介绍,接下来的部分,我们将介绍如何使用机器学习进行热场预测。
注:以上示例代码应在ABAQUS的Python环境中运行,以确保正确导入ABAQUS的模块。
3. 机器学习预测热场
有限元模拟可以帮助我们理解和分析增材制造过程中的热场变化,然而在实际应用中,模拟的过程常常会非常耗时,且需要专业知识。此外,有限元模型的精度也受到初始和边界条件的影响。为了解决这些问题,我们可以尝试使用机器学习模型来预测热场。机器学习模型可以从大量的数据中学习规律,并进行快速的预测。
在本文中,我们选择使用Python的scikit-learn库来构建机器学习模型。我们将使用来自FEM模拟的数据作为训练数据,包括初始和边界条件,以及模拟结果(即热场分布)。
在这个例子中,我们将构建一个线性回归模型来预测热场。首先,我们需要获取模拟的数据:
import numpy as np
from abaqus import *# 创建会话并打开ODB
odb = session.openOdb(name='Job-1.odb')# 获取时间步长和元素温度
timeSteps = odb.steps['Step-1'].frames
numTimeSteps = len(timeSteps)# 初始化数据数组
temperatures = np.zeros((numTimeSteps, ))# 获取数据
for i in range(numTimeSteps):frame = timeSteps[i]field = frame.fieldOutputs['NT11']fieldValues = field.getSubset(region=odb.rootAssembly.instances['plate-1'].elements[0]).valuestemperatures[i] = fieldValues[0].data
以上代码打开了名为’Job-1.odb’的输出数据库(ODB),并获取了模拟的结果。之后,我们可以使用这些数据来训练机器学习模型:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression# 定义特征和目标变量
X = np.arange(numTimeSteps).reshape(-1, 1) # 时间作为特征
y = temperatures # 温度作为目标变量# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建和训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 使用模型进行预测
y_pred = model.predict(X_test)
在以上的代码中,我们首先定义了特征(时间)和目标变量(温度)。然后,我们划分了训练集和测试集,之后我们创建了一个线性回归模型,并使用训练集进行训练。最后,我们使用训练好的模型来进行预测。
4. 结合有限元模拟和机器学习预测热场
虽然机器学习模型能够在一定程度上预测热场,但是,因为模型是基于训练数据来学习的,当遇到超出训练数据范围的新问题时,模型的预测性能可能会下降。此外,机器学习模型也不能像有限元模拟那样提供物理过程的详细信息。
因此,结合有限元模拟和机器学习进行热场预测就显得尤为重要。我们可以使用有限元模拟来生成训练数据,然后使用机器学习模型进行预测。当遇到新问题时,我们可以首先使用有限元模拟进行预测,然后将模拟的结果作为新的训练数据,以此来更新和优化机器学习模型。
以下是一个如何使用新的有限元模拟结果来更新机器学习模型的示例:
# 创建一个新的有限元模拟,并获取结果
# 略...# 新的模拟结果
new_temperatures = ...# 更新特征和目标变量
X_new = np.arange(numTimeSteps, numTimeSteps + len(new_temperatures)).reshape(-1, 1)
y_new = new_temperatures# 更新训练集
X_train = np.concatenate((X_train, X_new))
y_train = np.concatenate((y_train, y_new))# 重新训练模型
model.fit(X_train, y_train)
以上的代码首先获取了新的有限元模拟结果,然后将新的数据添加到训练集中,最后重新训练了模型。
5. 结论
总的来说,有限元模拟和机器学习各有优缺点,结合两者进行热场预测可以充分利用它们的优点,提高预测的精度和效率。尽管本文只介绍了一个简单的例子,但是这种方法可以广泛应用于增材制造中的各种复杂问题。希望这篇文章能为您提供一些启示,帮助您更好地理解和应用有限元模拟和机器学习在增材制造中的应用。
相关文章:
利用有限元法(FEM)模拟并通过机器学习进行预测以揭示增材制造过程中热场变化:基于ABAQUS和Python的研究实践
1. 引言 增材制造(Additive Manufacturing,AM)近年来引起了大量的研究关注,这主要是因为它可以提供定制化、复杂结构的零件制造解决方案。在AM过程中,热场的分布和变化直接影响了零件的质量和性能。对此,采…...
Kafka与Flume的对比分析
Kafka与Flume的对比分析 一、Kafka和Flume1. Kafka架构2. Flume架构3. Kafka和Flume异同点 二、Kafka和Flume的性能对比1. 数据处理性能对比2. 大规模数据流处理的性能对比 三、性和稳定性对比1. 高可用集群的搭建KafkaFlume 2. 数据丢失和重复消费的问题处理KafkaFlume 四、适…...
docker启动redis哨兵报错(sentinel.conf is not writable: Permission denied)
Sentinel config file /usr/local/sentinel/sentinel.conf is not writable: Permission denied. Exiting… 用这个命令不报错:docker run --net host -p 6666:6666–name redis-sentinel -v /usr/mcc/redis/conf:/usr/local/sentinel/ -v /usr/mcc/redis/data/sent…...
如何编写优秀代码
最近在阅读别人写的代码,进行相应功能的修改。发现很多不规范或者比较绕的地方,总有那么几句看着多此一举,阅读别人的代码就是这样,有时候真的不懂写代码的人当时怎么想的。 例如有这么一段: 用户输入一个名字&#…...
信道编码:Matlab RS编码、译码使用方法
Matlab RS编码、译码使用方法 1. 相关函数 在MATLAB中进行RS编码的过程可以使用rsenc()函数或者comm.RSEncoder()函数。 1.1 rsenc()函数使用方法 在MATLAB中帮助中可以看到有三种使用形式,分别为 code rsenc(msg,n,k) code rsenc(msg,n,k,genpoly) code rs…...
数据结构第六章 图 6.1-6.3 错题整理
6.1 6.C 加上一个点实现非连通 去除每个边都是一颗不同的生成树 一共n条边 13.C n个顶点、e条边的无向图,森林。树的角度看,除了根节点没有一条边与其对应,其他顶点都对应一条边,用顶点-边得出有多少颗树 14.A II 等于 也可以…...
12 MFC常用控件(一)
文章目录 button 按钮设置默认按钮按下回车后会响应禁用开启禁用设置隐藏设置显示设置图片设置Icon设置光标 Cbutton 类创建按钮创建消息单选按钮多选按钮 编辑框组合框下拉框操作 CListBox插入数据获取当前选中 CListCtrl插入数据设置表头修改删除 button 按钮 设置默认按钮按…...
Springboot搭配Redis实现接口限流
目录 介绍 限流的思路 代码示例 必需pom依赖 自定义注解 redis工具类 redis配置类 主拦截器 注册拦截器 介绍 限流的需求出现在许多常见的场景中: 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动 某 api 被各式各样…...
php中的双引号与单引号的基本使用
字符串,在各类编程语言中都是一个非常重要的数据类型 网页当中的图片,文字,特殊符号,HTMl标签,英文等都属于字符串 PHP字符串变量用于存储并处理文本, 在创建字符串之后,我们就可以对它进行操作。我们可以直接在函数中使用字符串,或者把它存储在变量中 字…...
【Neo4j教程之CQL命令基本使用】
🚀 Neo4j 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,C…...
Apikit 自学日记:发起文档测试-TCP/UDP
进入某个TCP/UDP协议的API文档详情页,点击文档上方 测试 标签,即可进入 API 测试页,系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求参数 与发起HTTP协议测试类似&am…...
坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第1期培训
中国邮政储蓄银行金融科技前沿技术发展与应用场景第1期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力,是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市,2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…...
HBase分布式安装配置
首先 先安装zookeeper ZooKeeper配置 解压安装 解压 tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt 改名 mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7 在根目录下创建两个文件夹 mkdir Zlogs mkdir Zdata配置zoo.cfg文件,在解压后的ZooKeep…...
Microsoft365有用吗?2023最新版office有哪些新功能?
office自97版到现在已有20多年,一直是作为行业标准,格式和兼容性好,比较正式,适合商务使用。包含多个组件,除了常用的word、excel、ppt外,还有收发邮件的outlook、管理数据库的access、排版桌面的publisher…...
结构体的定义与实例化
结构体的定义与实例化 在Go语言中,结构体是一种用户自定义的数据类型(复合类型,而非引用类型),可以用来封装多个不同类型的数据成员。结构体的定义和实例化分别如下: 结构体的定义 结构体的定义使用关键…...
canvas详解03-绘制图像和视频
canvas 更有意思的一项特性就是图像操作能力。可以用于动态的图像合成或者作为图形的背景,以及游戏界面(Sprites)等等。浏览器支持的任意格式的外部图片都可以使用,比如 PNG、GIF 或者 JPEG。你甚至可以将同一个页面中其他 canvas 元素生成的图片作为图片源。 引入图像到 …...
VB+ACCESS高校题库管理系统设计与实现
开发数据库题库管理系统主要是为了建立一个统一的题库,并对其用计算机进行管理,使教师出题高效、快捷。 其开发主要包括后台数据库的建立、维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完…...
centos 安装 nginx
1.下载nginx安装包 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 下载到了当前目录下 2.解压安装包 解压后的结果 3.安装依赖 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 4. ./configure --prefix/usr/lo…...
TCP/IP详解(一)
TCP/IP协议是Internet互联网最基本的协议,其在一定程度上参考了七层OSI(Open System Interconnect,即开放式系统互联)模型 OSI参考模型是国际组织ISO在1985年发布的网络互联模型,目的是为了让所有公司使用统一的规范来…...
three.js的学习
Threejs 1 前言 Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。 既然Threejs是一款WebGL三维引擎,那么它可以用来做什么想必你一定很关心。所以接下来内容会展示大量基于…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
