数模论文 旧井的有效利用.docx
《数模论文 旧井的有效利用.docx》由会员分享,可在线阅读,更多相关《数模论文 旧井的有效利用.docx(19页珍藏版)》请在冰豆网上搜索。
![数模论文 旧井的有效利用.docx](https://file1.bdocx.com/fileroot1/2023-6/6/59bba914-a3d8-47b1-97a5-c38aad60ceef/59bba914-a3d8-47b1-97a5-c38aad60ceef1.gif)
数模论文旧井的有效利用
2012高教社杯全国大学生数学建模竞赛
承诺书
我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们将受到严肃处理。
我们参赛选择的题号是(从A/B/C/D中选择一项填写):
B
我们的参赛报名号为(如果赛区设置报名号的话):
所属学校(请填写完整的全名):
南方医科大会
参赛队员(打印并签名):
1.王沛沛
2.姚慧
3.麦金玲
指导教师或指导教师组负责人(打印并签名):
李彬
日期:
2012年8月15日
赛区评阅编号(由赛区组委会评阅前进行编号):
2012高教社杯全国大学生数学建模竞赛
编号专用页
赛区评阅编号(由赛区组委会评阅前进行编号):
赛区评阅记录(可供赛区评阅时使用):
评
阅
人
评
分
备
注
全国统一编号(由赛区组委会送交全国前编号):
全国评阅编号(由全国组委会评阅前进行编号):
钻井布局的最优策略
摘要
本文对探勘部门找矿建立了钻井布局的优化模型,充分利用了旧井资源,有力的节省了钻井费用。
对于问题一,我们用了平行移动原理把十二个旧井点平移到同一个单位正方形内,而那些点相对于正方形结点的距离不变,这样问题就得到了大大的简化。
为了实现平移,我们把旧井坐标去除整数部分,通过matlab软件编程实现寻求最多可利用旧井资源数为4。
对于问题二,我们假设网格的一个结点与任意某个旧井点重合,并以此旧井点为中心,以任意方向建立网格并使网格旋转,每旋转6度检查每一个旧井是否可被利用,再设其它11个旧井点重复上述判断就可找出可利用旧井数最多的网格即为所求,其结果为6。
对于问题三,我们采用了问题二一样的思想,为了将n口旧井都利用上,我们合理确定了网格的长度和误差范围。
此次我们以n口井中的任意一口为中心旋转,判断n口井是否可被利用。
关键词:
平移旋转网格
一、问题重述
探部门在某地区找矿。
初步勘探时期已零散地在若干位置上钻井,取得了地质资料。
进入系统勘探时期后,要在一个区域内按纵横等距的网格点来布置井位,进行“撒网式”全面钻探。
由于钻一口井的费用很高,如果新设计的井位与原有井位重合(或相当接近),便可利用旧井的地质资料,不必打这口新井。
因此,应该尽量利用旧井,少打新井,以节约钻探费用。
比如钻一口新井的费用为500万元,利用旧井资料的
费用为10万元,则利用一口旧井就节约费用490万元。
设平面上有n个点Pi,其坐标为(ai,bi),i=1,2,…,n,表示已有的n个井位。
新布置的井位是一个正方形网格N的所有结点(所谓“正方形网格”是指每个格子都是正方形的网格;结点是指纵线和横线的交叉点)。
假定每个格子的边长(井位的纵横间距)都是1单位(比如100米)。
整个网格是可以在平面上任意移动的。
若一个已知点Pi与某个网格结点Xi的距离不超过给定误差ε(=0.05单位),则认为Pi处的旧井资料可以利用,不必在结点Xi处打新井。
为进行辅助决策,勘探部门要求我们研究如下问题:
1)假定网格的横向和纵向是固定的(比如东西向和南北向),并规定两点间的距离为其横向距离(横坐标之差绝对值)及纵向距离(纵坐标之差绝对值)的最大值。
在平面上平行移动网格N,使可利用的旧井数尽可能大。
试提供数值计算方法,并对下面的数值例子用计算机进行计算。
2)在欧氏距离的误差意义下,考虑网格的横向和纵向不固定(可以旋转)的情形,给出算法及计算结果。
3)如果有n口旧井,给出判定这些井均可利用的条件和算法(你可以任意选定一种距离)。
数值例子n=12个点的坐标如下表所示:
I
1
2
3
4
5
6
7
8
9
10
11
12
ai
0.50
1.41
3.00
3.37
3.40
4.72
4.72
5.43
7.57
8.38
8.98
9.50
bi
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、问题分析
为了节约钻探费用,就应该根据旧井的位置数据,尽可能多的利用旧井。
所利用的旧井数越多,模型越好。
针对第一问,12个旧井的位置分布在正方形网格N的不同格子里,这样网格N移动的时候,我们要考虑所有的结点,这样显然太过复杂,所以我们想办法把12个旧井移动到同一个格子,这样的话,我们在同一个格子内就比较容易找出网格结点的距离不超过给定误差ε(=0.05单位)的旧井。
针对第二问,利用第一问模型2的思想。
假定网格的一个结点与任意某个旧井点重合,以此旧井点为中心,以任意方向建立网格并使网格旋转,每旋转0.1度检查每一个旧井,这样即可算出最佳旋转角度和移动距离。
针对问题三,我们采用了问题二一样的思想,为了将n口旧井都利用上,我们合理确定了网格的长度和误差范围。
此次我们以n口井中的任意一口为中心旋转,判断n口井是否可被利用。
3、模型的基本假设
(1)勘探地形对计算无影响。
(2)网格充分大。
(3)旧井都在勘探范围内。
4、符号说明
表示平面上的第
个旧井位
表示变换后的第
个旧井位
表示第
个网格结点
表示所确定的新井的位置
表示可以利用的旧井位的个数
表示第
个旧井的坐标位置
5、模型的建立与求解
1.为了节约钻探费用,就应该尽量利用旧井的数据,使可利用的旧井数尽可能多,
题设条件给定单位长的网格且给定误差ε,这样我们就要确定网格的位置,使网格结点
Xi在旧井点的误差范围内的个数尽可能多。
即满足:
公式1
的
尽可能多。
我们只要确定一个网格的结点既可确定该网格。
模型1:
对于任意一个旧井位
来说,不论网格如何建立,它都将在某一个单位长的正方形网格中,将12个井位的坐标所有整数位变为0,如
相当于将这12个旧井位平行移动到同一个单位正方形L中,而保持旧井位与包含它的网格的四个结点的相对位置不变。
图表1
根据题设定义的距离,网格结点周围以网格结点为中心,以2E为边长的正方形中的旧井位的数据是可利用的。
故用边长为2ε的小正方形M在L内作平行移动。
检查在小正方形方格M内旧井点的个数是多少。
其中包含旧井位数最多的小正方形M的中心即为所求的网格的一个结点。
此时M所包含的旧井数就是我们可利用的旧井的最大个数。
matlab编程完成用上述过程其结果是:
可利用最多井数m=4,分别为(1.41,3.50),(3.37,3.51),(3.40,5.50),(8.38,4.50)。
图一给出新井位的一种布局。
为了证实我们将问题简化的这种理论是切实可行的(即把12个旧井位放到一个边长为1的单位正方形L内来考察)。
又设计了穷举法。
假设取定
的坐标为(0,0)建立网格N,使网格N以步长2ε移动,横向每移动0.1时,纵向也以0.1为单位移动,经过100次移动,每次都用
(1)考察旧井点是否可以利用,找出可以利用的旧井的个数最多的网格即为所求。
此方法用matlab编程实现其结果与上述的结果是一致的,从而证实了我们的做法是正确的。
模型2:
显然我们要确定的网格最少有一个旧井的数据可被利用设为P1,假设网格的某个结点Zi在此旧井P1的误差范围内,再判断其它旧井的数据是否可以被利用。
为简化模型,我们可以把网格的结点就固定在旧井位P1上,把它的可利用范围累加到其它的旧井位上,计算其它旧井位与网格结点的距离。
当满足
公式2
时该井位可被利用。
最多的网格结点的位置即为所求。
此方法用matlab编程实现其结果与模型一的结果是一致的。
利用问题
(1)模型2的思想。
假定网格的一个结点与任意某个旧井点重合,以此旧井点为中心,以任意方向建立网格并使网格旋转,每旋转0.1度检查每一个旧井点是否可被利用,(旧井点与网格的距离是否在误差范围内)。
即
公式3
再对设其它11个旧井点重复上述判断找出可利用旧井数据最多的网格即为所求,其结果为可利用最多旧井m=8,完成这一布局的步骤见附录。
图给出此时新井位的一种布局。
这一方法用matlab编程完成。
同样为了进一步证实我们所采用的这种简化是合理的、结果是正确的。
仍然采用穷举法验证。
以F的结点Yi为中心旋转N,检查每一旧井点是否可被利用。
找出可被利用旧井点数最多的中心位置和旋转角度。
他们所确定的网格即为所求。
其结果与上述结果一致。
2.设平面上有n口旧井:
新井位是正方形网格R的所有结点,假定每个格子的边长为1单位,整个网格是可以在平面上任意移动的。
在欧氏距离的误差意义下,若已知某旧井
与某个网格结点的距离不超过误差ε则该旧井可利用。
分析:
新井位不可太密,这样钻探费用太高,要将n口旧井都利用上,必须合理确定网格R的边长和误差ε此时我们ε仍取0.05单位。
1)取网格R的边长
公式4
采用问题
(2)用样的方法(但此时只要以n口井中的任意一口为中心旋转即可,而不必以n口井的每一口为中心旋转n次)可判断n口井是否都可利用,若都可利用,则问题(3)得以解决,否则
2)取网格R的边长
公式5
重复上述做法,判断出此是n口井是否都可利用,否则继续:
3)取
公式6
公式7
直到n个井全都可利用。
因为d1是有限数。
故有限步即可达此目的。
六、模型的评价
参考文献
[1]吕显瑞等,数学建模竞赛辅导教材,长春:
吉林大学出版社,2002。
[2]刘来福,曾文艺,数学模型与数学建模北京:
北京师范大学出版社,1997。
[3]陈如栋,于延荣,数学模型与数学建模,北京:
国防工业出版社,2006。
[4]姜启源,谢金星,叶俊,数学模型(第三版),北京:
高等教育出版社,2003。
[5]梁炼,数学建模。
华东理工大学大学出版社2005.3。
[6]周义仓,赫孝良,西安交通大学出版社,1998.8。
[7]邓俊辉[9]熊慧,论人口预。
附录
读入数据的程序:
functionimportfile(fileToRead1)
%IMPORTFILE(FILETOREAD1)
%Importsdatafromthespecifiedfile
%FILETOREAD1:
filetoread
%Auto-generatedbyMATLABon15-Aug-201214:
33:
45
%Importthefile
sheetName='Sheet1';
[numbers,strings]=xlsread(fileToRead1,sheetName);
if~isempty(numbers)
newData1.data=numbers;
end
if~isempty(strings)
newData1.textdata=strings;
end
if~isempty(strings)&&~isempty(numbers)
[strRows,strCols]=size(strings);
[numRows,~]=size(numbers);
%Breakthedataupintoanewstructurewithonefieldperrow.
ifstrCols==1&&strRows==numRows
newData1.rowheaders=strings(:
end);
end
end
%Createnewvariablesinthebaseworkspacefromthosefields.
vars=fieldnames(newData1);
fori=1:
length(vars)
assignin('base',vars{i},newData1.(vars{i}));
end
第一问求最大可利用旧井的个数及网格移动的方向和步数:
function[f,site,a,b,c,d]=arte_well(ai,bi)
%这个程序输入旧钻井的横纵坐标ai,bi;
%输出site为1代表以(0,0)为起点移动;
%为2代表以(1,1)为起点移动;
%为3代表以(0,1)为起点移动;
%为4代表以(1,0)为起点移动;
;
%Copyright:
姚慧;
%Data:
2012/8/15;
len=length(ai);
%S1:
先将这些表示旧钻井的位置的点集中到以(0,0),(0,1),(1,0),(1,1)四点
%为交叉点的正方形内;
fornum=1:
len
ai(num)=ai(num)-floor(ai(num));
bi(num)=bi(num)-floor(bi(num));
end
%每一次移动0.01;
f=zeros(4,1);
%====================================================================
%以(0,0)为起点移动;
firstn=zeros(201,201);
fornuma=0:
99
fornumb=0:
99
fornum=1:
len
ifmax(abs(ai(num)-numa*0.01),abs(bi(num)-numb*0.01))<0.05
firstn(numa+1,numb+1)=firstn(numa+1,numb+1)+1;
end
end
end
end
f
(1)=max(max(firstn));
leng=length(find(firstn==f
(1)));
a=zeros(leng,2);
[a(:
1),a(:
2)]=find(firstn==f
(1));
%====================================================================
%以(1,1)为起点移动;
firstn=zeros(201,201);
fornuma=0:
99
fornumb=0:
99
fornum=1:
len
ifmax(abs((1-ai(num))-numa*0.01),abs((1-bi(num))-numb*0.01))<0.05
firstn(numa+1,numb+1)=firstn(numa+1,numb+1)+1;
end
end
end
end
f
(2)=max(max(firstn));
leng=length(find(firstn==f
(2)));
b=zeros(leng,2);
[b(:
1),b(:
2)]=find(firstn==f
(2));
%====================================================================
%以(0,1)为起点移动;
firstn=zeros(201,201);
fornuma=0:
99
fornumb=0:
99
fornum=1:
len
ifmax(abs((1-ai(num))-numa*0.01),abs(bi(num)-numb*0.01))<0.05
firstn(numa+1,numb+1)=firstn(numa+1,numb+1)+1;
end
end
end
end
f(3)=max(max(firstn));
leng=length(find(firstn==f(3)));
c=zeros(leng,2);
[c(:
1),c(:
2)]=find(firstn==f(3));
%====================================================================
%以(1,0)为起点移动;
firstn=zeros(201,201);
fornuma=0:
99
fornumb=0:
99
fornum=1:
len
ifmax(abs(ai(num)-numa*0.01),abs((1-bi(num))-numb*0.01))<0.05
firstn(numa+1,numb+1)=firstn(numa+1,numb+1)+1;
end
end
end
end
f(4)=max(max(firstn));
leng=length(find(firstn==f(4)));
d=zeros(leng,2);
[d(:
1),d(:
2)]=find(firstn==f(4));
number=max(f);
site=find(f==number);
程序:
证明可以将6度作为一个步长
a=sin((theta+6).*pi./180)-sin(theta.*pi./180);
max(abs(a))
ans=
0.1045
第二问解决程序:
functionffmax=borehole(ai,bi)
%这个程序输入旧钻井的横纵坐标ai,bi;
%输出最多可利用的钻井的个数nf;
%n为第几个旧井;
%theta是旋转的角度;
%site为1代表以(0,0)为起点移动;
%为2代表以(1,1)为起点移动;
%为3代表以(0,1)为起点移动;
%为4代表以(1,0)为起点移动;
%na,nb,nc,nd分别是相应的起点上的相应步数;
%Copyright:
姚慧;
%Data:
2012/8/15;
len=length(ai);
%S1:
先将这些表示旧钻井的位置的点集中到以(0,0),(0,1),(1,0),(1,1)四点
%为交叉点的正方形内;
fornum=1:
len
ai(num)=ai(num)-floor(ai(num));
bi(num)=bi(num)-floor(bi(num));
end
%分别以12个旧井为原点;
%计算新原点时,其他井所对应的坐标;
max_f=0;
fmax=0;
forcountn=1:
len
newai=ai;
newbi=bi;
lennew=zeros(12,1);
forcount=1:
len
newai(count)=newai(count)-ai(countn);
newbi(count)=newbi(count)-bi(countn);
lennew(count)=sqrt(newai(count)^2+newbi(count)^2);
end
%每次旋转6度;
theta=0;
fornj=1:
15
theta=6*nj*pi/180;
forni=1:
len
newai(ni)=lennew(ni)*cos(theta);
newbi(ni)=lennew(ni)*sin(theta);
end
[f,site,a,b,c,d]=arte_well(newai,newbi);
iflength(f)>1
f=f
(1);
end
max_f=[max_f,f];
end
max_max_f=max(max_f);
iflength(max_max_f)>1
max_max_f=max_max_f
(1);
end
fmax=[fmax,max_max_f];
end
ffmax=max(fmax);
iflength(fmax)>1
ffmax=ffmax
(1);
end
问题2结果:
11
第11井
0.2094
旋转弧度
1
2
3
4
B
C
D
10
43
85
41
10
59
85
10
42
86
42
10
59
86
11
43
86
41
11
60
86
11
41
87
42
11
58
87
11
42
87
43
11
59
87
12
43
87
41
12
60
87
12
44
87
42
12
61
87
12
41
88
43
12
58
88
13
42
88
40
13
59
88
13
43
88
41
13
60
88
13
44
88
42
13
61
88
13
40
89
43
13
58
89
13
41
89
44
13
59
89
14
42
89
41
14
60
89
14
43
89
42
14
61
89
14
44
89
43
14
62
89
14
41
90
44
14
59
90
15
42
90
41
15
60
90
15
43
90
42
15
61
90
15
41
91
43
15
59
91
15
42
91
44
15
60
91
16
43
91
42
16
61
91
16
41
92
43
16
60
92
17
42
92
43
17
61
92
11
0.3142
1
2
3
4
A
B
C
D
57
22
43
82
45
19
58
82
58
22
44
82
42
20
59
82
59
22
45
82
43
20
60
82
57
23
42
83
44
20
57
83
58
23
43
83
45
20
58
83
44
83
43
21
59
83
45
83
44
21
60
83
42
84
45
21
57
84
43
84
43
22
58
84
44
84
44
22
59
84
45
84
4