导航菜单
首页 >  大学生数学建模竞赛真题题目  > 2020年全国大学生数学建模竞赛B题穿越沙漠问题

2020年全国大学生数学建模竞赛B题穿越沙漠问题

2020年全国大学生数学建模竞赛B题 穿越沙漠 2020高教杯数学建模竞赛原题 2020高教杯数学建模竞赛原题 题目是讲玩家在不同地图下穿越沙漠,所获得的资金数要最多(大概是这个意思)。然后通过文章的描述又总结了N个约束条件。整体的思路就是对资金最大化作为目标函数在给定约束,利用具体(已知)条件,进行单目标优化。 总的分三小问: 第一问:玩家在已知每天天气条件下,对地图1和2进行路径规划。 第二问:玩家在未知每天天气条件下,对地图3和4进行路径规划。 第三问:多个玩家游戏,讨论已知天气条件(地图5)和未知天气条件(地图6)的合理决策。 每个地图在Result.xls附录中给出了具体的信息,其中包括:

地图拓扑结构,初始购买金额限值,负重限制,日期限值,不同天气对当日物资消耗的影响。 玩家总的思路就是从起点去往终点,在路途中确定当天合适的决策(移动/停留),物资不能消耗殆尽(不能饿死也不能渴死)。如果选择在矿山停留可以选择挖矿,经过村落可以通过资金进行补给,最后到达终点时使剩余资金最大化。 确定好思路后,就可以开始建模了。 主要考虑四大部分: 已知条件、决策变量、约束条件、目标函数 1.已知条件: 前两问给出了已知的天气情况,这里用w i w_iwi​表示第iii天的天气:w i={ 1 2 3晴朗 高温 沙暴 w_i=\left\{ \begin{array}{c} 1\\ 2\\ 3\\ \end{array} \right. \begin{array}{c} \text{晴朗}\\ \text{高温}\\ \text{沙暴}\\ \end{array}wi​=⎩⎨⎧​123​晴朗高温沙暴​ 题目附件 根据题目给出的已知信息,可以知道对应基础水和食物的消耗量分别为:p i={ 5 8 10wi = 1wi = 2wi = 3   q i={ 7 6 10wi = 1wi = 2wi = 3p_i=\left\{ \begin{array}{c} 5\\ 8\\ 10\\ \end{array} \right. \begin{array}{c} w_i=1\\ w_i=2\\ w_i=3\\ \end{array}\,\, q_i=\left\{ \begin{array}{c} 7\\ 6\\ 10\\ \end{array} \right. \begin{array}{c} w_i=1\\ w_i=2\\ w_i=3\\ \end{array}pi​=⎩⎨⎧​5810​wi​=1wi​=2wi​=3​qi​=⎩⎨⎧​7610​wi​=1wi​=2wi​=3​ 2.决策变量: 初始食物和水的购买量:X,Y均为正整数 村落食物和水的补给量:CX,CY均为正整数 当日行动决策变量均为0-1变量:xjk i={1 第i天从地方j走向地方k0 其他      z1 i={1 停留0 行走      z2 i={1 挖矿0 不挖矿      z3 i={1 购买物资0 不购买物资x_{jk}^{i}=\left\{ \begin{array}{c} 1 \text{ 第}i\text{天从地方}j\text{走向地方}k\\ 0 \text{ 其他}\\ \end{array} \right. \\ \,\, \\ \,\,z1_i=\left\{ \begin{array}{c} 1 \text{ 停留}\\ 0 \text{ 行走}\\ \end{array} \right. \,\, \\ \,\, \\ z2_i=\left\{ \begin{array}{c} 1 \text{ 挖矿}\\ 0 \text{ 不挖矿}\\ \end{array} \right. \,\, \\ \,\, \\ z3_i=\left\{ \begin{array}{c} 1 \text{ 购买物资}\\ 0 \text{ 不购买物资}\\ \end{array} \right.xjki​={1 第i天从地方j走向地方k0 其他​z1i​={1 停留0 行走​z2i​={1 挖矿0 不挖矿​z3i​={1 购买物资0 不购买物资​ 3.约束条件 物资(水和食物)的重量限制和初始资金限制: {w e i g h t = 3 X + 2 Y ⩽ 1200 c o s t = 5 X + 10 Y ⩽ 10000\left\{ \begin{array}{c} weight=3X+2Y\leqslant 1200\\ cost=5X+10Y\leqslant 10000\\ \end{array} \right.{weight=3X+2Y⩽1200cost=5X+10Y⩽10000​ 对于移动我们只能在相邻的区域之间进行移动,因此我们需要通过matlab对图区域之间的接壤情况列出距离矩阵di jd_{ij}dij​:dij={ 1 0 区域 i 与区域 j 接壤不接壤 d_{ij}=\begin{cases} 1\\ 0\\ \end{cases}\begin{array}{c} \text{区域}i\text{与区域}j\text{接壤}\\ \text{不接壤}\\ \end{array}dij​={10​区域i与区域j接壤不接壤​ 列出距离矩阵后,对决策变量进行限制,使玩家只能在相邻区域之间进行移动:xjk i⩽djk{x_{jk}^{i}}\leqslant d_{jk}xjki​⩽djk​ 每天的决策只能有一个,要么在某地停留要么移动,因此有约束条件:∑j=1 N∑k=1Nxjki= 1 \sum_{j=1}^N{\sum_{k=1}^N{x_{jk}^{i}}}=1j=1∑N​k=1∑N​xjki​=1 首先第1天要从起点1开始出发去往某地k,于是便有:∑k=1 N x1k 1= 1 \sum_{k=1}^N{x_{1k}^{1}}=1k=1∑N​x1k1​=1 其次我们需要保证路径是连续的,因此当天的出发地要是前一天的目的地:∑j=1 N xjk i  =∑j=1 N xkji+1\sum_{j=1}^N{x_{jk}^{i}}\,\,=\sum_{j=1}^N{x_{kj}^{i+1}}j=1∑N​xjki​=j=1∑N​xkji+1​ 最后需要某一天抵达终点,因此需要保证:∑i=1 n∑k=1N−1xkNi= 1 \sum_{i=1}^{n}{\sum_{\begin{array}{c} k=1 \end{array}}^{N-1}{x_{kN}^{i}}}=1i=1∑n​k=1​∑N−1​xkNi​=1 到达终点停止,若到达终点,未满30天,后面的天数则视为在终点处停留,不消耗物资,资金数也不发生变化:∑j=1 Nxj   27i −x2727i+1= 0 \sum_{j=1}^N{x_{j\,\,27}^{i}-x_{27 27}^{i+1}}=0j=1∑N​xj27i​−x2727i+1​=0 如果第iii天想在某地jjj停留则可以表示为:xj ji =1x_{jj}^{i}=1xjji​=1,那么表示停留/行走的0-1变量z1 i z1_iz1i​就需要满足表达式: z1 i=∑j=1 N xjj iz1_i=\sum_{j=1}^N{x_{jj}^{i}}z1i​=j=1∑N​xjji​ 题目给定的额外条件有: 沙暴天气一定得停留:w i−∑j=1 n xjj i⩽ 2 w_i-\sum_{j=1}^n{x_{jj}^{i}}\leqslant 2wi​−j=1∑n​xjji​⩽2 停留矿山可以挖矿,设矿山为mmm则有: z2 i⩽xmm iz2_i\leqslant x_{mm}^{i}z2i​⩽xmmi​ 途径村落可以购买物资,设村庄为ttt则有: z3 i⩽∑j=1 Nxtji +xjtiz3_i\leqslant \sum_{j=1}^N{x_{tj}^{i}+x_{jt}^{i}}z3i​⩽j=1∑N​xtji​+xjti​ 决策所产生的资金变化: a.挖矿收益:r i={ 0 1000 z2i = 1 z2i = 0r_i=\left\{ \begin{array}{c} 0\\ 1000\\ \end{array} \right. \begin{array}{c} z2_i=1\\ z2_i=0\\ \end{array}ri​={01000​z2i​=1z2i​=0​ b.物资购买为初始地的两倍价格。 最后得出的每天资金减少量为:closs i =10cX i +20cY i −r i closs_i=10cX_i+20cY_i-r_iclossi​=10cXi​+20cYi​−ri​ 剩余资金:reward i =10000−cost−∑q = 1 i − 1c l o ss qreward_i=10000-cost-\sum_{q=1}^{i-1}{closs_q}rewardi​=10000−cost−∑q=1i−1​clossq​ 决策后所剩余的水和食物必须充足,满足生存条件,同时资金限制和重量限制也需要满足:10000 − c o s t −∑q=1i−1 c l o ssq⩾ c l o ss i 1200 − w e i g h t −∑q=1i−1 w l o ssq⩾ w l o ss i\\ 10000-cost-\sum_{q=1}^{i-1}{closs_q}\geqslant closs_i \\ 1200-weight-\sum_{q=1}^{i-1}{wloss_q}\geqslant wloss_i10000−cost−q=1∑i−1​clossq​⩾clossi​1200−weight−q=1∑i−1​wlossq​⩾wlossi​ 每天水和食物的消耗量计算公式: yX i={pibi 0    未抵达终点抵达终点   yY i={qibi 0  未抵达终点抵达终点 yX_i=\left\{ \begin{array}{c} p_ib_i\\ 0\\ \end{array} \right. \,\,\begin{array}{c} \,\,\text{未抵达终点}\\ \text{抵达终点}\\ \end{array}\,\,yY_i=\left\{ \begin{array}{c} q_ib_i\\ 0\\ \end{array} \right. \begin{array}{c} \,\,\text{未抵达终点}\\ \text{抵达终点}\\ \end{array}yXi​={pi​bi​0​未抵达终点抵达终点​yYi​={qi​bi​0​未抵达终点抵达终点​ 其中倍数b i b_ibi​的计算公式为:b i={ 1 2 3停留 移动 挖矿 b_i=\left\{ \begin{array}{c} 1\\ 2\\ 3\\ \end{array} \right. \begin{array}{c} \text{停留}\\ \text{移动}\\ \text{挖矿}\\ \end{array}bi​=⎩⎨⎧​123​停留移动挖矿​ 4.目标函数: 剩余物资半价回收处理: max ⁡ f = r e w a rd 30+ 5 f o od 30+ 2.5 w a t er 30\max f=reward_{30}+5food_{30}+2.5water_{30}maxf=reward30​+5food30​+2.5water30​ LINGO编程求解:

model:sets:a1/1..27/;a2(a1,a1):d;!d是由题目给出的拓扑图所获得的相邻矩阵关系,d(j,k)=1表示区域j和k相邻,否则不相邻;a3/1..30/:cX,cY,yY,yX,w,z1,z2,z3,b,r,aX,aY,kk,wuzi,shui;!cX cY是村庄购买食物和水的量,yX,yY是食物和水对应天气所需要的消耗量,w代表天气 1 2 3分别为晴朗、高温和沙暴;!z1,z2,z3代表移动、挖矿、购买的决策变量,b是z1、z2、z3决策所造成的倍数:移动是2 停留是1 挖矿是3,r是挖矿收益,若挖矿则收益为1000,aX、aY每天食物和水的消耗量;!kk代表剩余资金,wuzi为剩余食物,shui剩余水;a4(a3,a1,a1):x;!x(i,j,k)=1表示第i天从j点去往k点;a5(a3,a1);endsetsx1>0;y1>0;@gin(x1);@gin(y1);!起始点购买水和物资的数量大于0且为整数;@for(a3(i):@bin(z1(i)));@for(a3(i):@bin(z2(i)));@for(a3(i):@bin(z3(i)));!行动决策变量为0-1变量,z1=1表示停留 0作移动,z2=1表示挖矿 0则不挖矿,z3=1表示途径村落购买物资,0则不买物资;@for(a3(i):@gin(cX(i)));@for(a3(i):@gin(cY(i)));@for(a3(i):cX(i)>=0);@for(a3(i):cY(i)>=0);!购买食物和水的数量必须大于0且为整数;!各变量约束;weight=3*x1+2*y1;cost=5*x1+10*y1;cost

相关推荐: