Apollo Reentry Problem (TACO)

From mintOC
Revision as of 18:39, 3 October 2011 by Ckirches (Talk | contribs) (Other Descriptions)

Jump to: navigation, search

This page contains a model of the Apollo Reentry problem in AMPL format, making use of the TACO toolkit for AMPL control optimization extensions. Various results related to this model can be found in e.g. <bibref>Plitt1981</bibref>, <bibref>Stoer1992</bibref>, <bibref>Leineweber1995</bibref>, and <bibref>Potschka2008</bibref>. Note that you will need to include a generic AMPL/TACO support file, OptimalControl.mod. To solve this model, you require an optimal control or NLP code that uses the TACO toolkit to support the AMPL optimal control extensions.

AMPL

This is the source file reentry_taco.mod

# ----------------------------------------------------------------
# Apollo type vehicle reentry problem using AMPL and TACO
# (c) Christian Kirches, Sven Leyffer
#
# Source: Plitt'81, Stoer'92, Leineweber'95, Potschka'08
# ----------------------------------------------------------------
include OptimalControl.mod;
 
var tf >= 220, <= 240, := 230;
let tf.scale := 225.0;
 
var t;
 
var xd0 >= 0.2, <= 0.4, := 0.36;
let xd0.interp_to := 0.27;
let xd0.scale := 0.4;
 
var xd1 >= -0.2, <= 0.1, := -0.1414;
let xd1.interp_to := 0.0;
let xd1.scale := 0.1;
 
var xd2 >= 0.006, <= 0.03, := 0.01914;
let xd2.interp_to := 0.01196;
let xd2.scale := 0.02;
 
var u := 0.5, >= -3.0, <= 2.0;
let u.type := "u1";
let u.scale := 1.0;
let u.slope_min := -0.1;
let u.slope_max := +0.1;
 
var pi := 3.1415;
var beta := 4.26;
var g := 3.2172e-4;
var r := 209.0;
var sm := 53200.0;
var rho0 := 2.704e-3;
 
var exp_term = rho0 * exp(-beta * r * xd2);
 
minimize Lagrangian:
	integral (10.0 * xd0^3 * sqrt(exp_term), tf);
let Lagrangian.scale := 0.0275;
 
subject to 
 
ODE0: diff(xd0,t) = - 0.5 * sm * exp_term * xd0^2 * (1.174 - 0.9*cos(u)) 
                    - g * sin(xd1) / (1.0 + xd2)^2;
ODE1: diff(xd1,t) = 0.5 * sm * exp_term * xd0 * (0.6*sin(u)) 
                    + xd0 * cos(xd1) / r / (1.0+xd2) 
                    - g * cos(xd1) / xd0 / (1.0+xd2)^2;
ODE2: diff(xd2,t) = xd0 * sin(xd1) / r;
 
SPC0: eval(xd0,0) = 0.36;
let SPC0.scale := 0.4;
let SPC0.type := "dpc";
 
SPC1: eval(xd1,0) = -8.1*pi/180.0;
let SPC1.scale := 0.2;
let SPC1.type := "dpc";
 
SPC2: eval(xd2,0) = 4.0/r;
let SPC2.scale := 0.02;
let SPC2.type := "dpc";
 
EPC0: eval(xd0,tf) = 0.27;
let EPC0.scale := 0.4;
 
EPC1: eval(xd1,tf) = 0.0;
let EPC1.scale := 0.2;
 
EPC2: eval(xd2,tf) = 2.5/r;
let EPC2.scale := 0.02;
 
option solver ...;
 
solve;

Other Descriptions

Other descriptions of this problem are available in

References

<bibreferences/>