c++实现油田选址问题完整解答(内附完整代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++实现油田选址第三问题
一、问题重述
1.1 基本情况
在商品高度市场化的当今社会,物品时时刻刻处于流动之中。

资料显示,商
品的平均物流成本占总成本的36%,而其制造成本仅占总成本的13%。

据2011年
5月9日CCTV《经济半小时》报道,去年我国物流总费用占GDP的18%,比发达
国家高出近一倍,故在市场竞争日益激烈的今天,物流管理显得日益重要。

某一油田在一平坦地区拥有九口油井,其年产量及位置如下表所示。

所有的
原油都需要运输到炼油厂进行提炼。

现在不考虑炼油厂的建设费用,因此总的费
用仅与炼油厂的位置有关。

在假定的单位运费与运输距离成正比的条件下,需对
以下问题做出决策:
1.2 需解决的问题
请分别建立以下三个问题的数学模型,并予以求解,并对你所建模型的优劣
性进行评估。

1、
2、
3、若油田高层已决定在该地区建两个炼油厂,若不考虑炼油厂的建造费用,仅考虑运费,两个炼油厂分别建在什么位置,各应服务于哪几个油井(假定一个油井的原油只能运往一个炼油厂),才能使总运费最低,总费用是多少?
二、符号说明
1、:i w 各种情况下的最下总运费)
3,2,1(=i ; 2、:d 油井与炼油厂之间的距离;
3、:i c 第i 个油井的产油量(9,,2,1 =i );
4、:e 单位运费;
5、:k 单位运费与运输距离间的比例系数;
6、:),(i i y x 第i 个油井的坐标(9,,2,1 =i );
7、:d 油井产量与油井和炼油厂间的距离的乘积;
8、:,B A 第三问中所求炼油厂的位置;
9、);,(u u n m 第三问所求炼油厂的坐标(2,1=u );
10、:,21s s 分别表示第三问中两个油田服务的油井集合
11、:kl z 表示第三问分类中两个炼油厂的运输费用)12.4,3,2,1(==l k ;
三、 模型假设
1、油田的允许容量没有限制;
2、单位运费与油田的接收油量无关;
3、不考虑运输过程中的原油损耗;
4、采用管道运输方式将原油运送到炼油厂;
5、将油井看作直角坐标系上的点,将输油管道看作线段;
6、假设所有的油井均在同一个平面上;
7、不考虑运输过程中的设备损耗以及维修费用;
8、为了简化计算过程,可以文中出现的一些计算结果进行近似处理;
四、 问题分析
由题干可知,所有的原油都需要运输到炼油厂进行提炼。

从中国石油天然气运输公
司的官网上查到:油气管道运输有高效率、低成本和安全可靠等优势,有数据显示,采
用铁路油罐运输,运输过程中出现的损耗量高达0.5%,而采用管道运输方式损耗率最高
只有0.25%。

因此,从长远考虑,应采用管道运输方式运输原油。

题干中假定单位运费与运输距离成正比,通过查找资料并计算可求出其比例系数。

针对问题3,通过比较前面两个问题的求解过程,由于可在该地区建立两个炼油厂,
且不知道两个油田分别服务于哪些油井,因此我们将九个油井分为四类,其一:A 炼油
厂负责其中一个油井,B 负责其他八个;其二:A 负责其中两个油井,B 负责其他七个;
以此类推,直到A 负责其中四个油井,B 负责其他五个。

再利用两点间直线距离和油井
产量建立了最小运输费用的二源分类选址模型。

五、 模型的建立与求解
从所要解决的问题和模型假设条件出发,我们建立了三个模型并对其进行求解。

模型三 二源分类选址模型
3.1 问题分析
在不考虑炼油厂的建设费用的情况下,建立的炼油厂越多,运输总费用就越低。

若在该
地区建立两个炼油厂分别为)85,0(),(),85,0(),(2211∈∈n m n m ,问题就转换成了每个炼油
厂应各服务于几个油井,使得总运输费用最低。

我们把九个油井分为四组,分别为
)5,4(),6,3)(7,2(),8,1(类。

①)9,1(类计算
其中一个炼油厂),(11n m 负责一个油井属于1s ,另一个),(22n m 负责其他八个油井属于
2s 。

则:
)9,1(类运往),(11n m 的最小运费11z 为:
)9,,2,1(])()[(min 2
1212111 =-+-=i y n x m kc z i i i ……………(式9)
)9,1(类运往),(22n m 的最小运费12z 为: ∑∈-+-=22
1222
212])()[(min s j j j j y n x m kc z …………………(式10) ②)7,2(类计算
其中一个炼油厂),(11n m 负责2个油井属于1s ,另一个),(22n m 负责其他7个油井属于2s 。

则:
)7,2(类运往),(11n m 的最小运费21z 为:
∑∈-+-=12
1212
121])()[(min s i i i i y n x m kc z ………………(式11) )7,2(类运往),(22n m 的最小运费22z 为:
∑∈-+-=22
1222
222])()[(min s j j j j y n x m kc z …………(式12) 以此类推)5,4(类计算
其中一个炼油厂),(11n m 负责4个油井属于1s ,另一个),(22n m 负责其他5个油井属于2s 。

则:
)5,4(类运往),(11n m 的最小运费41z 为:
∑∈-+-=12
1212
141])()[(min s i i i i y n x m kc z ………………(式13) )5,4(类运往),(22n m 的最小运费42z 为:
∑∈-+-=22
1222242])()[(min s j j j j y n x m kc z …………(式14)
③最小运费
该二源分类选址模型中最小运价极为以上各类分组中两个运价之和的最小值。

)4,3,2,1(min 2
13==∑=k z w l kl ……………………(式15)
3.2 模型建立
综上分析可得:最小运价3w 表示为: ⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩
⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎧∈∈-+-=-+-=-+-==-+-===∑∑∑∑∈≠∈∈≠=);85,0(),(),85,0(),(;
])()[(min ;])()[(min ;])()[(min );
9,,2,1(])()[(min );
4,3,2,1(min 22112122224221
212141
21
222222
21212111213212n m n m y n x m kc z y n x m kc z y n x m kc z i y n x m kc z k z w s j i j j j j s i i i i s j i j j j j i i i l kl
…(式16)
3.3模型求解
通过c++编程(程序见附录3,4,5,6)计算,结果用图表显示
0102030405060708090
1020
30
4050
60
70
8090
图(3)
八、参考文献
1、傅鹂,何中市等.数学实验.北京:科学出版社,2000
2、赵廷刚,王素云等.建模的数学方法与数学模型.北京:科学出版社,2011
3、李大潜.中国大学生数学建模竞赛.北京:高等教育出版社,1998
4、姜启源.数学模型(第四版).北京:高等教育出版社,2012
5、堪安琦.科技工程中的数学模型.铁道出版社,1988
6、王树禾.数学模型基础.北京:中国科学技术大学出版社,1996
7、/view/7bd29bbac77da26925c5b01e.html
附录:
附:原油运输价格表(2003年开始执行)
源代码:
附件3:c++程序18类型的
#include "stdio.h"
#include "math.h"
#include<stdlib.h>
int main(){
double x1,y1,x2,y2,x,y,s1=0.0,zhong1=0.0,s2=0.0,zhong2=0.0,a1=0,b1=0,a2,b2;
double s=0,zhongs=0;
int i=0;
int a[9]={26,8,4,51,38,17,81,19,62};
int b[9]={38,25,70,32,17,12,63,45,22};
int c[9]={17,40,60,20,25,15,50,8,30};
int d[9]={0,0,0,0,0,0,0,0,0};
zhong1=c[0]*sqrt((x1-a[0])*(x1-a[0])+(y1-b[0])*(y1-b[0]))+c[0]*sqrt((x1-a[0])*(x1-a[0])+(y 1-b[0])*(y1-b[0]));
printf("zhong1=%f",zhong1);
zhong2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-25)*(y2-25)) +
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-32)*(y2-32)
)+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y2-12)*(y2-
12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2-45)*(y2-4
5))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]));
printf("zhong2=%f",zhong2);
zhongs=zhong1+zhong2;
printf("s=%f",s);
//system("pause");
for(i=0;i<9;i++)
{ for(x1=4;x1<=81;x1=x1+1)
for(y1=12;y1<=70;y1=y1+1)
{
s1=c[i]*sqrt((x1-a[i])*(x1-a[i])+(y1-b[i])*(y1-b[i]));
for(x2=4;x2<=81;x2=x2+1) for(y2=12;y2<=70;y2=y2+1)
{
s2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-25)*(y2 -25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-32)*(y2-32) )+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2-45)*(y2-4 5))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[i]*sqrt((x2-a[i])*(x2-a[i])+(y2-b[i])*(y2-b[i]));
s=s1+s2;
if(zhongs>s)
{
zhongs=s;
printf("zhongs=%f s1=%f s2=%f x1=%f y1=%f x2=%f y2=%f",zhongs,s1,s2,x1,y1,x2,y2);
//
printf("zhongs=%f",zhongs);
}
}
};
printf("zhongs=%f",zhongs);
}
printf("$$$$$$$$$$$$zhong1=%f \n zhong2=%f \n x1=%f y1=%f \n x2=%f y2=%f \n",zhong1,zhong2,x1,y1,x2,y2);
printf("#####zhongs=%f",zhongs);
printf("#####s1=%f s2=%f",s1,s2);
system("pause");
}
附件4:c++程序27类型的
#include "stdio.h"
#include "math.h"
#include<stdlib.h>
int main(){
double x1,y1,x2,y2,x,y,s1=0.0,zhong1=0.0,s2=0.0,zhong2=0.0,a1=0,b1=0,a2,b2;
double s=0,zhongs=0;
int i=0,j=0;
int a[9]={26,8,4,51,38,17,81,19,62};
int b[9]={38,25,70,32,17,12,63,45,22};
int c[9]={17,40,60,20,25,15,50,8,30};
int d[9]={0,0,0,0,0,0,0,0,0};
zhong1=c[0]*sqrt((x1-a[0])*(x1-a[0])+(y1-b[0])*(y1-b[0]))+c[0]*sqrt((x1-a[0 ])*(x1-a[0])+(y1-b[0])*(y1-b[0]));
printf("zhong1=%f",zhong1);
zhong2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-2
5)*(y2-25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-
32)*(y2-32))+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y
2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2
-45)*(y2-45))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]));
printf("zhong2=%f",zhong2);
zhongs=zhong1+zhong2;
printf("s=%f",s);
//system("pause");
for(i=0;i<9;i++)
{ for(x1=4;x1<=81;x1=x1+1)
for(y1=12;y1<=70;y1=y1+1) {
for(j=i+1;j<9;j++)
{
s1=c[i]*sqrt((x1-a[i])*(x1-a[i])+(y1-b[i])*(y1-b[i]))+
c[j]*sqrt((x1-a[j])*(x1-a[j])+(y1-b[j])*(y1-b[j]));
for(x2=4;x2<=81;x2=x2+1)
for(y2=12;y2<=70;y2=y2+1)
{
s2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(
y2-25)*(y2-25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-
32)*(y2-32))+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y
2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2
-45)*(y2-45))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[i]*sqrt((x2-a[i])*(x2-a[i])+(y2-b[i])*(y2-b[i]))-
c[j]*sqrt((x2-a[j])*(x2-a[j])+(y2-b[j])*(y2-b[j]));
s=s1+s2;
if(zhongs>s)
{
zhongs=s;
printf("zhongs=%f s1=%f s2=%f x1=%f y1=%f x2=%f
y2=%f",zhongs,s1,s2,x1,y1,x2,y2);
// printf("zhongs=%f",zhongs);
}
}
}
};
printf("zhongs=%f",zhongs); }
printf("%%%%%%%%%%x1=%f y1=%f \n x2=%f y2=%f \n",x1,y1,x2,y2);
printf("#####zhongs=%f",zhongs);
printf("#####s=%f s1=%f s2=%f",s,s1,s2);
system("pause");
}
附件5:c++程序36类型的
#include "stdio.h"
#include "math.h"
#include<stdlib.h>
int main(){
double x1,y1,x2,y2,x,y,s1=0.0,zhong1=0.0,s2=0.0,zhong2=0.0,a1=0,b1=0,a2,b2;
double s=0,zhongs=0;
int i=0,j=0,k=0;
int a[9]={26,8,4,51,38,17,81,19,62};
int b[9]={38,25,70,32,17,12,63,45,22};
int c[9]={17,40,60,20,25,15,50,8,30};
int d[9]={0,0,0,0,0,0,0,0,0};
zhong1=c[0]*sqrt((x1-a[0])*(x1-a[0])+(y1-b[0])*(y1-b[0]))+c[0]*sqrt((x1-a[0 ])*(x1-a[0])+(y1-b[0])*(y1-b[0]));
printf("zhong1=%f",zhong1);
zhong2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-2
5)*(y2-25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-
32)*(y2-32))+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y
2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2
-45)*(y2-45))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]));
printf("zhong2=%f",zhong2);
zhongs=zhong1+zhong2;
printf("s=%f",s);
//system("pause");
for(i=0;i<9;i++)
{ for(x1=4;x1<=81;x1=x1+1)
for(y1=12;y1<=70;y1=y1+1) {
for(j=i+1;j<9;j++)
{
for(k=j+1;k<9;k++)
{
s1=c[i]*sqrt((x1-a[i])*(x1-a[i])+(y1-b[i])*(y1-b[i]))+
c[j]*sqrt((x1-a[j])*(x1-a[j])+(y1-b[j])*(y1-b[j]))+
c[k]*sqrt((x1-a[k])*(x1-a[k])+(y1-b[k])*(y1-b[k]));
for(x2=4;x2<=81;x2=x2+1)
for(y2=12;y2<=70;y2=y2+1)
{
s2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(
y2-25)*(y2-25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-
32)*(y2-32))+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y
2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2
-45)*(y2-45))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[i]*sqrt((x2-a[i])*(x2-a[i])+(y2-b[i])*(y2-b[i]))-
c[j]*sqrt((x2-a[j])*(x2-a[j])+(y2-b[j])*(y2-b[j]))-
c[k]*sqrt((x2-a[k])*(x2-a[k])+(y2-b[k])*(y2-b[k]));
s=s1+s2;
if(zhongs>s)
{
zhongs=s;
printf("zhongs=%f s1=%f s2=%f x1=%f y1=%f x2=%f
y2=%f",zhongs,s1,s2,x1,y1,x2,y2);
//
printf("zhongs=%f",zhongs);
}
}
}
}
};
printf("zhongs=%f",zhongs); }
printf("%%%%%%%%%%x1=%f y1=%f \n x2=%f y2=%f \n",x1,y1,x2,y2);
printf("#####zhongs=%f",zhongs);
printf("#####s=%f s1=%f s2=%f",s,s1,s2);
system("pause");
}
附件6:c++程序45类型的
#include "stdio.h"
#include "math.h"
#include<stdlib.h>
int main(){
double x1,y1,x2,y2,x,y,s1=0.0,zhong1=0.0,s2=0.0,zhong2=0.0,a1=0,b1=0,a2,b2;
double s=0,zhongs=0;
int i=0,j=0,k=0,l=0;
int a[9]={26,8,4,51,38,17,81,19,62};
int b[9]={38,25,70,32,17,12,63,45,22};
int c[9]={17,40,60,20,25,15,50,8,30};
int d[9]={0,0,0,0,0,0,0,0,0};
zhong1=c[0]*sqrt((x1-a[0])*(x1-a[0])+(y1-b[0])*(y1-b[0]))+c[0]*sqrt((x1-a[0])*(x1-a[0])+(y 1-b[0])*(y1-b[0]));
printf("zhong1=%f",zhong1);
zhong2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-25)*(y2-25)) +
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-32)*(y2-32)
)+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y2-12)*(y2-
12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2-45)*(y2-4
5))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]))-
c[0]*sqrt((x2-a[0])*(x2-a[0])+(y2-b[0])*(y2-b[0]));
printf("zhong2=%f",zhong2);
zhongs=zhong1+zhong2;
printf("s=%f",s);
//system("pause");
for(i=0;i<9;i++)
{ for(x1=4;x1<=81;x1=x1+1)
for(y1=12;y1<=70;y1=y1+1)
{
for(j=i+1;j<9;j++)
{
for(k=j+1;k<9;k++)
{
for(l=k+1;l<9;l++)
{
s1=c[i]*sqrt((x1-a[i])*(x1-a[i])+(y1-b[i])*(y1-b[i]))+
c[j]*sqrt((x1-a[j])*(x1-a[j])+(y1-b[j])*(y1-b[j]))+
c[k]*sqrt((x1-a[k])*(x1-a[k])+(y1-b[k])*(y1-b[k]))+
c[l]*sqrt((x1-a[l])*(x1-a[l])+(y1-b[l])*(y1-b[l]));
for(x2=4;x2<=81;x2=x2+1) for(y2=12;y2<=70;y2=y2+1)
{
s2=17*sqrt((x2-26)*(x2-26)+(y2-38)*(y2-38))+40*sqrt((x2-8)*(x2-8)+(y2-25)*(y2 -25))+
60*sqrt((x2-4)*(x2-4)+(y2-70)*(y2-70))+20*sqrt((x2-51)*(x2-51)+(y2-32)*(y2-32) )+
25*sqrt((x2-38)*(x2-38)+(y2-17)*(y2-17))+15*sqrt((x2-17)*(x2-17)+(y2-12)*(y2-12))+
50*sqrt((x2-81)*(x2-81)+(y2-53)*(y2-53))+8*sqrt((x2-19)*(x2-19)+(y2-45)*(y2-4 5))+
30*sqrt((x2-62)*(x2-62)+(y2-22)*(y2-22))-
c[i]*sqrt((x2-a[i])*(x2-a[i])+(y2-b[i])*(y2-b[i]))-
c[j]*sqrt((x2-a[j])*(x2-a[j])+(y2-b[j])*(y2-b[j]))-
c[k]*sqrt((x2-a[k])*(x2-a[k])+(y2-b[k])*(y2-b[k]))-
c[l]*sqrt((x2-a[l])*(x2-a[l])+(y2-b[l])*(y2-b[l]));
s=s1+s2;
if(zhongs>s)
{
zhongs=s;
printf("^^^^^^^zhongs=%f s1=%f s2=%f x1=%f y1=%f x2=%f y2=%f i=%d j=%d
k=%d l=%d\n",zhongs,s1,s2,x1,y1,x2,y2,i,j,k,l);
// printf("zhongs=%f",zhongs);
}
}
}
}
}
};
printf("zhongs=%f",zhongs);
}
printf("%%%%%%%%%%x1=%f y1=%f \n x2=%f y2=%f \n",x1,y1,x2,y2);
printf("#####zhongs=%f",zhongs);
printf("#####s=%f s1=%f s2=%f",s,s1,s2);
system("pause");
}。

相关文档
最新文档