【数学建模】钻井问题

已知

  1. 12口井的坐标位置如下:
    x=[0.50,1.41,3.00,3.37,3.40,4.72,4.72,5.43,7.57,8.38,8.98, 9.50];
    y=[2.00,3.50,1.50,3.51,5.50,2.00,6.24,4.10,2.01,4.50,3.41,0.80];

  2. 设平面有n个点 P i P_i Pi(表旧井井位),其坐标为 ( a i , b i ) , i = 1 , 2 , ... , n (a_i,b_i),i=1,2,...,n (ai,bi),i=1,2,...,n。新置的井位是一个正方形网格 N N N的所有结点。假设每个格子的边长都是 1 1 1单位。整个网格是可以在平面上任意移动的。若一个已知点 P i P_i Pi距某个网格结点 X i X_i Xi的距离不超过给定误差 ϵ \epsilon ϵ,则认为 P i P_i Pi处的旧井井位可以利用,不必在结点处打新井。

    需要研究的问题

1)假定网格的横向和纵向是固定的,并规定两点间的距离为其横向距离(横坐标之差的绝对值)及纵向距离(纵坐标之差的绝对值)的最大者,在平面上平移网格N,使可利用的旧井数尽可能大,试提供数值计算方法。

本题主要是要建立旧井可利用判断模型

首先是按照题目建立两点距离符合误差 ϵ \epsilon ϵ范围内的判断模型

若一个已知点 P i P_i Pi ( a i , b i ) (a_i,b_i) (ai,bi)距某个网格结点 X i ( x i , y i ) X_i(x_i,y_i) Xi(xi,yi)的距离不超过给定误差 ϵ \epsilon ϵ
{ ∣ a i − x i ∣ ≤ ϵ ∣ b i − y i ∣ ≤ ϵ \begin{cases} |a_i-x_i| \le \epsilon \\ |b_i-y_i| \le \epsilon \end{cases} {∣ai−xi∣≤ϵ∣bi−yi∣≤ϵ

或者

max ⁡ ( ∣ a i − x i ∣ , ∣ b i − y i ∣ ) ≤ ϵ \max{(|a_i-x_i|,|b_i-y_i|)}\le \epsilon max(∣ai−xi∣,∣bi−yi∣)≤ϵ

其次是网格平移模型,因为要研究的是网格平行对井的位置变化

设网格向右平移 x x x个单位,向上平移 y y y个单位;一个已知点 P i P_i Pi ( a i , b i ) (a_i,b_i) (ai,bi)

;网格平移后新点位置 P j ( a j , b j ) P_j(a_j,b_j) Pj(aj,bj)

有 { a j = a i + x b j = b i + y \begin{cases} a_j = a_i+x \\ b_j = b_i + y \end{cases} {aj=ai+xbj=bi+y

综合上述模型和要可利用的旧井数尽可能大可得模型:

{ a n s = max ⁡ ∑ i ∈ N 1 ≤ i ≤ n f i max ⁡ ( ∣ a i + x − x i ∣ , ∣ b i + y − y i ∣ ) f i ≤ ϵ \begin{cases} ans = \max \sum_{\substack{i\in N\\1\le i\le n} }{fi} \\ \max{(|a_i+x-x_i|,|b_i + y-y_i|)f_i}\le \epsilon \end{cases} {ans=max∑i∈N1≤i≤nfimax(∣ai+x−xi∣,∣bi+y−yi∣)fi≤ϵ

现在还剩下一个问题某个网格结点 X i ( x i , y i ) X_i(x_i,y_i) Xi(xi,yi)是哪个网格点

这里问题就可以变成一个已知点 P j P_j Pj ( a j , b j ) (a_j,b_j) (aj,bj)求距离其最近的网格点 X j ( x j , y j ) X_j(x_j,y_j) Xj(xj,yj)

将一个小格子划分为四个区域观察规律可得
{ x j = ⌊ a j + 0.5 ⌋ y j = ⌊ b j + 0.5 ⌋ \begin{cases} x_j = \lfloor a_j+0.5 \rfloor \\ y_j = \lfloor b_j+0.5 \rfloor \end{cases} {xj=⌊aj+0.5⌋yj=⌊bj+0.5⌋

将这个式子带入我们的模型中可得
{ a n s = max ⁡ ∑ i ∈ N 1 ≤ i ≤ n f i max ⁡ ( ∣ a i + x − ⌊ a i + x + 0.5 ⌋ ∣ , ∣ b i + y − ⌊ b i + y + 0.5 ⌋ ∣ ) f i ≤ ϵ \begin{cases} ans = \max \sum_{\substack{i\in N\\1\le i\le n} }{fi} \\ \max{(|a_i+x-\lfloor a_i+x+0.5 \rfloor|,|b_i + y-\lfloor b_i+y+0.5 \rfloor|)f_i}\le \epsilon \end{cases} {ans=max∑i∈N1≤i≤nfimax(∣ai+x−⌊ai+x+0.5⌋∣,∣bi+y−⌊bi+y+0.5⌋∣)fi≤ϵ

给出12口井的坐标, ϵ = 0.05 \epsilon = 0.05 ϵ=0.05 , 按照问题一的要求求解

按照问题一给的模型,进行调整
{ a n s = max ⁡ ∑ i ∈ N 1 ≤ i ≤ n f i max ⁡ ( ∣ x i + x − ⌊ x i + x + 0.5 ⌋ ∣ , ∣ y i + y − ⌊ y i + y + 0.5 ⌋ ∣ ) f i ≤ 0.05 \begin{cases} ans = \max \sum_{\substack{i\in N\\1\le i\le n} }{fi} \\ \max{(|x_i+x-\lfloor x_i+x+0.5 \rfloor|,|y_i + y-\lfloor y_i+y+0.5 \rfloor|)f_i}\le 0.05 \end{cases} {ans=max∑i∈N1≤i≤nfimax(∣xi+x−⌊xi+x+0.5⌋∣,∣yi+y−⌊yi+y+0.5⌋∣)fi≤0.05

LINGO求解

text 复制代码
sets:
	aa/1..12/:a,b,f;
endsets
data:
	a=0.50,1.41,3.00,3.37,3.40,4.72,4.72,5.43,7.57,8.38,8.98,9.50;
	b=2.00,3.50,1.50,3.51,5.50,2.00,6.24,4.10,2.01,4.50,3.41,0.80;
enddata
max = @sum(aa(i):f(i));
@for(aa(i):@bin(f(i)));
@for(aa(i):@smax(@abs(a(i)+x1-@floor(a(i)+x1+0.5)),@abs(b(i)+y1-@floor(b(i)+y1+0.5)))*f(i)<=0.05);
x1<1;
y1<1;

or
{ a n s = max ⁡ ∑ i ∈ N 1 ≤ i ≤ n f i ∣ x i + x − ⌊ x i + x + 0.5 ⌋ ∣ f i ≤ 0.05 ∣ y i + y − ⌊ y i + y + 0.5 ⌋ ∣ f i ≤ 0.05 \begin{cases} ans = \max \sum_{\substack{i\in N\\1\le i\le n} }{fi} \\ |x_i+x-\lfloor x_i+x+0.5 \rfloor|f_i\le 0.05\\|y_i + y-\lfloor y_i+y+0.5 \rfloor|f_i\le 0.05 \end{cases} ⎩ ⎨ ⎧ans=max∑i∈N1≤i≤nfi∣xi+x−⌊xi+x+0.5⌋∣fi≤0.05∣yi+y−⌊yi+y+0.5⌋∣fi≤0.05

text 复制代码
sets:
	aa/1..12/:a,b,f;
endsets
data:
	a=0.50,1.41,3.00,3.37,3.40,4.72,4.72,5.43,7.57,8.38,8.98,9.50;
	b=2.00,3.50,1.50,3.51,5.50,2.00,6.24,4.10,2.01,4.50,3.41,0.80;
enddata
max = @sum(aa(i):f(i));
@for(aa(i):@bin(f(i)));
@for(aa(i):@abs(a(i)+x1-@floor(a(i)+x1+0.5))*f(i)<=0.05);
@for(aa(i):@abs(b(i)+y1-@floor(b(i)+y1+0.5))*f(i)<=0.05);
x1<1;
y1<1;

答案如下

bash 复制代码
  Objective value:                              4.000000
  Objective bound:                              4.000000

 						  F( 1)        0.000000           -1.000000
                          F( 2)        1.000000            0.000000
                          F( 3)        0.000000           -1.000000
                          F( 4)        1.000000           -1.000000
                          F( 5)        1.000000            0.000000
                          F( 6)        0.000000           -1.000000
                          F( 7)        0.000000           -1.000000
                          F( 8)        0.000000           -1.000000
                          F( 9)        0.000000           -1.000000
                         F( 10)        1.000000            0.000000
                         F( 11)        0.000000           -1.000000
                         F( 12)        0.000000           -1.000000
相关推荐
其实吧39 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
阑梦清川13 小时前
数学建模启发式算法篇(一)---遗传算法
算法·数学建模·启发式算法
Matlab程序猿小助手17 小时前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
IT猿手21 小时前
基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码
人工智能·深度学习·神经网络·算法·matlab·cnn
其实吧31 天前
基于MATLAB的运动车辆跟踪检测系统
开发语言·matlab
梦里水乡8571 天前
基于MATLAB的农业病虫害识别研究
开发语言·matlab
墨痕_7772 天前
论文阅读笔记Dense Passage Retrieval for Open-Domain Question Answering
matlab
真的是我22 天前
基于MATLAB课程设计-图像处理完整版
图像处理·人工智能·计算机视觉·matlab
羊小猪~~2 天前
数学建模(基于Python实现)--灰色关联分析法讲解,含案例
开发语言·python·数学建模
高登先生2 天前
汇聚全球前沿科技产品,北京智能科技产业展览会·世亚智博会
大数据·人工智能·科技·数学建模·能源