1、1钻井布局的数学模型张强 陈朝旭 张保强摘要:本文讨论了在一个区域内按纵横等距的点来布置井位的问题,通过移动网格使旧井利用最多,采用网格遍历求解的方法得到很好的计算精度。最后得到问题 1)的解为 I=2,4,5,10 时的旧井可以利用;问题 2)的解为 I=时的旧井可以利用。一 问题重述勘探部门在某地区找矿。要在一个区域内按纵横等距的网格点来布置井位,进行“撒网式”全面钻探。由于钻一口井的费用很高,如果新设计的井位与原有井位重合(或相当接近) ,便可利用旧井,不必打新井。因此应该尽量利用旧井,少打新井,以节约钻探费用。设平面上有 n 个点 pi,其坐标为(ai,bi),I=1,2,n,表示以有
2、的 n 个井位。新布置的井位是一个正方形网格 N 的所有结点(所谓“正方形网格”是指每个格子都是正方形的网格;结点是指纵线和横线的交叉点) 。假定每个格子的边长都是 1 单位。整个网格是可以在平面上任意移动的。若一个已知点 pi 与某个网格结点 Xi的距离不超过给定误差 =(0.05 单位),则认为 pi 处的旧井资料可用,不必在结点 Xi 处打新井。为进行辅助决策,勘探部门要求我们研究以下问题:1) 假定网格的横向和纵向是固定的(比如东西南北) ,并规定两2点间的距离为其横向距离(横坐标之差绝对值)及纵向距离(纵坐标之差绝对值)的最大值。在平面上平行移动网格 N,使可利用的旧井数尽可能大。试
3、提供数值计算方法,并对下面的数值例子用计算机进行计算。2) 在欧氏距离的误差意义下,考虑网格的横向和纵向不固定(可以旋转)的情形,给出算法及计算结果。3) 如果有 n 口旧井,给出判定这些井均可利用的条件和算法(你可以任意选定一种距离) 。数值例子 n=12 个点的坐标如下表所示:i 1 2 3 4 5 6 7 8 9 10 11 12ai 0.50 1.41 3.00 3.37 3.40 4.72 4.72 5.43 7.57 8.38 8.98 9.50bi 2.00 3.50 1.50 3.51 5.50 2.00 6.24 4.10 2.01 4.50 3.41 0.80二 基本假设1
4、) 正方形网格 N 可以覆盖 n 个井位;2) 每个格子的边长为 1;3) 旧井位点 pi(ai,bi)初始坐标位于第一象限,网格 N 可以任意移动;4) 把旧井位点看作质点;初始位置网格的某条横县和纵线与坐标轴重合,并记交点 Q 与原点 O 重合三 相关变量及其说明1) pi(ai,bi) I=1,2,n:旧井位点的坐标;2) Dpixi:pi 到结点 xi 的距离;33) :误差;4) (x1i,y1i),(x2i,y2i):pi 所在方格对角线顶点坐标;(x1i=aiif yb then Boo2:=true else boo2:=false;/ 求出坐标if boo1 and boo2
5、 thenbeginx2k:=x1k; y2k:=y1k;x1k:=x1k-1;y1k:=y1k-1;end;if boo1 and not boo2 thenbeginx2k:=x1k-1;y2k:=y1k+1;end;if not boo1 and boo2 thenbeginx2k:=x1k+1;y2k:=y1k-1;end;end;procedure TForm1.countK(a:real;b:real;x:real;y:real;k:integer);varboo1,boo2:boolean;beginboo1:=ay;/ 求出坐标if boo1 and boo2 thenbegi
6、nend;if not boo1 and boo2 thenbeginx2k:=x1k+1;y2k:=y1k+1;end;if not boo1 and not boo2 thenbeginx2k:=x1k+1;y2k:=y1k-1;end;if boo1 and not boo2 thenbegin11x2k:=x1k-1;y2k:=y1k-1;end;end;(2) 、变量定义部分varForm1: TForm1;P,P1:array of ar;/存储旧井的坐标JN:array110000 of ar1; /存储结果x1,y1,x2,y2:array of real; /存储某个 P 点
7、所在的方格对角线的俩顶点的坐标JW:array110000 of string; /不考虑旋转的情况结果i:integer;n:integer; /旧井的个数s,t:integer;/s,t 网格移动部数(3) 、程序实现部分vark:integer;MD:real;/存储最短距离mess:string;beginfor s:=0 to 99 dofor t:=0 to 99 dobeginfor k:=1 to n dobeginx1k:=int(Pk1);y1k:=int(Pk2);x2k:=x1k+1+0.01*s;y2k:=y1k+1+0.01*t;x1k:=x1k+0.01*s;y1
8、k:=y1k+0.01*t;count(Pk1,Pk2,x1k,y1k,k);/求得i所在的方格的对郊县的两顶点的坐标MD:=MinD(k);if MD0.05 thenbeginJNs*100+t+11:=JNs*100+t+11+1;/如果最小距离小与 0.05 那么可用井的个数 JNs*t+11加 1;JWs*100+t+1:=JWs*100+t+1+ +inttostr(k);end;end;JNs*100+t+12:=s;JNs*100+t+13:=t;12mess:=floattostr(JNs*100+t+11)+个+char(9)+floattostr(JNs*100+t+12
9、*0.01)+char(9)+floattostr(JNs*100+t+13*0.01)+char(9)+JWs*100+t+1;memo1.Lines.Add(mess);end;2. 问题 2)的源程序:vark,o:integer;/k,循环 n 次计算 n 各界点;o 循环 90 次MDk:real;/存储最短距离mess:string;f_x,f_y,bi:real;beginfor k:=1 to n dofor o:=1 to 2 doP1ko:=Pko;/初始化 P1k 用于初始化for s:=0 to 99 dofor t:=0 to 100 dobeginfor k:=1
10、to n do/初始化 Pkfor o:=1 to 2 doPko:=P1ko;/旋转 90 度步长 1 度for o:=1 to 89 dobeginfor k:=1 to n dobeginbi:=pk2/pk1;f_x:=pk1*pk1;f_y:=pk2*pk2;pk1:=sqrt(f_x+f_y)*cos(ArcTan(bi)+(pi*o)/90);pk2:=sqrt(f_x+f_y)*sin(ArcTan(bi)+(pi*o)/90);/坐标旋转后坐标值大小x1k:=int(Pk1);y1k:=int(Pk2);if Pk10 thenbeginx2k:=x1k-1+0.01*s;x
11、1k:=x1k+0.01*s;endelsebeginx2k:=x1k+1+0.01*s;x1k:=x1k+0.01*s;13end;y2k:=y1k+1+0.01*t;y1k:=y1k+0.01*t;if x1k0 thenbegincountK(Pk1,Pk2,x1k,y1k,k);/求得i所在的方格的对郊县的两顶点的坐标endelsebegincountK(Pk1,Pk2,x1k,y1k,k);end;MDK:=MinDK(k);if MDK0.05 thenJNs*100+t+11:=JNs*100+t+11+1;/如果最小距离小与 0.05 那么可用井的个数 JNs*t+11加 1;
12、JW2s*100+t+12:=JW2s*100+t+12+inttostr(k);end;JNs*100+t+12:=s;JNs*100+t+13:=t;JW2s*100+t+11:=inttostr(o);mess:=floattostr(JNs*100+t+11)+个+char(9)+floattostr(JNs*100+t+12*0.01)+char(9)+floattostr(JNs*100+t+13*0.01)+char(9)+JW2s*100+t+11+char(9)+JW2s*100+t+12;memo1.Lines.Add(mess);end;end;3. 问题 1)的计算结果
13、:(仅列出符合提议数据)4 个 0.36 0.46 2 4 5 104 个 0.36 0.47 2 4 5 104 个 0.36 0.48 2 4 5 104 个 0.36 0.49 2 4 5 104 个 0.36 0.5 2 4 5 104 个 0.36 0.51 2 4 5 104 个 0.36 0.52 2 4 5 104 个 0.36 0.53 2 4 5 104 个 0.36 0.54 2 4 5 104 个 0.36 0.55 2 4 5 104 个 0.38 0.46 2 4 5 104 个 0.38 0.47 2 4 5 104 个 0.38 0.48 2 4 5 104 个
14、 0.37 0.46 2 4 5 104 个 0.37 0.47 2 4 5 104 个 0.37 0.48 2 4 5 104 个 0.37 0.49 2 4 5 104 个 0.37 0.5 2 4 5 104 个 0.37 0.51 2 4 5 104 个 0.37 0.52 2 4 5 104 个 0.37 0.53 2 4 5 104 个 0.37 0.54 2 4 5 104 个 0.37 0.55 2 4 5 104 个 0.39 0.46 2 4 5 104 个 0.39 0.47 2 4 5 104 个 0.39 0.48 2 4 5 10144 个 0.38 0.49 2
15、4 5 104 个 0.38 0.5 2 4 5 104 个 0.38 0.51 2 4 5 104 个 0.38 0.52 2 4 5 104 个 0.38 0.53 2 4 5 104 个 0.38 0.54 2 4 5 104 个 0.38 0.55 2 4 5 104 个 0.4 0.46 2 4 5 104 个 0.4 0.47 2 4 5 104 个 0.4 0.48 2 4 5 104 个 0.4 0.49 2 4 5 104 个 0.4 0.5 2 4 5 104 个 0.4 0.51 2 4 5 104 个 0.4 0.52 2 4 5 104 个 0.4 0.53 2 4
16、5 104 个 0.4 0.54 2 4 5 104 个 0.4 0.55 2 4 5 104 个 0.42 0.46 2 4 5 104 个 0.42 0.47 2 4 5 104 个 0.42 0.48 2 4 5 104 个 0.42 0.49 2 4 5 104 个 0.42 0.5 2 4 5 104 个 0.39 0.49 2 4 5 104 个 0.39 0.5 2 4 5 104 个 0.39 0.51 2 4 5 104 个 0.39 0.52 2 4 5 104 个 0.39 0.53 2 4 5 104 个 0.39 0.54 2 4 5 104 个 0.39 0.55
17、2 4 5 104 个 0.41 0.46 2 4 5 104 个 0.41 0.47 2 4 5 104 个 0.41 0.48 2 4 5 104 个 0.41 0.49 2 4 5 104 个 0.41 0.5 2 4 5 104 个 0.41 0.51 2 4 5 104 个 0.41 0.52 2 4 5 104 个 0.41 0.53 2 4 5 104 个 0.41 0.54 2 4 5 104 个 0.41 0.55 2 4 5 104 个 0.42 0.51 2 4 5 104 个 0.42 0.52 2 4 5 104 个 0.42 0.53 2 4 5 104 个 0.42 0.54 2 4 5 104 个 0.42 0.55 2 4 5 104. 问题 2)的计算结果:(由于时间原因暂未给出具体结果)