2024年第九届数维杯大学生数学建模挑战赛C 题解题思路1.0版本

题目分析:

问题背景:天然气水合物作为一种高效的清洁后备能源,其资源量评估对未来能源开发极为重要。

具体任务:

0.数据预处理

首先将txt中的数据合并到表格里方便后续操作,从Excel文件导入数据,清洗数据,包括删除标记为无效的数据(如-9999)。对其中空缺值使用克里金插值进行补充。

将数据重构成适合分析的格式,为每个钻井分配独立的列(深度、孔隙度、含水合物饱和度)。并进行初始数据的可视化,

首先我们可以对附件二的地理位置以及部分附件一的数据进行可视化。井位可视化:利用钻井的X、Y坐标在地图上绘制井位,以直观展示钻井的空间分布。钻井数据可视化:选择个别钻井(例如w01和w02),绘制孔隙度和含水合物饱和度随深度的变化曲线图,以了解地质参数的分布特征。 

 

 

  1. 确定天然气水合物资源分布范围。

根据钻井数据,确定资源分布的可能边界。这可以通过建立最小外接矩形、Voronoi图或使用空间插值方法(如克里金插值)来完成,以描绘资源的概率分布图。

我们可以绘制单一井的可视化,也可以绘制七个井的可视化,

 

 

最后利用py输出每一个井的高低差即可,并机型可视化表达。 

  1. 研究资源参数的概率分布及变化规律。

描述性统计分析:计算每个参数的统计描述(均值、中位数、方差等)并绘制其分布(直方图、箱形图)。

概率模型选择:根据数据特性选择合适的概率分布模型(如正态分布、对数正态分布或贝塔分布)来拟合各参数。

地统计学分析:利用克里金方法或其他空间插值技术,研究参数在研究区域内的空间变异性,为参数的空间分布提供模型。

我们实际使用了四种不同的分布拟合情况:正态分布、对数正态分布、Weibull分布和Beta分布,结果均不理想,具体结果如下所示

 

各种分布方式P值都很低,因此,使用混合分布模型,最终得出含有5个高斯分布组件的模型作为最佳模型。 

  1. 给出资源量的概率分布估计。

集成模型建立:结合前步骤的地统计模型,计算每个位置的资源量预测值。

蒙特卡洛模拟:利用蒙特卡洛方法对资源量进行随机模拟,以产生资源量的概率分布。

资源量汇总:使用统计方法(如积分或求和)从模拟数据中估计整个区域的总资源量和不确定性。

Q=A*Z*O*S*E 式中,Q为天然气水合物资源量(m3),A是有效面积m2,Z为有效厚度(m),O为孔隙度,S为水合物饱和度,E是产气量因子(取值为 155)。 对于每个井位有效面积m2、有效厚度(m)、产气量因子均不一样。 同一井位有效面积m2、有效厚度(m)、产气量因子一样,水合物饱和度、孔隙度,因此对于给出天然气水合物资的概率分布,对于同一井位的只需要看位两者乘积的变化,对于不同井位需要考虑水合物饱和度、孔隙度水合物饱和度、孔隙度四者的乘积,

  1. 讨论如何安排额外的钻孔位置以优化资源勘探。

数据评估:分析现有钻孔数据,识别数据空白区域或参数高变异性区域。

优化模型:应用地统计学和优化算法(如遗传算法或模拟退火)来选择最佳钻井位置。这些位置应当能最大化潜在资源的发现概率,同时考虑成本效益。

多目标决策分析:考虑多个因素(如成本、资源潜力和环境影响),使用决策支持系统或多标准决策分析来最终确定钻井位置。

  1. 使用了Voronoi图中心作为新井位置的候选点,一个有效的策略是通过计算现有Voronoi区域中未充分覆盖的最大区域,并在这些区域中心放置新井。
  2. 使用K-均值聚类算法确定新钻井点的位置,可以帮助均匀地分布井位,以便均衡资源勘探的效率
  3. 通过蒙特卡洛模拟随机生成新井位置,并计算每种可能位置的效益(如覆盖未探测区域的比例),重复多次以找到最优解。
  4. 最大化覆盖模型

这种模型旨在选择井位以最大化地区资源的勘探覆盖率。这可以通过求解一个最大覆盖问题来完成,其中目标是最大化在新井的影响半径内的未探测区域的覆盖。

 

 数据合并 python代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# Load the Excel file
file_path = '附件1:钻井测量数据.xlsx'
data = pd.read_excel(file_path)# Define the number of wells (from the provided well names)
num_wells = 14# Create a list for restructured data
well_data_list = []# Process each well's data block (three columns per well: Depth, Porosity, Saturation)
for i in range(num_wells):# Extracting each block, naming columns accordinglystart_col = 3 * iwell_data = data.iloc[1:, start_col:start_col+3]well_data.columns = ['Depth', 'Porosity', 'Saturation']well_data['Well'] = f"w{i+1:02d}"  # Naming wells as w01, w02, ..., w14well_data_list.append(well_data)# Combine all well data into a single DataFrame
combined_well_data = pd.concat(well_data_list, ignore_index=True)# Convert data types and handle missing values marked as -9999
combined_well_data = combined_well_data.replace(-9999, pd.NA).dropna().astype({'Depth': 'float64', 'Porosity': 'float64', 'Saturation': 'float64'})# Save the cleaned and combined data to a new Excel file
output_file_path = 'Cleaned_Drilling_Data.xlsx'
combined_well_data.to_excel(output_file_path, index=False)# Given well positions
well_positions = {'w01': (34500, 45000), 'w02': (36000, 45050), 'w03': (37050, 45020),'w04': (37880, 46000), 'w05': (35000, 46030), 'w06': (36000, 46500),'w07': (34000, 47100), 'w08': (36200, 47330), 'w09': (34560, 48530),'w10': (35520, 48120), 'w11': (38000, 49300), 'w12': (35700, 50000),'w13': (34000, 49600), 'w14': (35800, 49900)
}# Create a plot for well positions
plt.figure(figsize=(10, 8))
for well, (x, y) in well_positions.items():plt.scatter(x, y, label=well, s=100)plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Geographic Positions of Wells')
plt.legend(title='Well Name')
plt.grid(True)
plt.show()
# Selecting two wells for detailed visualization: Well w01 and Well w02
selected_wells = ['w01', 'w02']# Filtering data for the selected wells
selected_data = combined_well_data[combined_well_data['Well'].isin(selected_wells)]# Plotting data for the selected wells
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10), sharex=True)# Plotting Porosity and Saturation against Depth for each selected well
for i, well in enumerate(selected_wells):# Porosity plotax = axes[i, 0]well_data = selected_data[selected_data['Well'] == well]ax.plot(well_data['Depth'], well_data['Porosity'], label=f"Porosity of {well}")ax.set_title(f"Porosity Profile for {well}")ax.set_ylabel('Porosity')ax.grid(True)# Saturation plotax = axes[i, 1]ax.plot(well_data['Depth'], well_data['Saturation'], label=f"Saturation of {well}", color='r')ax.set_title(f"Saturation Profile for {well}")ax.set_ylabel('Saturation')ax.grid(True)# Set common labels
for ax in axes[:, 0]:ax.set_xlabel('Depth (m)')
for ax in axes[:, 1]:ax.set_xlabel('Depth (m)')plt.tight_layout()
plt.show()

数据预处理matlab代码

% 假设已经有了钻井的X和Y坐标
well_positions = [
34500, 45000;
36000, 45050;
37050, 45020;
37880, 46000;
35000, 46030;
36000, 46500;
34000, 47100;
36200, 47330;
34560, 48530;
35520, 48120;
38000, 49300;
35700, 50000;
34000, 49600;
35800, 49900
];% 创建Voronoi图
figure;
voronoi(well_positions(:,1), well_positions(:,2));
title('Voronoi Diagram of Well Locations');
xlabel('X Coordinate');
ylabel('Y Coordinate');
grid on;% 创建最小外接矩形
k = convhull(well_positions(:,1), well_positions(:,2));
hold on;
plot(well_positions(k,1), well_positions(k,2), 'r-', 'LineWidth', 2);
legend('Voronoi edges', 'Convex hull boundary');
hold off;well_data = readtable('Cleaned_Drilling_Data.xlsx');% 添加X和Y坐标到well_data
well_names = {'w01', 'w02', 'w03', 'w04', 'w05', 'w06', 'w07', 'w08', 'w09', 'w10', 'w11', 'w12', 'w13', 'w14'};
for i = 1:length(well_names)
idx = strcmp(well_data.Well, well_names{i});
well_data.X(idx) = well_positions(i, 1);
well_data.Y(idx) = well_positions(i, 2);
end
[XI, YI] = meshgrid(min(well_positions(:,1)):100:max(well_positions(:,1)), ...
min(well_positions(:,2)):100: max(well_positions(:,2)));% 创建插值网格
[XI, YI] = meshgrid(min(well_data.X):100:max(well_data.X), ...
min(well_data.Y):100:max(well_data.Y));% 初始化结果矩阵
ZI = zeros(size(XI));% 对每个网格点进行插值
for i = 1:size(XI, 1)
for j = 1:size(XI, 2)
ZI(i, j) = simpleKriging(well_data.X, well_data.Y, well_data.Saturation, XI(i, j), YI(i, j));
end
end% 可视化插值结果
figure;
mesh(XI, YI, ZI);
hold on;
plot3(well_data.X, well_data.Y, well_data.Saturation, 'ro');
title('Spatial Interpolation using Simple Kriging');
xlabel('X Coordinate');
ylabel('Y Coordinate');
zlabel('Resource Saturation');
hold off;

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】逻辑回归:智能垃圾邮件分类实例

逻辑回归:智能垃圾邮件分类的利器 一、引言二、逻辑回归概述三、垃圾邮件分类实例数据准备特征选择与建模 四、总结与展望 一、引言 随着互联网的迅猛发展,电子邮件已成为人们日常生活和工作中不可或缺的一部分。然而,与此同时,垃…

综合能力 | 误差 | 学习笔记

误差指真值与观测值的差值。 误差分为系统误差(消除方法:观测方法、仪器校正、修正等)、偶然误差(符合正态分布规律,进行计算纠正)、粗差(一般舍弃)。 中误差(均方差或标…

如何用 OceanBase做业务开发——【DBA从入门到实践】第六期

当应用一款新的数据库时,除了基础的安装部署步骤,掌握其应用开发方法才是实现数据库价值的关键。为此,我们特别安排了5月15日(周三)的《DBA 从入门到实践》第六期课程——本次课程将带大家了解OceanBase数据库的开发流…

探索静态住宅IP代理:保障网络安全与隐私的新途径

在数字化时代,互联网已经成为人们日常生活和工作的重要组成部分。然而,网络安全和隐私保护问题也随之而来,成为广大网民关注的焦点。静态住宅IP代理作为一种新兴的网络技术,以其独特的功能和优势,逐渐受到用户的青睐。…

IIS配置SSL,根据pem和key生成pfx,openssl的版本不能太高

1、生成pfx文件 供应商给的文件是pef和key后缀的两个文件,在IIS里不好导入(如果有知道好导入的可以给我留言,谢谢。)。 1.1 下载OpenSSL工具,并安装。 主要用于将.pem文件转成.pfx文件。 下载OpenSSL的链接:http://slproweb.com/…

【科学研究】秒懂C刊|微信不只是工具更重新定义了生活‼️ 摘 要:存在现象学的技术论,打破了现有新媒

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

【020】基于JavaWeb实现的批报管理系统

项目介绍 基于jspservlet实现的批报管理系统采用B/S架构,该项目设计了一个角色管理员,管理员实现了我的案件、查询统计、项目维护等三大功能模块 技术栈 开发工具:Idea2020.3 运行环境:jdk1.8tomcat9.0mysql5.7 服务端技术:j…

1.基于python的单细胞数据预处理-特征选择

文章目录 特征选择背景基于基因离散度基于基因归一化方差基于基因皮尔森近似残差特征选择总结 参考: [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 特征选择背景 现在已经获得了经过…

Python之数据分析基础

导言: “21世纪的竞争是数据的竞争,谁掌握数据,谁就掌握未来”。如何将大量看似杂乱无章的数据进行聚合,并发现潜在的规律也变得越来越重要。本文将先说明数据分析的步骤,再通过python完成实例数据的处理、分析最终展…

针对 % 号 | 引起的 不安全情况

把网站开放的课程都检索下来了 一、情况1 org.apache.tomcat.util.http.Parameters processParameters 信息: Character decoding failed. Parameter [Mac] with value [%%%] has been ignored. Note that the name and value quoted here may be corrupted due to the failed…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第4章 Ubuntu20.04支持中文

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

电商购物系统商品数据结构设置

电商购物系统商品数据结构设置 如上图所示 , 该表为商品表关系的示意图 , 气质我们要溥仪一个电视购物系统要用到的知识那就是SPU和SKU 简单来说这两种就是不同的分类方式 , 我们在浏览淘宝等页面的时候也会遇见相同的情况如我们可以进行品牌的筛选 , 也可以进行商品价格的筛选…

C# WinForm —— 13 ComboBox下拉框/组合框介绍

1. 简介 ComboBox 是由 textBox 和 listBox 组合而成的,只能选择一项,不能选择多项,其他功能和 listBox类似 ComboBox 下拉框的三种样式:(通过 DropDownStyle属性 设置) Simple: 最简单的样式&#xff0c…

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

QML 本地存储(Setting,sqlite)

Qt hello - 专注于Qt的技术分享平台 QML 原生的储存方有两种: 1,Settings 跟QWidget 中的QSettings 一样,可以简单的存储一些配置。 2,Sqlite sqlite数据库。可以存储一些复杂的数据。 一,Settings 我们以一个按钮的位…

揭秘微服务架构:十大设计模式助力企业数字化转型

微服务架构中10个常用的设计模式 微服务是一种架构风格,它将一个复杂的应用拆分成多个独立自治的服务,每个服务负责应用程序中的一小部分功能。这些服务通过定义良好的API进行通信,通常是HTTP RESTful API或事件流。微服务架构的主要特点包括…

【SpringSecurity源码】过滤器链加载流程

theme: smartblue highlight: a11y-dark 一、前言及准备 1.1 SpringSecurity过滤器链简单介绍 在Spring Security中,过滤器链(Filter Chain)是由多个过滤器(Filter)组成的,这些过滤器按照一定的顺序对进…

工作中使用Optional处理空指针异常

工作中使用Optional处理空指针异常 实体类以前对空指针的判断Optional处理空指针测试结果 实体类 package po;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;Data AllArgsConstructor NoArgsConstruct…

某大型集团SAP数字化转型方案(95页PPT)

一、资料介绍 《某大型集团SAP数字化转型方案》是一份详尽的95页PPT资料,旨在为某大型集团提供一套全面而深入的SAP数字化转型方案。该方案紧密结合了集团的业务特点和发展需求,以SAP系统为核心,通过数字化技术的运用,实现业务流…

图片格式不对怎么转换?推荐几个图片转换的高效处理方法

在日常使用电脑或处理图片的过程中,我们经常会遇到图片格式不兼容的问题,例如,我们可能收到了一个无法打开的图片文件,或者想将图片转换为其他格式以便在不同的应用程序中使用,这时候就需要将图片转格式,所…