飞行管理
飞行管理
一. 问题描述
§1.引 言
在约10000米高空的一个边长160千米的正方形区域内,经常有若干架飞机作水平飞行.为对其进行飞行管理,现采用计算机记录每架飞机的位置和当前飞行角度,当一架飞机欲进入时,记录其数据并判断是否与区域内的飞机发生碰撞,若碰撞,即调整其方向角,且使方向角调整的幅度尽量小.为假定条件如下:
⒈ 不碰撞的标准为任意了两架飞机的距离不小于8千米;
⒉ 飞机飞行方向角调整的幅度均不超过30度;
⒊ 所有飞机调整前后均作匀速直线运动,飞行速度为每小时800千米;
⒋ 进入该区域的飞机在到达区域边缘时,与区域内的飞机的距离应在60千米以上;
⒌ 不必考虑飞机离开此区域后的状况;
⒍ 最多需考虑6架飞机;
⒎ 对所有飞机的调整为一次完成,调整后不再发生碰撞.
请你对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据举行计算(方向角误差不超过0.01o),要求飞机飞行方向角调整幅度尽量小。
表1给出了区域内现有的5架飞机与新进入的第6架飞机的坐标(x,y)和方向角α(飞行方向x轴的正向夹角).
表1 限定区域内的飞机的坐标和方向角
坐标
架次
x
y
1
150
140
243
2
85
85
236
3
150
155
220.5
4
145
50
159
5
130
150
230
6
0
0
52
二. 变量描述及名词解释
:第i架飞机的初始飞行方向角;
:第i架飞机飞行方向角调整幅度;
:第i架飞机的飞行速率;
:第i架飞机的初始坐标;
:t时刻第i架飞机的坐标;
:t时刻第i架飞机与第j架飞机的距离;
:第i架飞机与第j架飞机相距最近的时刻,即;
S:新进入的飞机对原飞行系统的扰动因子;
(其中,i =1,2,…,6 ;j=1,2,…,6。)
三. 模型建立
我们将本题的目标函数设定为飞机飞行方向角调整幅度的加权平方和。
建立目标函数:
(1)
约束条件为:
飞行控制区内,的最小值大于8km,即:
(km) (2)
其中,
;
(i =1,2,…,5;j=i+1,…,6)
; (i =1,2,…,6)
; (i =1,2,…,6)
;(i =1,2,…,6)
若要严格表示两架位于该区域内的飞机的距离大于8km,则需考虑每架飞机在该区域内的飞行时间长度,记为第i架飞机飞出区域的时刻,即:
(3)
又设,则不相碰撞的条件就可表为:
约束条件(2)的具体实施为:
(4)
其中,
此外,经计算可得:
为关于的一个二次函数。
(5)
易知,当时,即时函数达最小,取最小值为。注意到(初始时刻不碰撞),若,则约束条件(4)必成立。故对(4),只需考虑两种情形:
(1) ,则只需要在右端点的函数值非负即可,既
(6)
(2) ,则只需要的最小值非负即可,既
(7)
实际上,(6)在(7)的条件下也是该成立的,故得优化模型:
min
s.t.
, 当时
(i =1,2,…,5;j=i+1,…,6) 各参数由(5)定义。
四. 模型求解
上面规划问题是非常复杂的,因有许多复杂的逻辑关系,故需简化模型。
考虑的简化:
注意到(对角线时),从而强化了约束,即有些飞机已经飞出了该区域,但我们仍不允许他们相碰撞。
故得简化模型的lingo程序
MODEL:
TITLE 飞行管理问题的非线性规划模型;
SETS:
Plane/1..6/: x0, y0, cita0, cita1, d_cita;
! cita0表示初始角度,cita1为调整后的角度,d_cita为调整的角度;
link(plane, plane)|&1 #LT# &2: b,c;
ENDSETS
DATA:
x0 y0 cita0 =
150
140
243
85
85
236
150
155
220.5
145
50
159
130
150
230
0
0
52
;
max_cita = 30;
T_max = 0.283;
V=800;
ENDDATA
INIT:
d_cita = 0 0 0 0 0 0;
ENDINIT
@for(plane: cita1 - cita0 = d_cita);
@for(link(i,j):
b(i,j) = -2*(x0(i) -x0(j))*@sin ((cita1(i)+cita1(j))*3.14159265/360)
+2*(y0(i) -y0(j))*@cos ((cita1(i)+cita1(j))*3.14159265/360);
c(i,j) = (x0(i) -x0(j)) ^2 + (y0(i) -y0(j)) ^2 - 64;
);
! 避免碰撞的条件;
! 右端点非负;
@for(link(i,j): [Right]
(2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))^2
+ b(i,j)*(2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))
+ c(i,j) > 0);
! 最小点非负;
@for(link(i,j): [Minimum] @if(
-b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360) #gt#0 #and#
-b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360) #lt#T_max ,
b(i,j)^2-4*c(i,j),-1) < 0);
@for(link: @free(b));
!调整角度上下限,单位为角度;
@for(plane: @bnd( - max_cita, d_cita, max_cita));
[obj] MIN = @SUM(plane: (d_cita)^2);
END
解答:
OBJ 451.9266 -1.000000
D_CITA( 1) -0.4772313E-06 0.000000
D_CITA( 2) -17.35147 0.000000
D_CITA( 3) -0.3818156E-06 0.000000
D_CITA( 4) -0.2057040E-06 0.000000
D_CITA( 5) 9.071291 0.000000
D_CITA( 6) -8.280374 0.000000
以上解为局部最优解,将约束30o 改为10o,得更优的解:
OBJ 84.90153 -1.000000
D_CITA( 1) -0.1225291E-06 0.000000
D_CITA( 2) -0.1253829E-06 0.000000
D_CITA( 3) -0.1284325E-07 0.000000
D_CITA( 4) 6.515440 0.000000
D_CITA( 5) 0.6616931E-07 0.000000
D_CITA( 6) 6.515411 0.000000
用全局最优求解:
OBJ 6.954677 -1.000000
D_CITA( 1) -0.2922876E-07 0.000000
D_CITA( 2) -0.7364397E-08 0.000000
D_CITA( 3) 2.062456 0.000000
D_CITA( 4) -0.4954298 0.000000
D_CITA( 5) -0.4460314E-07 0.000000
D_CITA( 6) 1.567004 0.000000
五. 模型验证及模型讨论
对该方案跟踪其飞行轨道检验,另外随机生成其它数据检验。又给出不同的第六架飞机进入数据,检验方案的可行性。
讨论:实际调度中,由于计算时间、指令发出时间等因素,应该考虑反应滞后的时间,也就是说,如果反应时间是10秒,则计算中应该采用飞机沿当前方向角飞行10秒以后的位置作为计算的基础,即:
六. 模型评价
七. 模型推广
根据实际情况,可给出更一般的模型:目标函数设定为飞机飞行方向角调整幅度绝对值的加权k次方和。
建立目标函数:
(k>0)
根据已有的经验进行尝试:
尝试1:k=1,Si=1(i=1,2,…,6),即飞机飞行方向角调整幅度的绝对值和模型,求得:
,,其余为0;
尝试2:k=4,Si=1(i=1,2,…,6),即飞机飞行方向角调整幅度的4次方和模型,求得:
,,,
, ,
尝试1中,虽然第三架飞机牺牲较大,但使得被管理的六架飞机中只有两架飞机
需要调整航向,非常值得。
尝试2中,虽然各飞机航向的调整比较平均,但增加了管理的难度,事实上是不
可取的。