Moving a particle from point A to B on a efficient way in GAMS

Click For Summary
The discussion focuses on calculating the optimal route from point A to point B using GAMS software, specifically addressing a simplified version of Zermelo's navigation problem. The user encounters issues with their code, particularly that the variable y remains constant at 5, which is not the expected outcome. Suggestions include verifying the differential equations and the trapezoid rule application, as well as exploring GAMS solver options for constrained optimization. Additionally, checking the initial and final conditions for x and y is advised to identify potential errors. Overall, the conversation emphasizes troubleshooting the mathematical model and refining the approach for accurate results.
Frank Einstein
Messages
166
Reaction score
1
Hello everyone. I am triyng to calculate the route which takes less time to go from point A to point B in the presence of a constant flow (I. E. a simple version of Zermelo's navigation problem) using the GAMS software. However, if I put both points on a straight line and make the constant flow equal to zero, I don't get the results that I should.

Here it is my code: [Moderator: code tags added]
Code:
$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;

In this code I have defined two diferential equations, for x'=dx/dt and y'=dy/dt using the trapezoid rule. Here, gamma is our control variable and that's why it's free. Step is the difference between the times j and j+1, that is why time is n (number of intervals)*step(size of interval) and is what I seek to reduce.

Below this one can find the restrictions, these include the initial and final points for x and y, also the initial t=0.

I would spect as a result that the angle gamma became pi/2 and y going between 0 and 10, however, I find weird results, as Y being 5 on all the steps.

I have looked at this code for a while and I cannot find where my mistake is.

Can somebody please tell me what am I doing wrong?
Thank you very much for reading.
 
Last edited by a moderator:
Technology news on Phys.org


Hello,

Thank you for sharing your code and explaining your approach. From my understanding, you are trying to use the trapezoid rule to solve for the optimal angle (gamma) that minimizes the time it takes to go from point A to point B with a constant flow (wind velocity) in the x-axis.

Firstly, I would suggest checking the validity of your differential equations and the use of the trapezoid rule in this context. It's possible that your results are not what you expect because of a mathematical error.

Secondly, I would recommend using a simpler approach to solve this problem. Since you are using GAMS software, I would suggest looking into the GAMS solver options and trying to solve this as a constrained optimization problem. This will allow you to specify your objective function (minimize time) and your constraints (initial and final points for x and y, and initial time t=0) more explicitly.

Lastly, I would also recommend checking your initial and final points for x and y. It's possible that there is an error in the values you have specified, which is causing your results to be unexpected.

I hope this helps and good luck with your calculations. If you are still having trouble, I would suggest seeking help from a colleague or reaching out to the GAMS community for support.

 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
2
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
1
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K