Оптимизация траектории электромобиля в достаточном количестве - PullRequest
0 голосов
/ 03 декабря 2018

Я работаю над линеаризованной моделью для простого анализа и оптимизации траектории в Ampl.Основная предпосылка состоит в том, чтобы оптимизировать 2D траекторию полета для электрического самолета, проходящего 500 км, в зависимости от его основных параметров.

Упрощенная диаграмма сил, используемая для этой задачи, может быть замечена здесь .Уравнения для этой задачи могут быть упрощены для устойчивого полета в каждой точке и, следовательно, могут быть решены с помощью ньютоновского решателя, как показано здесь .

Я пытаюсь смоделировать эту проблему с использованием Ampl вместоOpenMDAO, однако, борется с тем фактом, что альфа должна решаться неявно.Чтобы еще больше упростить задачу, я установил скорость на минимальную скорость сопротивления (в зависимости от плотности воздуха).

Однако мой код Ampl генерирует синтаксис и другие ошибки, когда я пытаюсь его скомпилировать,код:

#UNIVERSAL PARAMETERS
param P_s := 101300; # Ref pressure [Pa]
param R := 287;   # Gas constannt 
param T_0 :=250; # Ref temp for troposphere [K]
param g := 9.81; #Acc due to gravity 
param H := R*T_0/g;  # Scale height 


#AIRCRAFT PARAMETERS
param c1 := -3.85; param c2 := 4.8923; param c3 :=0.6865; #Drag perameters
param c0 := 0.034; 
param k := 0.069622;
param A;
param S := 90; #wing area
param m := 16000; #Mass of acc [kg]
param W := m*g; #Weight of acc

#AIRCRAFT CONSTRAINTS
param gamma_min := -0.52; param gamma_max := 0.52; #Gamma constraints =/-     30degrees
param alpha_min := -0.17; param alpha_max := 0.17; #Alpha constraints =/- 10degrees

#FLIGHT PARAMETERS
param h_0 := 100;  #Coords of starting point
param r_0 := 0;
param h_n := 100; #Coords of end point
param r_n := 516000; 

param n := 50; #Number of time points

var T >= 0; #Total time for flight


var h{0..n}; #coords of flightpath



# Control variables
var gamma {i in 1..n-1} >= gamma_min, <= gamma_max;



var rho {i in 1..n-1} = ((P_s)/(R*T_0))*exp(-h[i]/H); #Density as a function of     height

var va {i in 1..n-1} = ((2*W)/(rho[i]*S)^0.5)*(k/(c0))^0.25; #Velocity FULLY     DEFINED for every point

var alpha {i in 1..n-1} >= alpha_min, <= alpha_max; #Alpha that can only be solved implicitly

var cL {i in 1..n-1} = c1*alpha[i]^2+c2*alpha[i]+c3; #Lift Coeff APHA DEP

var cD {i in 1..n-1} = c0+k*cL[i]^2; #Drag Coefficient

var D {i in 1..n-1} = .5*cD[i]*rho[i]*S*va[i]^2; #Drag

var FT {i in 1..n-1} = ((W*sin(gamma[i])+D))/cos(alpha[i]); #Thrust equation


var L {i in 1..n-1} = .5*cL[i]*rho[i]*S*va[i]^2; #Lift EQ General ALPHA DEP

var L2 {i in 1..n-1} = W*cos(gamma[i])-FT*sin(alpha[i]); #Lift Balance EQ GAMMA and ALPHA DEP

var r{0..n} = (r[i+1] - r[i]) / (1/n) = va[i] cos (gamma[i]); #RANGE;


minimize P: sum {i in 1..n-1} FT[i]*r[i];


s.t. h_initial: h[0] = h_0;
s.t. r_initial: r[0] = r_0;
s.t. h_final: h[n] = h_n;
s.t. r_final: r[n] = r_n;

s.t. newtonian: L[i]-L2[i] <= 0.001 #my attempt at a basic newtonian solver for the implicit determination of alpha 

solve;

Буду признателен за любые отзывы о методологии, лежащей в основе этого или общего подхода.

...