实现了一个基于 OpenFOAM 的强化学习环境类OpenFoam,用于模拟流体动力学问题并与智能体进行交互

代码实现了一个基于 OpenFOAM 的强化学习环境类OpenFoam,用于模拟流体动力学问题并与智能体进行交互。该环境类继承自gym.Env,提供了与强化学习算法进行交互的接口,包括初始化环境、执行动作、获取状态和奖励、重置环境以及关闭环境等方法。

#完整代码下载:https://download.csdn.net/download/huanghm88/89909280

from typing import Any, Callable, List, Optional, Tuple, Unionimport gym
import numpy as np
import os
import re
import shutil
from abc import ABCMeta, abstractmethod
from time import time
from scipy import signal
import numpy as np
import pandas as pd
from DRLinFluids import cfd, utils
from gym import spaces, logger
from gym.utils import seeding
from tianshou.utils import RunningMeanStd
from sklearn.preprocessing import StandardScalerclass OpenFoam(gym.Env):def __init__(self,foam_root_path:Optional[str]= None,foam_params: Optional[dict]= None,agent_params: Optional[dict]= None,state_params: Optional[dict]= None,server=True,**kwargs):self.foam_params = foam_paramsself.agent_params = agent_paramsself.state_params = state_paramsself.foam_root_path = foam_root_pathself.task = 'OpenFoam-v0'self.state_params['probe_info'] = utils.read_foam_file('/'.join([foam_root_path, 'system', 'probes']))self.dashboard_data = {}self.trajectory_start_time = 0self.trajectory_end_time = 0self.num_episode = 0self.info_list = []self.episode_reward_sequence = []self.exec_info = {}self.num_trajectory = 0self.trajectory_reward = np.array([])self.all_episode_trajectory_reward = pd.DataFrame()self.state_data = np.array([])self.episode_reward = 0self.decorated_actions = np.array([])self.actions_sequence = np.array([])self.start_actions = 0self.end_actions = 0self.single_step_actions = np.array([])self.all_episode_actions = pd.DataFrame()self.all_episode_decorated_actions = pd.DataFrame()self.all_episode_single_step_actions = pd.DataFrame()self.probe_velocity_df = pd.DataFrame()self.probe_pressure_df = pd.DataFrame()self.force_df = pd.DataFrame()self.force_Coeffs_df = pd.DataFrame()self.history_force_df = pd.DataFrame()self.initial_force_Coeffs_df = pd.DataFrame()self.history_force_Coeffs_df = pd.DataFrame()self.history_force_Coeffs_df_alltime = pd.DataFrame()self.history_force_Coeffs_df_stepnumber=0self.start_time_float=0self.end_time_float=0self.action_time = 0self.vortex_shedding = 0self.svd_rank_df=10self.cfd_init_time_str = str(float(foam_params['cfd_init_time'])).rstrip('0').rstrip('.')self.decimal = int(np.max([len(str(agent_params['interaction_period']).split('.')[-1]),len(str(foam_params['cfd_init_time']).split('.')[-1])]))self.pressure_DMD_initial_snapshot=np.array([])self.control_matrix_gammaDMDc=np.array([])if server:action_tocsv_list = [[0, 0, 0, 0],[self.foam_params['cfd_init_time'], 0, 0, 0]]pd.DataFrame(action_tocsv_list).to_csv(self.foam_root_path + '/system/jet.csv', index=False, header=False)for f_name in os.listdir(self.foam_root_path):if f_name == 'prosessor0':shutil.rmtree('/'.join([self.foam_root_path, f_name]))elif f_name == 'prosessor1':shutil.rmtree('/'.join([self.foam_root_path, f_name]))elif f_name == 'prosessor2':shutil.rmtree('/'.join([self.foam_root_path, f_name]))elif f_name == 'prosessor3':shutil.rmtree('/'.join([self.foam_root_path, f_name]))else:passcfd.run_init(foam_root_path, foam_params)self.velocity_table_init = utils.read_foam_file(foam_root_path + f'/postProcessing/probes/0.000/U',dimension=self.foam_params['num_dimension'])cfd_init_time = int(self.foam_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第九届清洁能源与发电技术国际学术会议(CEPGT 2024)

第九届清洁能源与发电技术国际学术会议(CEPGT 2024) 2024 9th International Conference on Clean Energy and Power Generation Technology (CEPGT 2024) 【早投稿早录用,享受早鸟优惠】 CEPGT 2024会议已上线至IEEE官网 第九届清洁能源…

15分钟学Go 第2天:安装Go环境

第2天:安装Go环境 1. 引言 在学习Go语言之前,首先需要配置好本地开发环境。本节将详细介绍如何在Windows 11上安装和配置Go语言环境,包括安装步骤、环境变量设置、VS Code配置与测试、以及常见问题解决方案。完成这些步骤后,你将…

Java项目-基于springboot框架的基于协同过滤算法商品推荐系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

Android 中获取和读取短信验证码

方法一:通过 SMS Retriever API SMS Retriever API 是 Google 提供的一种安全的方式,可以从系统中获取不需要权限的短信验证码。这种方式不需要请求 READ_SMS 权限,非常适合处理短信验证码的情况。 1. 在 build.gradle 中添加依赖 dependen…

Kettle9.4支持Clickhouse数据源插件开发以及性能测试

前言 最近业务这边有个指标需要用到大数据这边的列式数据库进行处理,由于kettle不支持clickhouse数据源驱动,这里查了一下网上的相关资料,发现了一些别人开发好的驱动包,下载下来后使用效果不尽人意。总结下来有以下几个问题&…

【已解决】【Hadoop】 Shell命令易错点及解决方法

Hadoop是一个强大的分布式系统,用于处理大规模数据集。在使用Hadoop的过程中,熟练掌握其Shell命令是必不可少的。本文将介绍几个常用的Hadoop Shell命令,并总结一些常见的操作错误及其解决方法。 Hadoop Shell命令简介 Hadoop提供了多种She…

quic-go源码一---server启动

前言: 走马观花地看了RFC 9000:QUIC: A UDP-Based Multiplexed and Secure Transport, 感受不是那么直观,所以再来看看这个协议的golang语言实现:quic-go,加强学习。 https://quic-go.net/docs/quic/quic-go文档 本篇准备的代…

基于R语言机器学习方法在生态经济学领域中技术应用

近年来,人工智能领域已经取得突破性进展,对经济社会各个领域都产生了重大影响,结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一,目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…

linux命令之lvdisplay用法

lvdisplay 显示逻辑卷属性 补充说明 lvdisplay命令 用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。如果省略"逻辑卷"参数,则lvdisplay命令显示所有的逻辑卷属性。否则,仅显示指定的逻辑卷属性。 语法 lvdisplay(参数)参数 逻辑…

证件照小程序源码,前后端稳定运行

演示:证寸照制作 运行环境: Linux Nginx PHP >5.6 MySQL>5.6 安装步骤: 1.下载源码上传至你的服务器宝塔面板 2.直接添加站点选择源码目录,新建数据库 3.设置代码执行目录为/web 4.在浏览器中输入你的域名,会提示安装,填写…

SpringBoot02:第一个springboot程序

3、第一个springboot程序 3.1、准备工作 我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。 我的环境准备: java version "…

清朝笔记()

文章目录 刘罗锅是宰相吗?和珅和刘墉的实力 不知不觉中看了那么多清朝的狗血剧,不敢说多专业,和常规观众一样,应该也有些了解,其中有很多有趣的事情,做个笔记吧。 刘罗锅是宰相吗? 和珅和刘墉的实力

响应式轮播图 高级轮播

最近看到了一个轮播效果图&#xff0c;来自于B站UP主山羊の前端小窝&#xff0c;于是照着效果封装了一个 vue组件。 顺便做了一点改进&#xff0c;让整个轮播前后连贯起来。 效果图 轮播效果图 应用 index.vue <script setup lang"ts"> import Carousel fr…

智能优化算法-禁忌搜索算法(TS)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 禁忌搜索优化算法 (Tabu Search, TS) 是一种基于局部搜索的元启发式优化算法&#xff0c;由Fred Glover于1986年提出。TS通过引入“禁忌表”来避免重复搜索已经访问过的解&#xff0c;从而跳出局部最优解&#…

LeetCode718:最长重复子数组

题目链接&#xff1a;718. 最长重复子数组 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int findLength(vector<int>& nums1, vector<int>& nums2) {//dp[i][j]是以i-1为结尾和j-1为结尾的最长重复子数组//dp[i][j] dp[i…

十四、MySQL事务日志

文章目录 1. redo日志1.1 为什么需要REDO日志1.2 REDO日志的好处、特点1.2.1 好处1.2.2 特点1.3 redo的组成1.4 redo的整体流程1.5 redo log 的刷盘策略1.6 不同刷盘策略演示1.7 写入redo log buffer 过程1.7.1 补充概念:Mini-Transaction1.7.2 redo 日志写入log buffer1.7.3 …

Java-对一个List进行groupingBy分组操作同时保持原有的排序

在Java 8中,如果你想要对一个List进行分组操作同时保持原有的排序,可以使用Stream API结合 Collectors.groupingBy方法来实现。以下是一些关键点: 保持原有顺序:为了确保分组后的结果保持原有元素的顺序,可以使用LinkedHashMap作为收集 器的目标集合。LinkedHashMap会按…

[DB] NSM

Database Workloads&#xff08;数据库工作负载&#xff09; 数据库工作负载指的是数据库在执行不同类型任务时所需的资源和计算方式&#xff0c;主要包括以下几种类型&#xff1a; 1. On-Line Transaction Processing (OLTP) 中文&#xff1a;联机事务处理解释&#xff1a;…

如何使用DockerSpy检测你的Docker镜像是否安全

关于DockerSpy DockerSpy是一款针对Docker镜像的敏感信息检测与安全审计工具&#xff0c;该工具可以帮助广大研究人员在Docker Hub上检测和搜索自己镜像的安全问题&#xff0c;并识别潜在的泄漏内容&#xff0c;例如身份验证密钥等敏感信息。 功能介绍 1、安全审计&#xff1a…

Isaac Sim sensor插件报UnicodeDecodeError错误

在使用isaac sim或isaac lab时&#xff0c;如果涉及传感器插件&#xff0c;omni.isaac.sensor&#xff0c;可能会遇到如下编码错误&#xff0c;导致传感器无法正常使用。这个错误在isaac sim历代版本里一直都存在。 2024-10-22 08:42:59 [4,085ms] [Error] [carb.scripting-py…