/
simpleac.tex
363 lines (299 loc) · 14.8 KB
/
simpleac.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\else % if luatex or xelatex
\ifxetex
\usepackage{mathspec}
\else
\usepackage{fontspec}
\fi
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\usepackage{hyperref}
\hypersetup{unicode=true,
pdfborder={0 0 0},
breaklinks=true}
\urlstyle{same} % don't use monospace font for urls
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ADD YOUR \usepackage{...} COMMANDS HERE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{graphicx,grffile}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi
\date{}
\begin{document}
\section{SimPleAC}\label{simpleac}
In this example, we modify the simple wing model proposed by
Prof.~Warren Hoburg in his thesis to create a simple aircraft model
compatible with signomial programming (SP).
\begin{Shaded}
\begin{Highlighting}[]
\ImportTok{from}\NormalTok{ gpkit }\ImportTok{import}\NormalTok{ Model, Variable, SignomialsEnabled, VarKey, units}
\ImportTok{import}\NormalTok{ numpy }\ImportTok{as}\NormalTok{ np}
\ImportTok{import}\NormalTok{ matplotlib.pyplot }\ImportTok{as}\NormalTok{ plt}
\KeywordTok{class}\NormalTok{ SimPleAC(Model):}
\KeywordTok{def}\NormalTok{ setup(}\VariableTok{self}\NormalTok{):}
\CommentTok{# Variable definitions...}
\end{Highlighting}
\end{Shaded}
\subsection{Weight and Lift model}\label{weight-and-lift-model}
The simple aircraft borrows a majority of its aerodynamic model from
Prof.~Warren Hoburg's thesis, with some minor adjustments to make the
model a SP. The aircraft is assumed to be in steady-level flight so that
thrust equals drag, and the lift equals the weight.
The total weight of the aircraft is the sum of the payload weight
\(W_0\), the wing weight \(W_w\), and the fuel weight \(W_f\).
\begin{equation}
W \geq W_0 + W_w + W_f
\end{equation}
We use the naive \(W \leq L\) model below for steady state flight:
\begin{equation}
W_0 + W_w + 0.5 W_f \leq \frac{1}{2} \rho S C_L V^2
\end{equation}
where the lift of the aircraft is equal to weight of the aircraft with
half-fuel. We would also like the fully-fueled aircraft to be able to
fly at a minimum speed of \(V_{min}\) without stalling , so we add the
following constraint:
\begin{equation}
W \leq \frac{1}{2} \rho V_{min}^2 S C_{L_{max}}
\end{equation}
The time of flight of the aircraft, which is a useful metric of
performance, is simply the range over velocity:
\begin{equation}
T_{flight} \geq \frac{Range}{V}
\end{equation}
The lift-to-drag ratio is also defined:
\begin{equation}
L/D = \frac{C_L}{C_D}
\end{equation}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Weight and lift model}
\NormalTok{ constraints }\OperatorTok{+=}\NormalTok{ [W }\OperatorTok{>=}\NormalTok{ W_0 }\OperatorTok{+}\NormalTok{ W_w }\OperatorTok{+}\NormalTok{ W_f,}
\NormalTok{ W_0 }\OperatorTok{+}\NormalTok{ W_w }\OperatorTok{+} \FloatTok{0.5} \OperatorTok{*}\NormalTok{ W_f }\OperatorTok{<=}
\FloatTok{0.5} \OperatorTok{*}\NormalTok{ rho }\OperatorTok{*}\NormalTok{ S }\OperatorTok{*}\NormalTok{ C_L }\OperatorTok{*}\NormalTok{ V }\OperatorTok{**} \DecValTok{2}\NormalTok{,}
\NormalTok{ W }\OperatorTok{<=} \FloatTok{0.5} \OperatorTok{*}\NormalTok{ rho }\OperatorTok{*}\NormalTok{ S }\OperatorTok{*}\NormalTok{ C_Lmax }\OperatorTok{*}\NormalTok{ V_min }\OperatorTok{**} \DecValTok{2}\NormalTok{,}
\NormalTok{ T_flight }\OperatorTok{>=}\NormalTok{ Range }\OperatorTok{/}\NormalTok{ V,}
\NormalTok{ LoD }\OperatorTok{==}\NormalTok{ C_L}\OperatorTok{/}\NormalTok{C_D]}
\end{Highlighting}
\end{Shaded}
\subsection{Thrust and drag model}\label{thrust-and-drag-model}
We assume a constant thrust specific fuel consumption (TSFC) for the
`engine' of the aircraft, which is assumed to provide as much thrust as
needed. Since \(T \geq D\):
\begin{equation}
W_f \geq TSFC \times T_{flight} \times D
\end{equation}
the fuel weight required is the product of the TSFC, time of flight, and
the total drag on the aircraft. The drag of the aircraft is the product
of dynamic pressure (\(\frac{1}{2} \rho V^2\)), the planform area \(S\),
and the coefficient of drag of the aircraft:
\begin{equation}
D \geq \frac{1}{2} \rho V^2 S C_D
\label{e:d}
\end{equation}
The drag coefficient of the aircraft is assumed to be the sum of the
fuselage drag, the wing profile drag, and the wing induced drag
coefficients:
\begin{equation}
C_D \geq C_{D_{fuse}} + C_{D_{wpar}} + C_{D_{ind}}
\label{e:cd}
\end{equation}
The fuselage drag is a function of its drag area \(CDA_0\) and the
planform area of the wing:
\begin{equation}
C_{D_{fuse}} = \frac{CDA_0}{S}
\label{e:cdfuse}
\end{equation}
where the \(CDA_0\) is linearly proportional to the volume of fuel in
the fuselage:
\begin{equation}
V_{f_{fuse}} \leq 10 CDA_0 \times meters
\label{e:vffuse}
\end{equation}
Note that we correct the dimensionality of the volume here, since GPkit
automatically checks units.
The wing profile drag is the product of the form factor, the friction
drag coefficient, and the wetted area ratio of the wing,
\begin{equation}
C_{D_{wpar}} = k C_f S_{wetratio}
\label{e:cdwpar}
\end{equation}
The Reynolds number of the aircraft wing is approximated
\begin{equation}
Re \leq \frac{\rho}{\mu} V \sqrt{\frac{S}{AR}}
\label{e:re}
\end{equation}
and used to find the friction drag coefficient of wing. We approximate
the \(C_f\) by assuming a turbulent Blasius flow over a flat plate as
below:
\begin{equation}
C_f \geq \frac{0.074} {Re^{0.2}}
\end{equation}
The induced drag of the wing is calculated with a span efficiency factor
e, and is a function of the \(C_L\) and aspect ratio \(AR\) of the wing.
\begin{equation}
C_{D_{induced}} = \frac{C_L^2}{\pi AR e}
\label{e:cdinduced}
\end{equation}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Thrust and drag model}
\NormalTok{ C_D_fuse }\OperatorTok{=}\NormalTok{ CDA0 }\OperatorTok{/}\NormalTok{ S}
\NormalTok{ C_D_wpar }\OperatorTok{=}\NormalTok{ k }\OperatorTok{*}\NormalTok{ C_f }\OperatorTok{*}\NormalTok{ S_wetratio}
\NormalTok{ C_D_ind }\OperatorTok{=}\NormalTok{ C_L }\OperatorTok{**} \DecValTok{2} \OperatorTok{/}\NormalTok{ (np.pi }\OperatorTok{*}\NormalTok{ A }\OperatorTok{*}\NormalTok{ e)}
\NormalTok{ constraints }\OperatorTok{+=}\NormalTok{ [W_f }\OperatorTok{>=}\NormalTok{ TSFC }\OperatorTok{*}\NormalTok{ T_flight }\OperatorTok{*}\NormalTok{ D,}
\NormalTok{ D }\OperatorTok{>=} \FloatTok{0.5} \OperatorTok{*}\NormalTok{ rho }\OperatorTok{*}\NormalTok{ S }\OperatorTok{*}\NormalTok{ C_D }\OperatorTok{*}\NormalTok{ V }\OperatorTok{**} \DecValTok{2}\NormalTok{,}
\NormalTok{ C_D }\OperatorTok{>=}\NormalTok{ C_D_fuse }\OperatorTok{+}\NormalTok{ C_D_wpar }\OperatorTok{+}\NormalTok{ C_D_ind,}
\NormalTok{ V_f_fuse }\OperatorTok{<=} \DecValTok{10}\OperatorTok{*}\NormalTok{units(}\StringTok{'m'}\NormalTok{)}\OperatorTok{*}\NormalTok{CDA0,}
\NormalTok{ Re }\OperatorTok{<=}\NormalTok{ (rho }\OperatorTok{/}\NormalTok{ mu) }\OperatorTok{*}\NormalTok{ V }\OperatorTok{*}\NormalTok{ (S }\OperatorTok{/}\NormalTok{ A) }\OperatorTok{**} \FloatTok{0.5}\NormalTok{,}
\NormalTok{ C_f }\OperatorTok{>=} \FloatTok{0.074} \OperatorTok{/}\NormalTok{ Re }\OperatorTok{**} \FloatTok{0.2}\NormalTok{]}
\end{Highlighting}
\end{Shaded}
\subsection{Fuel volume model}\label{fuel-volume-model}
The fuel volume model is the main difference between simpleWing and
SimPleAC, and introduces the only signomial constraints in the model.
Firstly we define the required fuel volume using fuel density
\(\rho_f\).
\begin{equation}
V_f = \frac{W_f } {\rho_f g}
\label{e:vf}
\end{equation}
We consider wing fuel tanks and fuselage fuel tanks. The fuselage fuel
was defined in the aerodynamic model, where the fuel volume contributes
to drag.
\begin{equation}
V_{f_{wing}}^2 \leq 0.0009 \frac{S \tau^2}{AR}
\label{e:vfwing}
\end{equation}
The signomial constraint is introduced here, where the available fuel
volume is upper-bounded by the sum of the fuselage and wing fuel
volumes.
\begin{equation}
V_{f_{avail}} \leq V_{f_{wing}} + V_{f_{fuse}}
\label{vfavail}
\end{equation}
We constrain the total fuel volume to be less than the available fuel
volume.
\begin{equation}
V_{f_{avail}} \geq V_{f}
\label{e:vfineq}
\end{equation}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Fuel volume model }
\ControlFlowTok{with}\NormalTok{ SignomialsEnabled():}
\NormalTok{ constraints }\OperatorTok{+=}\NormalTok{[V_f }\OperatorTok{==}\NormalTok{ W_f }\OperatorTok{/}\NormalTok{ g }\OperatorTok{/}\NormalTok{ rho_f,}
\NormalTok{ V_f_wing}\OperatorTok{**}\DecValTok{2} \OperatorTok{<=} \FloatTok{0.0009}\OperatorTok{*}\NormalTok{S}\OperatorTok{**}\DecValTok{3}\OperatorTok{/}\NormalTok{A}\OperatorTok{*}\NormalTok{tau}\OperatorTok{**}\DecValTok{2}\NormalTok{, }
\CommentTok{# linear with b and tau, quadratic with chord}
\NormalTok{ V_f_avail }\OperatorTok{<=}\NormalTok{ V_f_wing }\OperatorTok{+}\NormalTok{ V_f_fuse, }\CommentTok{#[SP]}
\NormalTok{ V_f_avail }\OperatorTok{>=}\NormalTok{ V_f]}
\end{Highlighting}
\end{Shaded}
\subsection{Wing Weight Build-Up}\label{wing-weight-build-up}
The wing surface weight is a function of the planform area of the wing.
\begin{equation}
W_{w_{surf}} \geq W_{w_{coeff2}} S
\label{e:wwsurf}
\end{equation}
The wing structural weight is a complex posynomial expression that takes
into account the root bending moment and shear relief due to presence of
fuel in the wings.
\begin{equation}
W_{w_{strc}}^2 \geq \frac{W_{w_{coeff1}}^2}{\tau^2} (N_{ult}^2 AR ^ 3 ((W_0+\rho_fgV_{f_{fuse}}) W S))
\label{e:wwstrc}
\end{equation}
The total wing weight is lower-bounded.
\begin{equation}
W_w \geq W_{w_{surf}} + W_{w_{strc}}
\label{e:ww}
\end{equation}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Wing weight model}
\NormalTok{ constraints }\OperatorTok{+=}\NormalTok{ [W_w_surf }\OperatorTok{>=}\NormalTok{ W_W_coeff2 }\OperatorTok{*}\NormalTok{ S,}
\NormalTok{ W_w_strc}\OperatorTok{**}\DecValTok{2}\NormalTok{. }\OperatorTok{>=}\NormalTok{ W_W_coeff1}\OperatorTok{**}\DecValTok{2}\NormalTok{.}\OperatorTok{/}\NormalTok{ tau}\OperatorTok{**}\DecValTok{2}\NormalTok{. }\OperatorTok{*}
\NormalTok{ (N_ult}\OperatorTok{**}\DecValTok{2}\NormalTok{. }\OperatorTok{*}\NormalTok{ A }\OperatorTok{**} \DecValTok{3}\NormalTok{. }\OperatorTok{*}\NormalTok{ ((W_0}\OperatorTok{+}\NormalTok{V_f_fuse}\OperatorTok{*}\NormalTok{g}\OperatorTok{*}\NormalTok{rho_f) }\OperatorTok{*}\NormalTok{ W }\OperatorTok{*}\NormalTok{ S)) ,}
\NormalTok{ W_w }\OperatorTok{>=}\NormalTok{ W_w_surf }\OperatorTok{+}\NormalTok{ W_w_strc]}
\end{Highlighting}
\end{Shaded}
\subsection{Valid objective functions}\label{valid-objective-functions}
We have tested a variety of potential objectives for the SimpPleAC
model, some of which are as follows:
\begin{itemize}
\item $W_f$: Fuel weight, the default objective in the ```main``` method.
\item $W$: Total aircraft weight. Like fuel weight, but also adding extra cost for airframe weight.
\item $D$: Drag.
\item $\frac{W_f}{T_{flight}}$: Product of the fuel weight and the inverse of the time of flight.
\item $W_{f} + c \times T_{flight}$: A linear combination of fuel weight and time of flight. This can simulate recurring costs (fuel and labor), and yield interesting results.
\end{itemize}
\end{document}