Apps

## Apps.RocketLaunch History

Changed lines 29-30 from:

to:

#### Python GEKKO Solution

The GEKKO package is available through the package manager pip in Python.

 python -m pip install gekko


GEKKO Python is designed for large-scale optimization and accesses solvers of constrained, unconstrained, continuous, and discrete problems.

(:source lang=python:) import numpy as np import matplotlib.pyplot as plt from gekko import GEKKO

1. create GEKKO model

m = GEKKO()

1. scale 0-1 time with tf

m.time = np.linspace(0,1,101)

1. options

m.options.NODES = 6 m.options.SOLVER = 3 m.options.IMODE = 6 m.options.MAX_ITER = 500 m.options.MV_TYPE = 0 m.options.DIAGLEVEL = 0

1. final time

tf = m.FV(value=1.0,lb=0.1,ub=100) tf.STATUS = 1

1. force

u = m.MV(value=0,lb=-1.1,ub=1.1) u.STATUS = 1 u.DCOST = 1e-5

1. variables

s = m.Var(value=0) v = m.Var(value=0,lb=0,ub=1.7) mass = m.Var(value=1,lb=0.2)

1. differential equations scaled by tf

m.Equation(s.dt()==tf*v) m.Equation(mass*v.dt()==tf*(u-0.2*v**2)) m.Equation(mass.dt()==tf*(-0.01*u**2))

1. specify endpoint conditions

m.fix(s, pos=len(m.time)-1,val=10.0) m.fix(v, pos=len(m.time)-1,val=0.0)

1. minimize final time

m.Obj(tf)

1. Optimize launch

m.solve()

print('Optimal Solution (final time): ' + str(tf.value[0]))

1. scaled time

ts = m.time * tf.value[0]

1. plot results

plt.figure(1) plt.subplot(4,1,1) plt.plot(ts,s.value,'r-',linewidth=2) plt.ylabel('Position') plt.legend(['s (Position)'])

plt.subplot(4,1,2) plt.plot(ts,v.value,'b-',linewidth=2) plt.ylabel('Velocity') plt.legend(['v (Velocity)'])

plt.subplot(4,1,3) plt.plot(ts,mass.value,'k-',linewidth=2) plt.ylabel('Mass') plt.legend(['m (Mass)'])

plt.subplot(4,1,4) plt.plot(ts,u.value,'g-',linewidth=2) plt.ylabel('Force') plt.legend(['u (Force)'])

plt.xlabel('Time') plt.show() (:sourceend:)

August 26, 2016, at 05:14 PM by 10.5.113.104 -
August 26, 2016, at 05:13 PM by 10.5.113.104 -

#### Problem Statement

 minimize tf

subject to
ds/dt = v
dv/dt = (u-0.2*v^2)/m
dm/dt = -0.01 * u^2

path constraints
0.0 <= v(t) <= 1.7
-1.1 <= u(t) <= 1.1

initial boundary conditions
s(0) = 0
v(0) = 0
m(0) = 1

final boundary conditions
s(tf) = 10.0
v(tf) = 0.0


#### Solution

August 26, 2016, at 04:51 PM by 10.5.113.104 -
Changed lines 13-30 from:
to:

(:html:)

 <div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'apmonitor'; // required: replace example with your forum shortname

/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
})();
</script>


(:htmlend:)

August 26, 2016, at 04:49 PM by 10.5.113.104 -