关于2019高压油管网格搜索可视化Python作图
网格搜索
网格搜索,通过在一张网内对x,yx,yx,y离散搜索,可以得出关于目标函数在每一个x,yx,yx,y散点的值,做可视化的时候我想到了山峰的三维表面图。
一个简单的事例
已知xxx的范围,yyy的范围,还有对应每一个x,yx,yx,y的高程数据zzz,我们就可以利用python作图。
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3])
z = np.array([[122, 424, 221, 231, 742],
[231, 421, 423, 523, 215],
[213, 124, 231, 422, 633],
[151, 532, 241, 734, 215]])
import matplotlib.pyplot as plt
import numpy as npx = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3])
z = np.array([[122, 424, 221, 231, 742],[231, 421, 423, 523, 215],[213, 124, 231, 422, 633],[151, 532, 241, 734, 215]])plt.figure()
ax = plt.axes(projection='3d')
X, Y = np.meshgrid(x, y)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_ylabel('z')
ax.plot_surface(X, Y, z, cmap='afmhot')
plt.show()
数据纯属胡编乱造,怎么样,是不是很有趣。在这个示例代码中,x,yx,yx,y的值我是从0开始设置的,步长为111,也就是正好对应着zzz的下标,但在实际应用过程中,xxx,yyy并不是从111开始的,而且zzz也一般是通过xxx,yyy确定的,所以需要用嵌套for循环,再设置两个下标变量,解决实际应用问题,请看以下代码。
关于高压油管此题的搜索可视化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mathdata = '附件3-弹性模量与压力.xlsx'
data = pd.read_excel('附件3-弹性模量与压力.xlsx') # 导入附件3数据
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号x_pandas_list = data[u'燃油密度(mm3/ms)'] # 附件3 燃油密度列数据
y_pandas_list = data[u'压力(MPa)'] # 附件3 压力列数据coefficient1_numpy_list = np.polyfit(x_pandas_list, y_pandas_list,2) # [ 10784.65349198 -15693.86029255 5648.09019803]y=压强 x=密度拟合系数def ρ_P(x): # 密度转压力函数return coefficient1_numpy_list[0] * x ** 2 + coefficient1_numpy_list[1] * x + coefficient1_numpy_list[2]coefficient2_numpy_list = np.polyfit(y_pandas_list, x_pandas_list,2) # [-6.59843062e-07 5.23409641e-04 8.04251284e-01]y=密度 x=压强拟合系数def P_ρ(x): # 压力转密度函数return coefficient2_numpy_list[0] * x ** 2 + coefficient2_numpy_list[1] * x + coefficient2_numpy_list[2]C = 0.85 # 流量系数d_a = 1.4 # 小孔处的直径1.4mm
r_a = d_a / 2 # 小孔处的半径1.4mm
A = S_a = math.pi * r_a ** 2 # 小孔处的面积1.5393804002589984mm2l_primary = 500 # 内腔长度500mm
d_primary = 10 # 内腔直径10mm
r_primary = d_primary / 2 # 内腔半径5mm
S_primary = math.pi * r_primary ** 2 # 内腔横截面积78.53981633974483mm2
V_primary = S_primary * l_primary # 内腔体积39269.90816987242mm3ρ0 = 0.85 # 初始100MPa压力下的密度
ρ160 = P_ρ(160) # 160MPa压力下的密度 0.8711048440368855mg/mm3
m0 = ρ0 * V_primary # 初始高压油管油气33379.42194439156mgt = 0 # 记录时刻
t_ = 0.1 # 每隔0.01ms时间段刷新一次状态
m = m0 # 记录每一时刻高压油管内的质量 初始为m0
P = 100 # 记录每一时刻高压油管内的压强
ρ = 0.85 # 录每一时刻高压油管内的密度
P_list = [] # 压强时刻表# 进油函数 参数t为时刻,t1为进油时间段
def enter(t, t1):global m, P, ρ # 全局变量,可做修改if 0 < t % (t1 + 10) < t1:Q = C * A * math.sqrt(2 * (160 - P) / ρ160) # 单位时间进油量det_m = Q * ρ160 * t_ # 0.01为步长 质量改变量m = m + det_m # 更新质量rou = m / V_primary # 更新密度P = ρ_P(rou) # 更新压强else:pass# 出油函数 参数t为时刻,t0为出油时刻
def out(t, t0):global m, P, ρ # 全局变量,可做修改if t0 < (t % 100) < t0 + 0.2: # 第一段0~0.2msQ = (t - t0) % 100 * 100 # 在不同周期内时刻的流量det_m = Q * ρ * t_ # 0.01为步长 质量改变量m = m - det_m # 更新质量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新压强elif t0 + 0.2 <= (t % 100) < t0 + 2.2: # 第二段0.2~2.2msQ = 20det_m = Q * ρ * t_ # 0.01为步长 质量改变量m = m - det_m # 更新质量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新压强elif t0 + 2.2 <= (t % 100) <= t0 + 2.4: # 第三段2.2~2.4msQ = ((t - t0) * (-100) + 240) % 100det_m = Q * ρ * t_ # 0.01为步长 质量改变量m = m - det_m # 更新质量ρ = m / V_primary # 更新密度P = ρ_P(ρ) # 更新压强else:passsum_min = 10000000000000 # 刷新压力波动最小值
P_list_min = [] # 波动最小的压力差表
i_best = 0 # 最优开阀门时长
j_best = 0 # 最优出气时刻x = np.arange(0.285, 0.29, 0.001)
y = np.arange(50, 60, 1)
z = np.zeros([len(y), len(x)])
q = -1for i in x: # 遍历开阀门时长 start->endq = q + 1p = -1for j in y: # 遍历出气时刻 start->endp = p + 1sum = 0 # 记录压力波动偏差t = 0 # 每次循环刷新时刻从0开始P_list = [] # 每次循环刷新压力时刻表 为空表while t <= 5000: # 时间可修改,单位为ms 循环2000/t_次t = t + t_enter(t, i)out(t, j)P_list.append(P)sum = sum + abs(P - 100) # 每隔t_=0.01ms时刻记录一下总波动 best=sum|P-100|z[p][q] = sumprint('开始遍历:', 'i =', i, 'j =', j)print('压差距离最优质值和(越小越好):', sum)if sum_min > sum:sum_min = sumi_best = ij_best = jP_list_min = P_listprint('最优开阀门时长为:', i_best, '最优出气时刻为:', j_best)len_P_list = len(P_list) # 长度为设值遍历长度个
x_numpy_list = np.arange(0, len_P_list * t_, t_) # 每隔0.01ms列一个x坐标与P_list对应plt.figure() # 创建一个绘图对象
ax = plt.axes(projection='3d') # 用这个绘图对象创建一个三维坐标轴对象
X, Y = np.meshgrid(x, y)
ax.plot_surface(X, Y, z, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
关于2019高压油管网格搜索可视化Python作图相关推荐
- python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV、hyperopt)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 优化的相关的知识内容可以参 ...
- 2019 高教社杯数模竞赛A题 高压油管的压力控制 题解
2019 高教社杯数模竞赛A题 高压油管的压力控制 题解 问题一题解 分析 求解 求解微分方程 求解管内燃油密度变化 问题二题解 分析 求解 燃油的进入 燃油的喷出 模型的求解 问题三题解 分析 求解 ...
- 2019全国大学生数学建模竞赛题目A题 高压油管的压力控制
A题 高压油管的压力控制 问题一: 稳定模型 如何设置单向阀每次开启的时长,使得高压油管内的压力尽可能稳定在 100 M P a 100MPa 100MPa左右.首先要明确高压油管的工作原理以及过程. ...
- 【数学建模】机器学习预测算法(KNN、随机森林、网格搜索对决策树、支持向量机)(Python代码实现)【2021华为杯】
目录 1 题目 2 数据集介绍及建模目标 3 问题 4 简化描述 5 Python代码实现 1 题目 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现,雌激 ...
- python网格搜索核函数_(转载)Python机器学习笔记GridSearchCV(网格搜索)
转载声明 介绍 在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就 ...
- Python机器学习:KNN算法06网格搜索
code import numpy as np import matplotlib.pyplot as plt import matplotlib from sklearn import datase ...
- python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
一种方法是使用Pipeline,SVC(kernel ='precomputed')并将自定义内核函数包装为sklearn估计器(BaseEstimator和TransformerMixin的子类)) ...
- [转载] python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV、hyperopt)
参考链接: Python中的网格搜索优化算法 分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) pyth ...
- Python机器学习笔记 Grid SearchCV(网格搜索)
在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...
- Python集成机器学习:用AdaBoost、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
最近我们被客户要求撰写关于集成机器的研究报告,包括一些图形和统计输出. Boosting 是一类集成机器学习算法,涉及结合许多弱学习器的预测. 视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实 ...
最新文章
- 交换安全老师课堂笔记
- ALV GRID学习笔记----Double Click事件
- 【资源】学 AI 该学哪些斯坦福 CS 课程,这个清单安排得明明白白
- Android微信视频播放填坑指南
- CL_CRM_REPORT_ACCRULE_ONEORDER
- MySQL账户安全设置
- mysql show profile详解_SQL 性能分析利器 show profile
- 用汇编写系统服务程序
- JS弹出可拖动层,并蒙住页面
- 守护进程和inetd超级服务器
- 【284天】每日项目总结系列022(2017.11.16)
- 身体排毒,自己就可以轻松搞定 - 生活至上,美容至尚!
- YDOOK:MyPLayer:Jinwei Lin 最新开源 Python 音频视频基本播放器
- java processing_1 Processing入门简介
- Altium Designer 19.1.18 - 隐藏某一个网络的飞线
- matlab 生成 gif
- XML中PCDATA与CDATA的区别
- 对捕金猎人的买涨买跌交易感悟?(交易基础篇)
- 数据可视化BI平台选型调研报告 Superset VS Redash VS Metabase
- 快速学习正则表达式,不用死记硬背,示例让你通透(上篇)