供应链网络的建立与道路破坏问题Word下载.docx
- 文档编号:16590372
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:134.99KB
供应链网络的建立与道路破坏问题Word下载.docx
《供应链网络的建立与道路破坏问题Word下载.docx》由会员分享,可在线阅读,更多相关《供应链网络的建立与道路破坏问题Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
5.由于城市49获取供应必须经过路径21--49,因此,问题三中不考虑21--49道路,即该道路不能被破坏(问题二考虑)。
6.不考虑所有外部因素,如天气,其他运输方式等等。
4、模型的建立及求解
模型表示:
模型一
——对于问题一的求解
1.1模型的建立
一、思路分析
该问要求从28个城市中选取部分城市作为供应点供应全国49个城市,使总费用最小,而该费用包括建立供应站的费用和运输的费用,因此我们利用穷举的方法,分别对28个城市进行取舍,求出各种情况下的总费用,比较得到最小总费用,从而得到对应的最优解。
二、模型建立的步骤
在二维坐标系中根据各节点之间的可达性及距离建立一个无向图,表示为G(V,E)。
图的顶点由1,2,3,4,…,49共49个点组成,如图4.1.1所示。
图4.1.1
然后根据各节点之间的可达性及距离,利用弗洛伊德算法分别求解每个节点到其余48个节点的最短路径。
弗洛伊德算法思想如下(程序部分源代码见附录):
1.从任意一条单边路径开始。
所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
2.对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比已知的路径更短。
如果是,则更新它。
3.将图用邻接矩阵G表示出来,如果从
到
有路可达,则
,d表示该路的长度;
否则,
。
4.定义一个矩阵D用来记录所插入点的信息,
表示从
需要经过的点,初始化
5.把各个顶点插入图中,比较插入点后的距离与原来的距离,
,如果
的值变小,则
在G中包含有两点之间最短道路的信息,而在D中则包含了最短通路径的信息。
得到结果后,我们从中筛选出所有城市到这28个可作为供应点城市的最短路径,并将该结果赋值给一个二维数组
利用穷举法穷举出28个可作为供应站的节点的取舍情况。
针对每种情况,求出全国49个城市到各供应站的最短路径
求得
的最小值,将其对应的供应点城市标号存于
然后分别计算sum1与sum2的值,公式如下:
将sum1与sum2相加:
得到该种情况对应的总费用。
在程序中我们还设定了一个min来记录最小值,将每次的结果与该值比较,最后得到该最小值以及作为供应点的城市以及各供应点所供应的城市。
上述步骤可以建立一个求最优解的模型,通过回溯算法得到所有情况下的结果,利用计算机的运算高速以及可以处理海量数据的优点,通过编写程序来得到结果。
1.2利用模型求解
建立模型后可编写出解决本问题的程序,通过运行程序我们得到了最终结果,供应点为4,7,11,20,23,26,28,45。
总花费为9197114元。
程序部分源代码见附录。
同样地,利用所建立的模型,对程序稍作修改,即可解决类似求最优解的实际问题。
本问题中各供应点及其所供应的城市如下表所示:
表4-1-1
供应点
供应的城市
4
1,2,3,4,5,15,16,27,46,47
7
6,7,8,39,40,41,42
11
9,10,11,12,13,32,36,37,38,43
20
19,20,21,24,25,33,34,35,48,49
23
22,23
26
28
28,29,30,31
45
14,17,18,44,45
每一个供应点到需求点的连接情况如图4.1.2所示(黑点表示供应点,线段表示供应点供应的城市)。
图4.1.2
模型二
——对于问题二的求解
2.1模型的建立
在问题一中,我们已经求出所有的供应点以及所有城市到相应供应点的距离。
在该问中,供应点是不变的,即sum1保持不变,而sum2的值随道路被破坏的情况而改变,我们同样可以求得道路被破坏后所有城市到其新的供应点的距离(该城市到所有供应点的最短距离),即
和
可能会被改变。
通过破坏最少的道路,使对方新的总花费超过原来的25%。
我们同样用穷举法,从最少的情况算起,逐次增加被破坏道路数,当其第一次达到要求时停止,得到结果。
因为只有9条道路可以被破坏,如表4-2-1所示,由图4.1.1我们可以发现如果破坏第8条道路(21--49)的话,第49个城市将无法被供应,因此我们可以分两种情况来讨论。
表4-2-1
道路序号
城市1
城市2
破坏概率
1
5
0.6
2
3
0.7
40
0.45
10
0.5
19
0.55
6
24
25
0.4
17
8
21
49
9
情况一:
只破坏第八条道路,第49个城市将无法供应,而它又不是供应点,即此时sum2无穷大,从而sum无穷大,即此时符合题目要求;
情况二:
不破坏第八条道路,即只考虑其他8条道路的破坏。
假设破坏第i(i=1,2,3,…,8)条道路,我们可以改变读入的数据来达到效果,即将被破坏的道路的边长度值置为∞,用弗洛伊德函数(计算各节点间最短路径)计算改变后的数据,求出此时的各节点间的最短路径,保存结果至新的dist数组中,即求得全国49个城市到8个供应点的最短路径,结果存至m[49][8]中。
对每一个城市i,比较m[i][8]的大小,即可求得离它最近的供应点,从而得到相应的最短路径,存于n[i]中,并记录道路的破坏情况。
最后计算该种情况下的运输费用sum2,公式如下:
将sum1(建设配送中心的费用)与sum2相加:
得到此时的最少总费用sum。
当sum>
=1.25*9197114时,停止计算(也可以不停止,为第三问做准备)。
此时得到的结果即为最优情况。
上述步骤可以建立一个求最优解的模型,利用回溯算法得到所有情况下的结果,通过编写程序来得到结果。
2.2利用模型求解
破坏21--49,在模型假设下成立。
不考虑21--49,通过运行程序我们最少破坏6条道路,分别为:
4—5,3—4,10—11,19—20,17—45,20--21。
总花费为11577775元。
程序输出的部分结果见附录(从左至右的8位数字依次表示附录中表8-1的道路1,2,3,4,5,6,7,9,其中数字1表示该道路被破坏,数字0表示该道路未被破坏),整体效果图如下所示(绿线表示要被破坏的道路)。
图4.2.1
模型三
——对于问题三的求解
3.1模型的建立
道路能否被破坏具有随机性,其他和问题二一样,运输时产生的费用按照平均费用来考虑,同时因为具有一定的概率,所以并不一定是破坏的越多,对方总费用增加越多,因此我们还是需要考虑所有的情况,利用穷举法,计算出所有情况下的总花费,通过比较得到最大花费。
因为成功破坏道路存在一定的概率,所以想要破坏的道路并不一定成功破坏。
想要破坏的道路共有
种情况。
针对每种情况(设为i),假设想要破坏的道路为n条。
这n条道路被成功破坏与否有
种子情况。
计算中我们利用l[i]来存储成功破坏各条道路的概率值。
L[i]初始值赋为1,由于在问题二中已经计算出每种破坏情况所对应的最少花费,存储在s[i]中。
针对每种子情况(设为k),若q[i]=1(即第i条道路被成功破坏),置l[i]=l[i];
若q[i]=0(即第i条道路不被破坏),置l[i]=1-l[i]。
从而利用以下公式:
计算得到第k种子情况所得到的最少花费sum(k)。
接着利用公式:
计算得到第i种破坏情况下的最少运输费用
,比较256种情况,得到最大总费用,它所对应的破坏道路情况即为最优解。
上述步骤可以建立一个求最优解的模型,通过回溯中嵌套回溯得到所有情况下的结果,利用计算机的运算高速以及可以处理海量数据的优点,通过编写程序来得到结果。
3.2利用模型求解
通过运行程序我们得到两种结果:
破坏所有的8条道路(4—5,3—4,7—40,10—11,19—20,24—25,17—45,20—21),破坏7条道路(4—5,3—4,7—40,10—11,19—20,17—45,20—21),两者的平均总花费均为10606256.45元。
而破坏越少的道路成本越低,因此选择破坏7条道路(4—5,3—4,7—40,10—11,19—20,17—45,20—21),总花费为10606256.45元。
5、模型的分析
误差及精度分析:
(1)对于模型一,使用了精确的弗洛伊德算法,并在此基础上,通过程序穷举出所有可能结果,从而得到最优值,故误差较小,此模型可以使用。
(2)对于模型二,在问题一的基础上,利用穷举法得到最优值,误差较小,此模型精度较高。
(3)对于模型三,利用穷举法得到最优值,虽然存在小数计算,但由于是利用程序通过计算机精确运算,故该模型精度较高。
6、模型的优缺点
6.1模型的优点
1.充分利用了已知数据建立模型,使其具有很高的准确性和可行性。
2.建立的最优化模型能与实际紧密联系,结合实际情况对问题进行求解,使得模型具有很好的通用性。
3.使用了准确的算法和适当的假设,并充分兼顾题目限制条件,使模型的准确性和实用性达到统一。
6.2模型的缺点
1.穷举法缺乏灵活性,需要进行进一步的优化。
2.由于用到回溯算法,程序运行占用的资源较多。
7、参考文献
[1]西北工业大学数学建模指导委员会,《数学建模简明教程》第2章,第9章,高等教育出版社,2008.
[2]姜启源,谢金星,叶俊,《数学模型》,高等教育出版社,2003.
[3]孙蓬,《MATLAB基础教程》,清华大学出版社,2011.
[4]张志涌,杨祖樱,《MATLAB教程》,北京航空航天大学出版社,2008.
8、附录
表8-1破坏道路及概率
表8-2问题二程序部分运行结果
(问题二部分总花费比较大的结果)
总花费(单位:
元)
8条道路破坏情况
11143902
01001011
01001111
11198563
01011001
11143869
01011010
11413213
01011011
01011101
01011110
01011111
11179089
01101011
01101111
11233750
01111001
11179056
01111010
11448400
01111011
01111101
01111110
01111111
11093814
11001001
11039120
11001010
11308464
11001011
11001101
11001110
11001111
11003821
11010011
11010111
11093781
11011000
11363125
11011001
11308431
11011010
11577775(问题结果)
11011011
表8-3问题三程序部分运行结果
(问题三部分总花费比较大的结果)
10380831.77
10397545.82
10395193.25
10504870.82
10396665.92
10303702.4
01111000
10413379.97
10411027.4
10520704.97
01111100
10359058.25
10356705.68
10466383.25
10317059.98
10373419.73
10483097.3
10480744.73
10590422.3
11011100
11011101
11011110
11011111
10374892.4
11101001
10372539.83
11101010
10482217.4
11101011
11101101
11101110
11101111
10332894.13
11110011
11110111
10389253.88
11111000
10498931.45
11111001
10496578.88
11111010
10606256.45
11111011
11111100
11111101
11111110
11111111
8-4Floyd算法部分代码
voidfloyd(intdist[][MAXSIZE],intpath[][MAXSIZE],intn)
{
inti,j,k;
for(i=0;
i<
n;
i++)
for(j=0;
j<
j++)
path[i][j]=i;
for(k=0;
k<
k++)
if(dist[i][j]>
MAXSUM(dist[i][k],dist[k][j]))
path[i][j]=path[k][j];
dist[i][j]=MAXSUM(dist[i][k],dist[k][j]);
}
8-4问题一算法部分代码
intmin(intd[])
{
intmin=d[0];
intt;
for(inti=0;
i<
28;
i++)
if(min>
d[i])
{
min=d[i];
t=i;
}
returnt;
}
voidprint()
intsum=0;
49;
for(intj=0;
j<
j++)
d[j]=10000;
for(j=0;
if(c[j]!
=0)
d[j]=a[i][j];
e[i]=min(d);
for(intj=0;
sum+=c[j]*b[j];
for(i=0;
sum+=0.5*a[i][e[i]]*f[i];
fprintf(output,"
%4d"
sum);
voidsearch(intm)
if(m==N)
print();
else
c[m]=0;
search(m+1);
c[m]=1;
8-5问题二算法部分代码
FILE*output1=fopen("
Result1.txt"
"
w"
);
intdist[MAXSIZE][MAXSIZE];
intdist2[200][200];
intb[49]={0};
intf1[49]={1232,974,965,358,223,715,753,989,1391,624,677,487,636,495,603,721,834,642,786,693,156,3257,1126,364,531,51,774,323,194,151,234,246,701,55,233,174,568,761,583,317,204,272,948,1150,401,224,217,366,55};
intc[9]={0};
voidfloyd(intdist1[][MAXSIZE],intpath1[][MAXSIZE],intn);
voiddisplay_path(intdist1[][MAXSIZE],intpath1[][MAXSIZE],intn);
inte[8]={4,3,7,10,19,24,17,20};
intf[8]={5,4,40,11,20,25,45,21};
intg[8]={530,210,429,279,710,650,362,560};
intIs_e(inta,intb)
for(inti=0;
8;
if((a==e[i]&
&
b==f[i])||(b==e[i]&
a==f[i]))
{
return1;
}
return0;
voidinit()
for(inti=0;
if(c[i]==0)
dist[e[i]-1][f[i]-1]=g[i];
dist[f[i]-1][e[i]-1]=g[i];
voidreadin(intdist1[][MAXSIZE],int*number);
intsearch(inta[],intn)
intmin=a[0];
=a[i])
min=a[i];
returnmin;
sum=272080+457824+411616+526680+684608+31008+196384+243808;
//建设费用
sum+=0.5*b[i]*f1[i];
fprintf(output1,"
%d\t"
sum);
fprintf(output1,"
%d"
c[i]);
\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 供应 网络 建立 道路 破坏 问题