|
在约10,000米高空的某边长160公里的正方形区域内,经常有若干架飞机作水平飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会与区域内的飞机发生碰撞。如果会碰撞,则应计算如何调整各架(包括新进入的)飞机飞行的方向角。以避免碰撞。现假定条件如下:
1) 不碰撞的标准为任意两架飞机的距离大于8公里
2) 飞机飞行方向角调整的幅度不应超过30度
3) 所有飞机飞行速度均为每小时800公里
4) 进入该区域的飞机在到达区域边缘时,与区域内飞机的距离应在60公里以上
5) 最多需考虑6架飞机
6) 不必考虑飞机离开此区域后的状况。
请你对这个避免碰撞的飞行管理问题建立数学模型。列出计算步骤,对以下数据进行计算(方向角误差不超过0.01度)。要求飞机飞行方向角调整的幅度尽量小。
设该区域4个顶点的座标为(0,0),(160,0),(160,160),(0,160)
记录数据为:
飞机编号 横座标X 纵座标Y 方向角(度)
1 150 140 243
2 85 85 236
3 150 155 220.5
4 145 50 159
5 130 150 230
新进入 0 0 52
注:方向角指飞行方向与X轴正向的夹角。
试根据实际应用背景对你的模型进行评价与推广。
以下是我编的lingo程序:
model:
title:飞行管理问题;
sets:
plane/1 2 3 4 5 6/:heng,zong,jiaodu,tiaozheng,jiaoduhou;
interplane(plane,plane)|&1#LT#&2:yuxiancha,zhengxiancha,juli;
time/1..283/:t;
endsets
data:
heng=150 ,85 ,150 ,145 ,130, 0;
zong=140 ,85 ,155 , 50 ,150, 0;
jiaodu=243,236,220.5,159,230,52;
enddata
min=@sum(plane(i):tiaozheng(i)^2);
@for(time(i):t(i)=i/1000);
@for(plane(i):jiaoduhou(i)=jiaodu(i)+tiaozheng(i));
@for(interplane(k,n):yuxiancha(k,n)=@cos((jiaoduhou(k))/180*3.14159265358979)-@cos((jiaoduhou(n))/180*3.14159265358979));
@for(interplane(k,n):zhengxiancha(k,n)=@SIN((jiaoduhou(k))/180*3.14159265358979)-@SIN((jiaoduhou(n))/180*3.14159265358979));
@for(interplane(i,j):
@for(time(m):
((heng(i)-heng(j)+800*t(m)*yuxiancha(i,j))^2+(zong(i)-zong(j)+800*t(m)*zhengxiancha(i,j))^2)^0.5<8));
@for(planebnd(-30,tiaozheng,30));
end
我用lingo9.0unlimited版求解时,老是报以下错误(语法估计已无问题):Unexpected Jacobian overflow,
请问高手是什么原因啊?
大家在自己的机子上试试我的代码看看,是不是也报这个错误啊,谢谢啦 |
|