我正在尝试使用GAMS软件在存在恒定流量(即Zermelo导航问题的简单版本)的情况下计算从A点到B点花费的时间更少的情况。但是,如果我将两个点都放在一条直线上并使恒定流量等于零,那么我将得不到应有的结果。
$set n 10
set j /0*%n%/;
sets
jlast(j)
jnotlast(j);
jlast(j)$(ord(j)=card(j))=yes;
jnotlast(j)=not jlast(j);
scalar
v aeroplane velocity /10/
u wind velocity in the x axis /0/
n number of intervals /%n%/
density density /1.225/
variable
gamma(j),
x(j),
y(j),
time,
objective;
positive variable
t(j)
step;
equation
diffx(j),
diffy(j),
obj;
* diffx[j]$(jnotlast(j)).. x[j+1]-x[j] =e=0.5*(t(j+1)-t(j))*(v*cos(gamma(j+1)) + v*cos(gamma(j)) );
* diffy[j]$(jnotlast(j)).. y[j+1]-y[j] =e=0.5*(t(j+1)-t(j))*(v*sin(gamma(j+1)) + v*sin(gamma(j)) );
diffx[j]$(jnotlast(j)).. x[j+1]-x[j] =e=0.5*step*(v*cos(gamma(j+1))-u + v*cos(gamma(j))-u );
diffy[j]$(jnotlast(j)).. y[j+1]-y[j] =e=0.5*step*(v*sin(gamma(j+1)) + v*sin(gamma(j)) );
obj.. time =e= n*step;
x.fx('0') = 1.0e-12;
x.fx('%n%') = 1.0e-12;
y.fx('0') = 1.0e-12;
y.fx('%n%') = 10;
t.fx('0')= 1.0e-12;
y.up(j) = 10;
y.lo(j) = 1.0e-12;
t.lo(j)=1.0e-12;
gamma.up(j)=pi;
gamma.lo(j)=0;
model brahstron1 /all/;
option
nlp=ipopt;
solve brahstron1 using nlp minimize time;
在这段代码中,我使用梯形规则为x'= dx / dt和y'= dy / dt定义了两个微分方程。在这里,伽玛是我们的控制变量,这就是为什么它是免费的。步长是时间j和j + 1之间的差,这就是为什么时间是n(间隔数)* step(间隔大小),这就是我要减少的原因。
在此之下可以找到限制,其中包括x和y的初始和最终点,以及初始t = 0。
我可能会发现,角度γ变为pi / 2且y在0到10之间,但是我发现了奇怪的结果,因为所有步骤的Y均为5。
我已经看过这段代码一段时间了,但是找不到错误所在。
有人可以告诉我我做错了什么吗? 非常感谢您阅读。