1、14015.2 飞行管理问题学习目标1. 能表述飞行管理问题的分析过程;2. 能表述模型的建立方法;3. 会采用分割枚举法计算非线性优化问题;4. 会利用 Mathematica 求解飞行管理问题。一、 问题在约 10,000 米高空的某边长 160 公里的正方形区域内,经常有若干架飞机作水平飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会与区域内的其它飞机发生相撞。如果发生相撞,则应计算如何调整各架(包括新进入的)飞机的飞行方向角,以避免碰撞。现假设条件如下:1 不相撞的标准为任意两架飞机
2、的距离大于 8 公里;2 飞机飞行方向角调整的幅度不应超过 30 度;3 所有飞机的飞行速度均为每小时 800 公里;4 进入该区域的飞机在到达区域边缘时,与区域内飞机的距离应在 60 公里以上;5 最多需考虑 6 架飞机;6 不必考虑飞机离开此区域后的情况。请你对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据进行计算(方向角误差不超过 0.01 度),要求飞机飞行方向角调整的幅度尽量小。设该区域 4 个顶点的坐标为(0,0),(160,0),(160,160),(0,160)。记录数据为:飞机编号 横坐标 纵坐标 方向角(度)1 150 140 2432 85 85 236
3、3 150 155 220.54 145 50 1595 130 150 230新进入 0 0 52注:方向角指飞行方向与 x 轴正向的夹角。二、 问题分析及模型的建立1符号说明(x i0,y i0) 第 i 架飞机的初始位置 ai0 第 i 架飞机的初始方向角ai 第 i 架飞机的方向角 v 飞机速率Cij cosai cosaj Sij sinai sinajx ij xi0- xj0 yij yi0 - yj0f 偏差平方和函数 m 步长的缩小倍数uij 两架飞机 Pi 相对 Pj 速度 hij 两架飞机 Pi 相对 Pj 位移1412分析及建立模型该问题显然是一个优化问题。目标为各飞机
4、调整的角度最小,约束条件为按调整后的角度飞行,任意两架飞机在区域内的距离大于 8 公里,各飞机飞行方向的调整角度为约束变量。可取目标函数为各飞机调整角度的平方和,即 f = 。根据相对运动原理,飞机6120)(iiiaPi 相对于 Pj 的相对速度为 uij=(vC ij,vS ij),飞机 Pi 相对于 Pj 的位移为 hij =(x ij,y ij),容易知,飞行中飞机 Pi 到 Pj 的可能的最短距离(点到直线的距离)为 lij =P j B,利用 uij和 hij 可求出 。22)(ijijij Csyxl若 uij 和 hij 的方向一致(夹角64 等价于 T= hijuij 2ij
5、l=x ij Cij +y ij Sij 0,故问题的约束条件为:而 64 或 T= hijuij =x ij Cij +y ij Sij 0,从而2ijl数学模型为:min f = 6120)(iiias.t. 6422ijijij Csyxl或 T= hijuij =x ij Cij +y ij Sij 0三、 模型的求解显然,此问题是一个非线性优化问题。我们采用分割枚举法对其求解。分割枚举法的原理很简单:将优化区域进行分割(构造多重循环),对所有可能的解(分割网格点)进行枚举判断,直接得出在一定精度范围内的最优解。但如果不使用任何技巧进行分割枚举,必将耗费大量时间。以本题为例,若在-10
6、,10度的范围内进行分割枚举,步长为 0.01 度,需用六层循环,约计算(20/0.01 ) 6 = 6.41019 次,若设计算一次循环内的函数费时 2.710-5 秒,共需用时间约为 1.81015 秒,约等于六千万年。为在较短的时间内求得一个较精确的解,在分割枚举的基础上,采用逐步求精的方法。即每次用一定的步长以较少的循环次数进行“粗选”,在“粗选”出的解附近以减小了的步长进行“精选”,逐步推进直至达到指定精度。我们考虑-10 ,10度区间,逐步求精,步长减小的倍数取为 m=10,即每层循环的循环次数为 m,则求精 4 次即可达到精度要求。算法描述如下:/* 用数组 rf 记录当前求精区
7、间的中心坐标,用数组 rfamin 记录当前已得到的最优解 */* length 表示当前搜索区间的半径,m 表示逐步求精步长减小的倍数, fmin 记录当前的最好结果对应的目标函数值,数组 rf 纪录当前求精区间的中心坐标,rfa 为各架飞机的调整角,数组 rfamin 记录当前已得到的最优解,step 为步长 */142length=10;m=10;fmin=999 ;rf1=0;rf2=0;rf3=0;rf4=0 ;rf5=0 ;rf6=0 ;rfamin1=20;rfamin2=20;rfamin3=20;rfamin4=20;rfamin5=20;rfamin6=20;do whil
8、e (length0.01)step=length*2/m;for(ii=0;ii64)|(T ij0) /*飞机 Pi 和 Pj 不相撞*/2ijlelse /*有飞机相撞*/flag=1;i=8 ;j=8;if(flag= 0) /*没有飞机相撞*/ f=rfai 2;if(f =10,step1=Nlength*2/m;x10=Nrf1-length;x20=Nrf2-length;x30=Nrf3-length;x40=Nrf4-length;x50=Nrf5-length;x60=Nrf6-length;Forii=0,iiNSqrtfmin,Continue ,;Forij=0,
9、ijNSqrtfmin,Continue ,;Forik=0,ikNSqrtfmin,Continue ,;Foril=0,ilNSqrtfmin,Continue ,;Forim=0,imNSqrtfmin,Continue ,;Forin=0,infmin,Continue ,flag=1;144Fori=1,i0,di ,j=74 ,Tempd4=Nsi,j*dxi,j+ ci,j*dyi,j;Tempd4= Ntempd4;Tempd4= Ntempd4* tempd4;di,j= Ntempd4/ tempd1 ;Ifdi,j =64,flag=0;Break ,; ;Ifflag=
10、 =1,Fori=1,i7 ,i+,rfaminmini=ai;fmin=f ; ;Fori=1,i7,i+,rfi=Nrfaminmini;length=Nlength*2/m;Print各架飞机的调整角分别为:;Fori=1,i7,i+,Printrfaminmini;Print调整角的平方和为:fmin程序的运行结果为:各架飞机的调整角分别为:0,0,2,-2,0,2,调整角的平方和为:12。不足的是:要想求得更精确的解,该程序在一般的微机上运行,速度较慢,其原因主要是算法基本上采用的枚举法,循环次数较多,因而要达到较高的精度,必须采用高档计算机。另外我们对上述算法用 C 语言编制了程序
11、,计算结果几乎一样,而计算速度要快得多,能满足问题的要求。这也从计算速度上暴露了 Mathematica 软件的弱点。习题 15.21某昼夜服务的公交服务线路每天各时间区段内需司机和乘务人员如下:班次 时间 所需人数1 06:00 10:00 602 10:00 14:00 703 14:00 18:00 604 18:00 22:00 505 22:00 02:00 206 02:00 06:00 30145设司机和乘务人员分别在各时间区段一开始时上班,并连续工作 8 小时,问该公交线路至少应配备多少司机和乘务人员。2航空公司为某次航班发售机票,发售机票数不能太多也不能太少,若太多,乘客不能
12、按时登机,公司不仅要付给乘客一定的赔偿费,而且乘客还将怨声载道;若太少,公司也将受到一定的损失。现问:应如何确定发售机票数量,使公司、乘客双方均较满意?3一般从事猪的商业性饲养和销售总是希望获得利润,因此饲养某种猪是否获利,怎样获得最大利润,是饲养者必须首先考虑的问题。如果把饲养技术水平、猪的类型等因素视为不变的,且不考虑市场的需求变化,那么影响获利大小的一个主要因素是如何选择猪的售出时机,即何时把猪卖出获利最大。也许有人认为,猪养得越大,售出后获利越大。其实不然,因为随着猪的生长,单位时间消耗的饲料费用也就愈多,但同时其体重的增长速度却不断下降,所以饲养时间过长是不合算的。试作适当的假设,引入相应的参数,选择猪的最佳销售时机。