网格搜索

网格搜索,通过在一张网内对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作图相关推荐

  1. python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV、hyperopt)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 优化的相关的知识内容可以参 ...

  2. 2019 高教社杯数模竞赛A题 高压油管的压力控制 题解

    2019 高教社杯数模竞赛A题 高压油管的压力控制 题解 问题一题解 分析 求解 求解微分方程 求解管内燃油密度变化 问题二题解 分析 求解 燃油的进入 燃油的喷出 模型的求解 问题三题解 分析 求解 ...

  3. 2019全国大学生数学建模竞赛题目A题 高压油管的压力控制

    A题 高压油管的压力控制 问题一: 稳定模型 如何设置单向阀每次开启的时长,使得高压油管内的压力尽可能稳定在 100 M P a 100MPa 100MPa左右.首先要明确高压油管的工作原理以及过程. ...

  4. 【数学建模】机器学习预测算法(KNN、随机森林、网格搜索对决策树、支持向量机)(Python代码实现)【2021华为杯】

    目录 1 题目 2 数据集介绍及建模目标 3 问题 4 简化描述 5 Python代码实现 1 题目 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现,雌激 ...

  5. python网格搜索核函数_(转载)Python机器学习笔记GridSearchCV(网格搜索)

    转载声明 介绍 在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就 ...

  6. Python机器学习:KNN算法06网格搜索

    code import numpy as np import matplotlib.pyplot as plt import matplotlib from sklearn import datase ...

  7. python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...

    一种方法是使用Pipeline,SVC(kernel ='precomputed')并将自定义内核函数包装为sklearn估计器(BaseEstimator和TransformerMixin的子类)) ...

  8. [转载] python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV、hyperopt)

    参考链接: Python中的网格搜索优化算法 分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏)  pyth ...

  9. Python机器学习笔记 Grid SearchCV(网格搜索)

    在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...

  10. Python集成机器学习:用AdaBoost、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化

    最近我们被客户要求撰写关于集成机器的研究报告,包括一些图形和统计输出. Boosting 是一类集成机器学习算法,涉及结合许多弱学习器的预测. 视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实 ...

最新文章

  1. 交换安全老师课堂笔记
  2. ALV GRID学习笔记----Double Click事件
  3. 【资源】学 AI 该学哪些斯坦福 CS 课程,这个清单安排得明明白白
  4. Android微信视频播放填坑指南
  5. CL_CRM_REPORT_ACCRULE_ONEORDER
  6. MySQL账户安全设置
  7. mysql show profile详解_SQL 性能分析利器 show profile
  8. 用汇编写系统服务程序
  9. JS弹出可拖动层,并蒙住页面
  10. 守护进程和inetd超级服务器
  11. 【284天】每日项目总结系列022(2017.11.16)
  12. 身体排毒,自己就可以轻松搞定 - 生活至上,美容至尚!
  13. YDOOK:MyPLayer:Jinwei Lin 最新开源 Python 音频视频基本播放器
  14. java processing_1 Processing入门简介
  15. Altium Designer 19.1.18 - 隐藏某一个网络的飞线
  16. matlab 生成 gif
  17. XML中PCDATA与CDATA的区别
  18. 对捕金猎人的买涨买跌交易感悟?(交易基础篇)
  19. 数据可视化BI平台选型调研报告 Superset VS Redash VS Metabase
  20. 快速学习正则表达式,不用死记硬背,示例让你通透(上篇)

热门文章

  1. vivado第三方编辑器的使用
  2. 如何才能找到好用的ip软件呢,或者下载ip软件
  3. 联想Y9000X Opencore引导黑苹果Catalina10.15.6安装教程
  4. 快速排序 时间复杂度计算
  5. 以业务流程为框架的企业组织设计
  6. java 坦克大战 素材_经典90坦克大战素材
  7. 分享一款免费好用的redis客户端
  8. java常用设计模式总结
  9. 傲腾™,企业应用加速利器!
  10. 疯狂Java讲义笔记汇总