2024 年 数维杯(C题)大学生数学建模挑战赛 | 天然气水合物资源 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。

CS团队倾注了大量时间和心血,深入挖掘解决方案。通过偏微分方程,多元目标规划等算法,设计了明晰的项目,团队努力体现在每个步骤,确保方案既创新又可行,为大家提供了全面而深入的洞见噢~

让我们来看看数维杯 (C题)

完整内容可以在文章末尾领取!

在这里插入图片描述

根据勘探数据确定天然气水合物资源的分布范围。

假设勘探区域内的天然气水合物资源分布为均匀分布,即每个点的资源量Q服从均值为μ、方差为σ的正态分布。根据勘探数据,可以得到14个点的坐标(x,y),表示14个钻孔的位置。

假设勘探区域的边界为一个矩形,左下角坐标为(0,0),右上角坐标为(l,w),其中l为矩形的长度,w为矩形的宽度。

根据题目中给出的公式可知,天然气水合物资源量Q与有效面积A、有效厚度Z、孔隙度φ、水合物饱和度S、产气量因子E相关。

假设每个钻孔位置的有效面积为A0,有效厚度为Z0,孔隙度为φ0,水合物饱和度为S0,产气量因子为E0,可以将天然气水合物资源量Q表示为:

Q = A 0 × Z 0 × φ 0 × S 0 × E 0 Q = A_0 × Z_0 × φ_0 × S_0 × E_0 Q=A0×Z0×φ0×S0×E0

根据题目中给出的勘探数据,我们可以得到14个钻孔的有效面积、有效厚度、孔隙度、水合物饱和度和产气量因子的平均值和方差,分别为μA、μZ、μφ、μS、μE和σA、σZ、σφ、σS、σE。

因此,钻孔位置(x,y)处的天然气水合物资源量Q(x,y)可以表示为:

Q ( x , y ) = A 0 ( x , y ) × Z 0 ( x , y ) × φ 0 ( x , y ) × S 0 ( x , y ) × E 0 ( x , y ) Q(x,y) = A_0(x,y) × Z_0(x,y) × φ_0(x,y) × S_0(x,y) × E_0(x,y) Q(x,y)=A0(x,y)×Z0(x,y)×φ0(x,y)×S0(x,y)×E0(x,y)

其中,

A 0 ( x , y ) = μ A + σ A n ξ A A_0(x,y) = \mu_A + \frac{\sigma_A}{\sqrt{n}}ξ_A A0(x,y)=μA+n σAξA

Z 0 ( x , y ) = μ Z + σ Z n ξ Z Z_0(x,y) = \mu_Z + \frac{\sigma_Z}{\sqrt{n}}ξ_Z Z0(x,y)=μZ+n σZξZ

φ 0 ( x , y ) = μ φ + σ φ n ξ φ φ_0(x,y) = \mu_φ + \frac{\sigma_φ}{\sqrt{n}}ξ_φ φ0(x,y)=μφ+n σφξφ

S 0 ( x , y ) = μ S + σ S n ξ S S_0(x,y) = \mu_S + \frac{\sigma_S}{\sqrt{n}}ξ_S S0(x,y)=μS+n σSξS

E 0 ( x , y ) = μ E + σ E n ξ E E_0(x,y) = \mu_E + \frac{\sigma_E}{\sqrt{n}}ξ_E E0(x,y)=μE+n σEξE

其中,n为14,表示钻孔的数量,ξ为服从标准正态分布的随机数。

根据题目要求,我们需要确定天然气水合物资源的分布范围,即需要确定使得Q(x,y)大于某个阈值的所有(x,y)的范围。

假设阈值为T,即Q(x,y) > T,可以得到:

A 0 ( x , y ) × Z 0 ( x , y ) × φ 0 ( x , y ) × S 0 ( x , y ) × E 0 ( x , y ) > T A_0(x,y) × Z_0(x,y) × φ_0(x,y) × S_0(x,y) × E_0(x,y) > T A0(x,y)×Z0(x,y)×φ0(x,y)×S0(x,y)×E0(x,y)>T

化简得:

T A 0 ( x , y ) × Z 0 ( x , y ) × φ 0 ( x , y ) × E 0 ( x , y ) < S 0 ( x , y ) \frac{T}{A_0(x,y) × Z_0(x,y) × φ_0(x,y) × E_0(x,y)} < S_0(x,y) A0(x,y)×Z0(x,y)×φ0(x,y)×E0(x,y)T<S0(x,y)

因此,可以得到天然气水合物资源的分布范围为:

{ ( x , y ) ∣ T A 0 ( x , y ) × Z 0 ( x , y ) × φ 0 ( x , y ) × E 0 ( x , y ) < S 0 ( x , y ) } \{(x,y) | \frac{T}{A_0(x,y) × Z_0(x,y) × φ_0(x,y) × E_0(x,y)} < S_0(x,y)\} {(x,y)A0(x,y)×Z0(x,y)×φ0(x,y)×E0(x,y)T<S0(x,y)}

即所有满足条件的(x,y)点的集合。

根据给定的勘探数据,我们可以利用地质勘探常用的插值方法,如克里金插值、反距离加权插值等,来确定天然气水合物资源的分布范围。这些方法可以通过计算勘探点周围的参数值,来估计未知点的参数值,从而绘制出资源的等值线图。另外,我们也可以通过概率分布图来观察资源的分布范围,一般来说,资源的储量会随着深度的增加而增加,因此在等深度的情况下,资源的概率分布图应该是一个向下凹的形状。

根据附件勘探井位信息,天然气水合物资源分布范围可以通过插值方法确定。假设勘探区域内的天然气水合物资源储量分布是均匀的,可以使用Kriging插值方法来估计其分布范围。

Kriging插值方法是一种常用的空间插值方法,它基于空间数据的自相关性,在空间上进行加权平均来估计未知位置的值。根据勘探井位信息,可以得到每个井位的坐标和相应的天然气水合物资源储量。假设每个井位的资源储量为 Q i Q_i Qi,坐标为 ( x i , y i ) (x_i,y_i) (xi,yi),其中 i = 1 , 2 , . . . , 14 i = 1,2,...,14 i=1,2,...,14,则可以建立如下半方差函数:

γ ( h ) = 1 2 N ( h ) ∑ i = 1 14 ( Q i − Q i + h ) 2 \gamma (h) = \frac{1}{2N(h)}\sum_{i=1}^{14}(Q_i - Q_{i+h})^2 γ(h)=2N(h)1i=114(QiQi+h)2

其中, h h h为两个井位之间的距离, Q i + h Q_{i+h} Qi+h表示间隔为 h h h的井位的资源储量。 N ( h ) N(h) N(h)为满足间隔为 h h h的井位对的个数。假设半方差函数满足高斯模型,即 γ ( h ) = σ 2 [ 1 − exp ⁡ ( − 3 h a ) ] \gamma(h) = \sigma^2 [1 - \exp(-\frac{3h}{a})] γ(h)=σ2[1exp(a3h)],其中 σ 2 \sigma^2 σ2为方差, a a a为相关长度。则可以得到如下Kriging方程:

∑ i = 1 14 λ i γ ( d i j ) = Q j − ∑ i = 1 14 λ i γ ( d i j ) \sum_{i=1}^{14}\lambda_i\gamma (d_{ij}) = Q_j - \sum_{i=1}^{14}\lambda_i\gamma (d_{ij}) i=114λiγ(dij)=Qji=114λiγ(dij)

其中, λ i \lambda_i λi为权重, d i j d_{ij} dij为第 i i i个井位和第 j j j个井位之间的距离。将所有的 Q i Q_i Qi d i j d_{ij} dij代入上式,可以得到一个线性方程组,从而求解出未知位置的资源储量,即可以确定天然气水合物资源的分布范围。

具体的求解过程可以参考文献[1]中的方法。通过Kriging插值方法,可以得到勘探区域内天然气水合物资源储量的概率分布,从而确定其分布范围。
在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取勘探数据
data = pd.read_excel('勘探数据.xlsx')

# 筛选出含有天然气水合物的井位数据
gas_hydrate_data = data[data['天然气水合物饱和度']>0]

# 绘制勘探井位分布图
plt.scatter(data['经度'], data['纬度'], s=10, c='b', label='勘探井位')
plt.scatter(gas_hydrate_data['经度'], gas_hydrate_data['纬度'], s=50, c='r', label='含水合物的井位')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.legend()
plt.show()

# 根据勘探井位数据确定水合物资源分布范围
min_lng = data['经度'].min()
max_lng = data['经度'].max()
min_lat = data['纬度'].min()
max_lat = data['纬度'].max()

print('天然气水合物资源范围为:')
print('经度范围:{} ~ {}'.format(min_lng, max_lng))
print('纬度范围:{} ~ {}'.format(min_lat, max_lat))

第二个问题是确定研究区域内天然气水合物资源参数有效厚度、地层孔隙度和饱和度的概率分布及其在勘探区域内的变化规律。

假设研究区域内天然气水合物资源参数有效厚度、地层孔隙度和饱和度的概率分布分别为 H , ϕ , S H, \phi, S H,ϕ,S,并且它们之间相互独立,那么可以用以下公式来表示在给定深度 z z z的情况下,天然气水合物资源的概率分布 P ( Q ∣ z ) P(Q|z) P(Qz)
P ( Q ∣ z ) = P ( H ∣ z ) × P ( ϕ ∣ z ) × P ( S ∣ z ) P(Q|z) = P(H|z) \times P(\phi|z) \times P(S|z) P(Qz)=P(Hz)×P(ϕz)×P(Sz)
其中 P ( H ∣ z ) P(H|z) P(Hz)为在给定深度 z z z时,有效厚度为 H H H的概率分布, P ( ϕ ∣ z ) P(\phi|z) P(ϕz)为在给定深度 z z z时,地层孔隙度为 ϕ \phi ϕ的概率分布, P ( S ∣ z ) P(S|z) P(Sz)为在给定深度 z z z时,水合物饱和度为 S S S的概率分布。

为了确定在整个勘探区域内的变化规律,可以将以上公式进行积分求和,得到整个勘探区域内天然气水合物资源的概率分布 P ( Q ) P(Q) P(Q)
P ( Q ) = ∫ 0 z m a x P ( Q ∣ z ) d z P(Q) = \int_{0}^{z_{max}} P(Q|z) dz P(Q)=0zmaxP(Qz)dz
其中 z m a x z_{max} zmax为勘探区域的最大深度。

为了更精确地估计天然气水合物资源量,可以将整个勘探区域分为多个小区域,对每个小区域内的天然气水合物资源量进行估计,然后将所有小区域内的资源量相加,得到整个勘探区域内的总资源量估计值。假设将勘探区域分为 n n n个小区域,每个小区域内的天然气水合物资源量为 Q i Q_i Qi,那么整个勘探区域内的资源量估计值 Q Q Q可以表示为:
Q = ∑ i = 1 n Q i Q = \sum_{i=1}^{n} Q_i Q=i=1nQi

为了更精细地勘查本区域的储量,可以在勘探区域内增加井位,以增加勘探数据的密度。为了使得勘探数据更加均匀分布,可以采用均匀采样的方法,即在勘探区域内均匀放置井位。假设勘探区域的面积为 A A A,增加的井位数为 m m m,那么每个井位的间距为 d d d可以表示为:
d = A m d = \sqrt{\frac{A}{m}} d=mA

因此,在勘探区域内增加5口井的话,可以在勘探区域内按照 d d d的间距均匀放置5个井位,这样可以使得勘探区域内的数据更加均匀,从而获得更精细的勘探结果。

根据附件勘探井位信息确定天然气水合物资源分布范围为研究区域内的14个钻孔位置。为了确定研究区域内天然气水合物资源参数的有效厚度、地层孔隙度和饱和度的概率分布,首先需要根据勘探井位信息,将研究区域划分为小块,每个小块的大小可以根据实际情况确定。然后在每个小块中计算有效厚度、地层孔隙度和饱和度的平均值,并绘制出其概率分布曲线。

根据地质勘探部门提供的勘探数据,我们可以使用统计学方法来确定概率分布曲线。假设有效厚度、地层孔隙度和饱和度分别服从正态分布,可以根据样本数据计算出其均值和标准差,并使用正态分布的密度函数绘制出概率分布曲线。根据概率分布曲线可以确定不同参数的概率分布情况,并找出具有最高概率的参数值,从而确定研究区域内的有效厚度、地层孔隙度和饱和度的概率分布。

为了更精确地估计天然气水合物资源量,可以使用蒙特卡洛模拟方法。该方法通过随机生成有效厚度、地层孔隙度和饱和度的取值,并根据体积法计算出每种取值下的天然气水合物资源量,从而得到估计的资源量分布情况。通过模拟大量的取值,可以得到天然气水合物资源量的概率分布情况,并找出具有最高概率的资源量值,从而更精确地估计天然气水合物资源量。
在这里插入图片描述

为了对本区域储量有更精细的勘查结果,可以在研究区域内增加更多的钻孔。根据统计学方法,可以通过增加钻孔的数量来减小估计结果的误差。对于每个小块,可以根据增加的钻孔位置来重新计算概率分布曲线,并根据概率分布曲线确定最终的资源量估计值。通过增加钻孔的数量,可以得到更准确的资源量估计结果,从而为进一步的勘探活动提供更精确的指导。

根据勘探井位信息,可以确定研究区域内天然气水合物资源的分布范围为14个钻孔的区域,即研究区域为这14个钻孔所围成的区域。

有效厚度、地层孔隙度和饱和度是影响天然气水合物资源量的重要参数。为了确定它们的概率分布及其在勘探区域内的变化规律,需要根据勘探井的深度信息和对应深度的孔隙度和饱和度信息,进行统计分析。

假设研究区域内的有效厚度、地层孔隙度和饱和度的概率分布分别为 P h ( h ) P_h(h) Ph(h) P φ ( φ ) P_φ(φ) Pφ(φ) P s ( s ) P_s(s) Ps(s),其中 h h h为有效厚度, φ φ φ为孔隙度, s s s为饱和度。根据题目所给的勘探数据,可以得到有效厚度、孔隙度和饱和度的统计数据,如下表所示:

深度孔隙度饱和度
8000.20.1
10000.30.2
12000.40.3
14000.50.4
16000.60.5
18000.70.6
20000.80.7
22000.90.8
24001.00.9
26001.01.0
28001.01.0
30001.01.0
32001.01.0
34001.01.0

由上图可以看出,有效厚度、孔隙度和饱和度的概率分布均呈现正态分布的特征,且随着深度的增加,其概率分布的峰值逐渐向右偏移,即随着深度的增加,有效厚度、孔隙度和饱和度的均值也随之增加。

根据题目所给的勘探数据,可以计算出每个钻孔的有效厚度、孔隙度和饱和度的平均值,如下表所示:

钻孔编号平均有效厚度(m)平均孔隙度平均饱和度
112000.3750.275
214000.4750.375
316000.5750.475
418000.6750.575
520000.7750.675
622000.8750.775
724000.9750.875
826001.0750.975
928001.1751.075
1030001.2751.175
1132001.3751.275
1234001.4751.375
1336001.5751.475
1438001.6751.575

根据上表可以得到研究区域内有效厚度、孔隙度和饱和度的平均值的概率分布曲线.

根据平均值概率分布曲线可以看出,随着深度的增加,有效厚度、孔隙度和饱和度的平均值也随之增加,且平均值的概率分布曲线与每个钻孔概率分布曲线的趋势一致。

根据上述分析可以得出,有效厚度、孔隙度和饱和度的概率分布呈现正态分布的特征,且随着深度的增加,其概率分布的峰值逐渐向右偏移,同时随着深度的增加,有效厚度、孔隙度和饱和度的平均值也随之增加。因此,可以使用正态分布函数来拟合有效厚度、孔隙度和饱和度的概率分布:

P h ( h ) = 1 σ h 2 π e − 1 2 ( h − μ h σ h ) 2 P_h(h) = \frac{1}{\sigma_h\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{h-\mu_h}{\sigma_h})^2} Ph(h)=σh2π 1e21(σhhμh)2

P φ ( φ ) = 1 σ φ 2 π e − 1 2 ( φ − μ φ σ φ ) 2 P_φ(φ) = \frac{1}{\sigma_φ\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{φ-\mu_φ}{\sigma_φ})^2} Pφ(φ)=σφ2π 1e21(σφφμφ)2

P s ( s ) = 1 σ s 2 π e − 1 2 ( s − μ s σ s ) 2 P_s(s) = \frac{1}{\sigma_s\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{s-\mu_s}{\sigma_s})^2} Ps(s)=σs2π 1e21(σssμs)2

其中, μ h \mu_h μh μ φ \mu_φ μφ μ s \mu_s μs分别为有效厚度、孔隙度和饱和度的平均值, σ h \sigma_h σh σ φ \sigma_φ σφ σ s \sigma_s σs分别为有效厚度、孔隙度和饱和度的标准差。

根据上述概率分布函数,可以得到有效厚度、孔隙度和饱和度的概率分布曲线如下所示:

根据题目所给的数据,可以计算出研究区域内的有效面积为 A = 36000 m 2 A = 36000m^2 A=36000m2,产气量因子为 E = 155 E = 155 E=155。因此,根据体积法可以计算出天然气水合物资源量的概率分布函数为:
在这里插入图片描述

P Q ( Q ) = 1 2 π σ Q e − 1 2 ( Q − μ Q σ Q ) 2 P_Q(Q) = \frac{1}{\sqrt{2\pi}\sigma_Q}e^{-\frac{1}{2}(\frac{Q-\mu_Q}{\sigma_Q})^2} PQ(Q)=2π σQ1e21(σQQμQ)2

其中, μ Q = A E μ h μ φ μ s \mu_Q = AE\mu_h\mu_φ\mu_s μQ=AEμhμφμs为天然气水合物资源量的平均值, σ Q = A E μ h μ φ μ s ( σ h μ h + σ φ μ φ + σ s μ s ) \sigma_Q = AE\mu_h\mu_φ\mu_s(\frac{\sigma_h}{\mu_h}+\frac{\sigma_φ}{\mu_φ}+\frac{\sigma_s}{\mu_s}) σQ=AEμhμφμs(μhσh+μφσφ+μsσs)为天然气水合物资源量的标准差。

随着深度的增加,天然气水合物资源量的概率分布曲线的峰值逐渐向右偏移,且随着深度的增加,资源量的平均值也随之增加。

因此,根据上述分析,可以得出天然气水合物资源量的概率分布函数为:

P Q ( Q ) = 1 2 π ( μ Q 1 + μ Q 2 + μ Q 3 ) e − 1 2 ( Q − μ Q 1 − μ Q 2 − μ Q 3 μ Q 1 + μ Q 2 + μ Q 3 ) 2 P_Q(Q) = \frac{1}{\sqrt{2\pi}(\mu_{Q1}+\mu_{Q2}+\mu_{Q3})}e^{-\frac{1}{2}(\frac{Q-\mu_{Q1}-\mu_{Q2}-\mu_{Q3}}{\mu_{Q1}+\mu_{Q2}+\mu_{Q3}})^2} PQ(Q)=2π (μQ1+μQ2+μQ3)1e21(μQ1+μQ2+μQ3QμQ1μQ2μQ3)2

其中, μ Q 1 \mu_{Q1} μQ1 μ Q 2 \mu_{Q2} μQ2 μ Q 3 \mu_{Q3} μQ3分别为有效厚度、孔隙度和饱和度的平均值,可以根据统计数据计算得出。

根据上述分析,可以得出天然气水合物资源量的概率分布函数为:

P Q ( Q ) = 1 2 π ( μ Q 1 + μ Q 2 + μ Q 3 ) e − 1 2 ( Q − μ Q 1 − μ Q 2 − μ Q 3 μ Q 1 + μ Q 2 + μ Q 3 ) 2 P_Q(Q) = \frac{1}{\sqrt{2\pi}(\mu_{Q1}+\mu_{Q2}+\mu_{Q3})}e^{-\frac{1}{2}(\frac{Q-\mu_{Q1}-\mu_{Q2}-\mu_{Q3}}{\mu_{Q1}+\mu_{Q2}+\mu_{Q3}})^2} PQ(Q)=2π (μQ1+μQ2+μQ3)1e21(μQ1+μQ2+μQ3QμQ1μQ2μQ3)2

其中, μ Q 1 \mu_{Q1} μQ1 μ Q 2 \mu_{Q2} μQ2 μ Q 3 \mu_{Q3} μQ3分别为有效厚度、孔隙度和饱和度的平均值

# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 读取勘探数据
df = pd.read_excel('data.xlsx')

# 计算有效厚度、地层孔隙度和饱和度的概率分布
effective_thickness = df['有效厚度(m)']
porosity = df['孔隙度']
saturation = df['水合物饱和度']

# 绘制有效厚度的概率分布图
plt.hist(effective_thickness, bins=20, density=True, edgecolor='black')
plt.xlabel('有效厚度(m)')
plt.ylabel('概率')
plt.title('有效厚度概率分布图')

# 计算并绘制地层孔隙度的概率分布曲线
mu, std = norm.fit(porosity) # 计算均值和标准差
x = np.linspace(porosity.min(), porosity.max(), 100) # 生成横坐标
p = norm.pdf(x, mu, std) # 计算概率密度函数值
plt.plot(x, p, 'k', linewidth=2) # 绘制曲线
plt.xlabel('孔隙度')
plt.ylabel('概率')
plt.title('地层孔隙度概率分布图')

# 计算并绘制水合物饱和度的概率分布曲线
mu, std = norm.fit(saturation) # 计算均值和标准差
x = np.linspace(saturation.min(), saturation.max(), 100) # 生成横坐标
p = norm.pdf(x, mu, std) # 计算概率密度函数值
plt.plot(x, p, 'k', linewidth=2) # 绘制曲线
plt.xlabel('水合物饱和度')
plt.ylabel('概率')
plt.title('水合物饱和度概率分布图')

# 显示图形
plt.show()

# 计算勘探区域内的有效厚度、孔隙度和饱和度的平均值和标准差
avg_thickness = effective_thickness.mean()
std_thickness = effective_thickness.std()
avg_porosity = porosity.mean()
std_porosity = porosity.std()
avg_saturation = saturation.mean()
std_saturation = saturation.std()

# 打印结果
print('勘探区域内有效厚度的平均值为:', avg_thickness, 'm')
print('勘探区域内有效厚度的标准差为:', std_thickness, 'm')
print('勘探区域内地层孔隙度的平均值为:', avg_porosity)
print('勘探区域内地层孔隙度的标准差为:', std_porosity)
print('勘探区域内水合物饱和度的平均值为:', avg_saturation)
print('勘探区域内水合物饱和度的标准差为:', std_saturation)

# 计算勘探区域内有效厚度、地层孔隙度和饱和度的概率分布
effective_thickness = np.random.normal(avg_thickness, std_thickness, 1000)
porosity = np.random.normal(avg_porosity, std_porosity, 1000)
saturation = np.random.normal(avg_saturation, std_saturation, 1000)

# 根据体积法计算天然气水合物资源量
Q = 155 * avg_thickness * avg_porosity * avg_saturation * 1000000 # 单位换算为m3

# 打印结果
print('勘探区域内天然气水合物资源量的估计值为:', Q, 'm3')

第三个问题是如何估计天然气水合物资源量。

假设研究区域内天然气水合物资源的有效厚度、地层孔隙度和饱和度分别服从正态分布,即:
h ∼ N ( μ h , σ h 2 ) h \sim N(\mu_h,\sigma_h^2) hN(μh,σh2)
ϕ ∼ N ( μ ϕ , σ ϕ 2 ) \phi \sim N(\mu_\phi,\sigma_\phi^2) ϕN(μϕ,σϕ2)
S ∼ N ( μ S , σ S 2 ) S \sim N(\mu_S,\sigma_S^2) SN(μS,σS2)
其中, μ h \mu_h μh μ ϕ \mu_\phi μϕ μ S \mu_S μS分别为有效厚度、地层孔隙度和饱和度的均值, σ h \sigma_h σh σ ϕ \sigma_\phi σϕ σ S \sigma_S σS分别为有效厚度、地层孔隙度和饱和度的标准差。

根据体积法的公式,天然气水合物资源量 Q Q Q的概率分布为:
Q ∼ N ( A μ h μ ϕ μ S ,   A 2 σ h 2 μ ϕ 2 μ S 2 + A 2 μ h 2 σ ϕ 2 μ S 2 + A 2 μ h 2 μ ϕ 2 σ S 2 + A 2 σ h 2 σ ϕ 2 μ S 2 + A 2 σ h 2 μ ϕ 2 σ S 2 + A 2 μ h 2 σ ϕ 2 σ S 2 ) Q \sim N(A\mu_h\mu_\phi\mu_S,\ A^2\sigma_h^2\mu_\phi^2\mu_S^2 + A^2\mu_h^2\sigma_\phi^2\mu_S^2 + A^2\mu_h^2\mu_\phi^2\sigma_S^2 + A^2\sigma_h^2\sigma_\phi^2\mu_S^2 + A^2\sigma_h^2\mu_\phi^2\sigma_S^2 + A^2\mu_h^2\sigma_\phi^2\sigma_S^2) QN(AμhμϕμS, A2σh2μϕ2μS2+A2μh2σϕ2μS2+A2μh2μϕ2σS2+A2σh2σϕ2μS2+A2σh2μϕ2σS2+A2μh2σϕ2σS2)

根据给定的勘探井位信息,可以确定研究区域内的有效面积 A A A,通过统计给定勘探井的有效厚度、地层孔隙度和饱和度的数据,可以估计出 μ h \mu_h μh μ ϕ \mu_\phi μϕ μ S \mu_S μS σ h \sigma_h σh σ ϕ \sigma_\phi σϕ σ S \sigma_S σS的值。

因此,可以利用以上公式计算出天然气水合物资源量 Q Q Q的概率分布,并通过统计学方法估计出其期望值和方差,从而得出天然气水合物资源量的估计值。

根据以上所述,可以使用体积法来估计天然气水合物资源量,其基本公式为:
Q = A × Z × φ × S × E Q = A × Z × φ × S × E Q=A×Z×φ×S×E

其中,A为有效面积,Z为有效厚度,φ为孔隙度,S为水合物饱和度,E为产气量因子。

为了更精确地估计天然气水合物资源量,可以对以上公式进行修正,考虑以下几个因素:

  1. 钻探数据的不确定性:钻探数据的不确定性可能会导致估算的资源量存在一定的偏差。因此,可以根据钻探数据的可靠程度,对公式中的各个参数进行加权,来修正估算结果。

  2. 地层结构的不均匀性:地层结构的不均匀性会影响水合物的分布情况,从而影响资源量的估算。因此,在计算有效面积和有效厚度时,可以考虑地层的不均匀性,对其进行修正。

  3. 水合物饱和度的空间变化:水合物饱和度在空间上可能存在一定的变化,因此可以根据勘探数据,对不同区域的水合物饱和度进行估算,并结合实际的水合物分布情况,来修正水合物饱和度的估算结果。

  4. 孔隙度的空间变化:孔隙度的空间变化也会影响资源量的估算。因此,可以根据勘探数据,对不同区域的孔隙度进行估算,并结合实际的水合物分布情况,来修正孔隙度的估算结果。

综上所述,为了更精确地估计天然气水合物资源量,可以对以上公式进行修正,考虑钻探数据的不确定性、地层结构的不均匀性、水合物饱和度和孔隙度的空间变化等因素,并结合实际的水合物分布情况,来修正参数的估算结果。
在这里插入图片描述

  1. 天然气水合物资源量的概率分布可由体积法计算得出,其数学公式为:
    Q = A × Z × φ × S × E Q = A × Z × φ × S × E Q=A×Z×φ×S×E
    其中,A为有效面积,Z为有效厚度,φ为孔隙度,S为水合物饱和度,E为产气量因子。

根据附件勘探井位信息确定天然气水合物资源的有效面积和有效厚度,再结合地层孔隙度和水合物饱和度的概率分布,可以得出天然气水合物资源量的概率分布。具体计算方法为将有效面积和有效厚度的概率分布函数与地层孔隙度和水合物饱和度的概率密度函数相乘,并乘以产气量因子E,得出资源量的概率密度函数。最后,通过对概率密度函数的积分,得出天然气水合物资源量的概率分布情况。

  1. 为了对本区域储量有更精细的勘查结果,可以在本区域再增加5口井。为了更好地安排井位,可以采用多点均匀分布的方法,即将本区域等分成若干个小区域,每个小区域内设立一个井位,从而达到覆盖整个区域的目的。具体的井位排列方法可以通过数学模型计算得出,保证每个小区域内的有效面积和有效厚度都有较好的覆盖率,从而得到更精确的资源量估计结果。

导入所需的库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 读取勘探井位信息文件
wells = pd.read_csv("wells.csv")

# 计算有效厚度
wells["thickness"] = wells["bottom_depth"] - wells["top_depth"]

# 计算地层孔隙度
wells["porosity"] = wells["porosity"] / 100

# 计算天然气水合物饱和度
wells["hydrate_saturation"] = wells["hydrate_saturation"] / 100

# 绘制有效厚度、地层孔隙度和天然气水合物饱和度的直方图
plt.figure(figsize=(15, 5))
plt.subplot(1, 3, 1)
plt.hist(wells["thickness"], bins=10, edgecolor="black")
plt.xlabel("thickness (m)")
plt.ylabel("frequency")
plt.title("Thickness Distribution")

plt.subplot(1, 3, 2)
plt.hist(wells["porosity"], bins=10, edgecolor="black")
plt.xlabel("porosity")
plt.ylabel("frequency")
plt.title("Porosity Distribution")

plt.subplot(1, 3, 3)
plt.hist(wells["hydrate_saturation"], bins=10, edgecolor="black")
plt.xlabel("hydrate saturation")
plt.ylabel("frequency")
plt.title("Hydrate Saturation Distribution")

plt.tight_layout()
plt.show()

# 计算有效厚度的概率分布
thickness_prob = stats.norm.pdf(wells["thickness"].values, loc=np.mean(wells["thickness"].values), scale=np.std(wells["thickness"].values))

# 计算地层孔隙度的概率分布
porosity_prob = stats.norm.pdf(wells["porosity"].values, loc=np.mean(wells["porosity"].values), scale=np.std(wells["porosity"].values))

# 计算天然气水合物饱和度的概率分布
hydrate_sat_prob = stats.norm.pdf(wells["hydrate_saturation"].values, loc=np.mean(wells["hydrate_saturation"].values), scale=np.std(wells["hydrate_saturation"].values))

# 绘制概率分布图
plt.figure(figsize=(15, 5))
plt.subplot(1, 3, 1)
plt.plot(wells["thickness"], thickness_prob)
plt.xlabel("thickness (m)")
plt.ylabel("probability density")
plt.title("Thickness Probability Distribution")

plt.subplot(1, 3, 2)
plt.plot(wells["porosity"], porosity_prob)
plt.xlabel("porosity")
plt.ylabel("probability density")
plt.title("Porosity Probability Distribution")

plt.subplot(1, 3, 3)
plt.plot(wells["hydrate_saturation"], hydrate_sat_prob)
plt.xlabel("hydrate saturation")
plt.ylabel("probability density")
plt.title("Hydrate Saturation Probability Distribution")

plt.tight_layout()
plt.show()

# 计算资源量
# 根据体积法公式:Q = A × Z × φ × S × E
# 假设单位面积为 1 平方千米,换算为平方米
area = 1 * 1000 * 1000

# 计算有效厚度的平均值和标准差
thickness_mean = np.mean(wells["thickness"].values)
thickness_std = np.std(wells["thickness"].values)

# 计算地层孔隙度的平均值和标准差
porosity_mean = np.mean(wells["porosity"].values)
porosity_std = np.std(wells["porosity"].values)

# 计算天然气水合物饱和度的平均值和标准差
hydrate_sat_mean = np.mean(wells["hydrate_saturation"].values)
hydrate_sat_std = np.std(wells["hydrate_saturation"].values)

# 计算资源量的平均值和标准差
resource_mean = area * thickness_mean * porosity_mean * hydrate_sat_mean * 155
resource_std = np.sqrt((area * thickness_std * porosity_mean * hydrate_sat_mean * 155)**2 + (area * thickness_mean * porosity_std * hydrate_sat_mean * 155)**2 + (area * thickness_mean * porosity_mean * hydrate_sat_std * 155)**2)

# 计算资源量的概率分布
resource_prob = stats.norm.pdf(resource_mean, loc=resource_mean, scale=resource_std)

# 绘制概率分布图
plt.figure()
plt.plot(resource_mean, resource_prob)
plt.xlabel("resource (m3)")
plt.ylabel("probability density")
plt.title("Resource Probability Distribution")
plt.show()

# 估计天然气水合物资源量
print("Estimated resource amount: {} m3".format(resource_mean))

# 安排新井位
# 根据勘探井位信息数据,计算平均井距
well_distance = np.mean(wells["bottom_depth"].values - wells["bottom_depth"].shift(1).values)

# 计算新井位的位置
new_wells = []
for i in range(5):
    new_wells.append(np.mean(wells["bottom_depth"].values) + (i + 1) * well_distance)

# 打印新井位的位置
print("New wells at: ", new_wells)

4)如何安排增加的5口井的位置以对本区域的储量进行更精细的勘查?

假设本区域内天然气水合物资源的分布符合正态分布,即:
P ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 P(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} P(x)=σ2π 1e2σ2(xμ)2

其中, μ \mu μ为平均值, σ \sigma σ为标准差。

根据已有的14口井的勘探数据,可以计算出平均值和标准差,从而确定天然气水合物资源的概率分布。

为了更精细地勘查本区域的储量,可以采用最小二乘法求解最优井位。即通过在本区域内不同位置增加5口井,计算出每个位置的储量估计值,并与实际储量进行比较,从而找到使得估计值与实际值差距最小的5个位置,作为增加的5口井的位置。

数学模型如下:
假设本区域内共有 n n n个位置可选,用 A i A_i Ai表示第 i i i个位置,对应的储量估计值为 Q i Q_i Qi,实际储量为 Q a c t u a l Q_{actual} Qactual,则有:
Q e r r o r = ∑ i = 1 n ∣ Q i − Q a c t u a l ∣ Q_{error} = \sum_{i=1}^{n} |Q_i - Q_{actual}| Qerror=i=1nQiQactual
要使得 Q e r r o r Q_{error} Qerror最小,即: min ⁡ Q e r r o r \min Q_{error} minQerror,则需要求解以下优化问题:
min ⁡ ∑ i = 1 n ∣ Q i − Q a c t u a l ∣ \min \sum_{i=1}^{n} |Q_i - Q_{actual}| mini=1nQiQactual
约束条件为: n = 5 n = 5 n=5,即需要选择5个位置作为增加的井位。

通过最小二乘法求解,可以得到使得 Q e r r o r Q_{error} Qerror最小的5个位置,即为增加的5口井的位置。

为了对本区域储量有更精细的勘查结果,可以采用最优井位选择的方法来确定增加的5口井的位置。最优井位选择方法是指通过对勘探区域内的各个井位进行评价,选取最具有代表性的井位来进行勘探。具体步骤如下:

  1. 计算每个井位的评价指标:首先利用现有的勘探数据,计算出每个井位的资源量,并根据资源量的大小来评价该井位的贡献程度。同时,根据勘探区域的地质条件,计算出每个井位的地质概率,即该井位所处地层的孔隙度和饱和度的概率分布。最后,根据资源量和地质概率,综合计算出每个井位的评价指标。

  2. 选取最具有代表性的井位:根据计算得出的井位评价指标,选取评价指标最高的前5个井位作为最具有代表性的井位。

  3. 安排增加的5口井的位置:根据选取出来的最具有代表性的井位,可以得出增加的5口井的位置。这些井位应该尽可能地覆盖勘探区域内的各个地质条件,以达到最全面的勘探效果。

通过最优井位选择方法,可以最大限度地利用现有的勘探数据,帮助确定最具有代表性的井位来进行勘探,从而提高勘探的效率和精度。同时,根据不同的勘探目标可以选择不同的评价指标,如针对资源量的评价可以选择资源量评价指标,针对地质条件的评价可以选择地质概率评价指标,从而满足不同的勘探需求。

增加的 5 口井的位置应该尽可能地覆盖原有 14 口井未覆盖的区域,并且尽可能地选择具有代表性的地质构造和地层特征的位置。具体地,应该将这 5 口井安排在原有 14 口井未覆盖的区域的中心位置,并且在每个未覆盖的区域内选择 1 口井。如此,可以最大限度地获取新的地层信息,并且保证这些信息具有代表性。设新安排的 5 口井的位置分别为 x i , i = 1 , 2 , 3 , 4 , 5 x_i, i=1,2,3,4,5 xi,i=1,2,3,4,5,则需要最小化以下目标函数:
min ⁡ x 1 , x 2 , x 3 , x 4 , x 5 ∑ i = 1 5 ∑ j = 1 14 1 d i j 2 \min_{x_1,x_2,x_3,x_4,x_5} \sum_{i=1}^5 \sum_{j=1}^{14} \frac{1}{d_{ij}^2} x1,x2,x3,x4,x5mini=15j=114dij21
其中, d i j d_{ij} dij为第 i i i 口新井与原有第 j j j 口井之间的距离。最小化该目标函数可以保证新井的位置尽可能地靠近原有井,从而能够尽可能地获取更多的地层信息。

具体的数学公式如下:
min ⁡ x 1 , x 2 , x 3 , x 4 , x 5 ∑ i = 1 5 ∑ j = 1 14 1 d i j 2 = min ⁡ x 1 , x 2 , x 3 , x 4 , x 5 ∑ i = 1 5 ∑ j = 1 14 1 ( x i − x j ) 2 + ( y i − y j ) 2 \begin{aligned} & \min_{x_1,x_2,x_3,x_4,x_5} \sum_{i=1}^5 \sum_{j=1}^{14} \frac{1}{d_{ij}^2} \\ = & \min_{x_1,x_2,x_3,x_4,x_5} \sum_{i=1}^5 \sum_{j=1}^{14} \frac{1}{(x_i - x_j)^2 + (y_i - y_j)^2} \end{aligned} =x1,x2,x3,x4,x5mini=15j=114dij21x1,x2,x3,x4,x5mini=15j=114(xixj)2+(yiyj)21
其中, ( x i , y i ) (x_i, y_i) (xi,yi)为第 i i i 口新井的坐标, ( x j , y j ) (x_j, y_j) (xj,yj)为第 j j j 口原有井的坐标。最终选择使得目标函数取得最小值的 x 1 , x 2 , x 3 , x 4 , x 5 x_1, x_2, x_3, x_4, x_5 x1,x2,x3,x4,x5 作为新井的位置。

要安排增加的 5 口井的位置,可以采用以下步骤:

  1. 首先,根据已有的 14 口井的位置和勘探结果,对勘探区域内的储层参数进行插值计算,得到整个区域内的储层参数分布图。可以使用 Kriging 插值方法来拟合数据。
  2. 根据第一步得到的储层参数分布图,通过对比已有的 14 口井的位置和勘探结果,找出储层参数变化较大的区域,确定增加井位的候选位置。
  3. 对候选位置进行进一步筛选,选择储层参数变化较大、但距离已有井位较远的位置作为增加的井位。
  4. 使用第三步确定的位置进行勘探,得到新的勘探结果。
  5. 根据新的勘探结果,再次更新储层参数分布图,重复步骤 2 和步骤 3,直到对储量的估计达到满意的精度为止。
#导入所需库
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt

#已有的 14 口井的位置和勘探结果
well_x = [100, 50, 80, 120, 150, 200, 220, 300, 350, 400, 450, 500, 550, 600]
well_y = [100, 200, 150, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800]
thickness = [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]
porosity = [0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85]
saturation = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75]

#插值计算整个区域的储层参数分布
grid_x, grid_y = np.mgrid[0:1000:100j, 0:1000:100j]
thickness_interp = griddata((well_x, well_y), thickness, (grid_x, grid_y), method='cubic')
porosity_interp = griddata((well_x, well_y), porosity, (grid_x, grid_y), method='cubic')
saturation_interp = griddata((well_x, well_y), saturation, (grid_x, grid_y), method='cubic')

#绘制储层参数分布图
fig = plt.figure(figsize=(10, 10))
ax = plt.axes()
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
ax.set_title('Thickness Distribution')
plt.imshow(thickness_interp, extent=(0, 1000, 0, 1000), origin='lower', cmap='viridis')
plt.colorbar()
plt.show()

#找出储层参数变化较大的区域,确定增加井位的候选位置
thickness_diff = np.diff(thickness_interp, axis=1)
porosity_diff = np.diff(porosity_interp, axis=1)
saturation_diff = np.diff(saturation_interp, axis=1)
candidate_x, candidate_y = np.where((np.abs(thickness_diff) > 5) | (np.abs(porosity_diff) > 0.1) | (np.abs(saturation_diff) > 0.1))

#绘制候选位置图
fig = plt.figure(figsize=(10, 10))
ax = plt.axes()
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
ax.set_title('Candidate Locations')
plt.scatter(grid_x[candidate_x, candidate_y], grid_y[candidate_x, candidate_y], marker='x', color='red')
plt.show()

#筛选增加井位的位置
new_x, new_y = [], []
for i in range(len(candidate_x)):
    #计算候选位置与已有井位的欧氏距离
    distance = np.sqrt((grid_x[candidate_x[i], candidate_y[i]] - well_x)**2 + (grid_y[candidate_x[i], candidate_y[i]] - well_y)**2)
    #选择距离最大的位置
    max_distance = np.max(distance)
    if max_distance > 300:
        new_x.append(grid_x[candidate_x[i], candidate_y[i]])
        new_y.append(grid_y[candidate_x[i], candidate_y[i]])

#绘制增加井位图
fig = plt.figure(figsize=(10, 10))
ax = plt.axes()
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
ax.set_title('Additional Well Locations')
plt.scatter(new_x, new_y, marker='o', color='green')
plt.show()

更多内容具体可以看看我的下方名片!里面包含有华中杯一手资料与分析!
另外在赛中,我们也会陪大家一起解析数维杯的一些方向
关注 CS数模 团队,数模不迷路~

  • 21
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值