1+ # Optimize.py
2+ #
3+ # Created: Feb 2016, E. Botero
4+ # Modified:
5+
6+ # ----------------------------------------------------------------------
7+ # Imports
8+ # ----------------------------------------------------------------------
9+
10+ from SUAVE .Core import Units , Data
11+ import numpy as np
12+ import Vehicles
13+ import Analyses
14+ import Missions
15+ import Procedure
16+ import Plot_Mission
17+ import SUAVE .Optimization .Package_Setups .scipy_setup as scipy_setup
18+ import SUAVE .Optimization .Package_Setups .pyopt_setup as pyopt_setup
19+ from SUAVE .Optimization .Nexus import Nexus
20+
21+ # ----------------------------------------------------------------------
22+ # Run the whole thing
23+ # ----------------------------------------------------------------------
24+ def main ():
25+
26+ problem = setup ()
27+ output = scipy_setup .SciPy_Solve (problem )
28+
29+ problem .translate (output )
30+
31+ Plot_Mission .plot_mission (problem .results .mission )
32+
33+ return
34+
35+ # ----------------------------------------------------------------------
36+ # Inputs, Objective, & Constraints
37+ # ----------------------------------------------------------------------
38+
39+ def setup ():
40+
41+ nexus = Nexus ()
42+ problem = Data ()
43+ nexus .optimization_problem = problem
44+
45+ # -------------------------------------------------------------------
46+ # Inputs
47+ # -------------------------------------------------------------------
48+
49+ # [ tag , initial, [lb,ub], scaling, units ]
50+ problem .inputs = np .array ([
51+ [ 'wing_area' , 0.5 , ( 0.1 , 1.5 ), 0.5 , Units .meter ],
52+ [ 'aspect_ratio' , 10.0 , ( 5.0 , 20.0 ), 10.0 , Units .less ],
53+ [ 'dynamic_pressure' , 125.0 , ( 1.0 , 2000.0 ), 125.0 , Units .pascals ],
54+ [ 'solar_ratio' , 0.0 , ( 0.0 , 0.97 ), 1.0 , Units .less ],
55+ [ 'kv' , 800.0 , ( 10.0 , 1500.0 ), 800.0 , Units ['rpm/volt' ]],
56+ ])
57+
58+ # -------------------------------------------------------------------
59+ # Objective
60+ # -------------------------------------------------------------------
61+
62+ # [ tag, scaling, units ]
63+ problem .objective = np .array ([
64+ [ 'Nothing' , 1. , Units .kg ],####Optimize.py:
65+ ])
66+
67+ # -------------------------------------------------------------------
68+ # Constraints
69+ # -------------------------------------------------------------------
70+
71+ # [ tag, sense, edge, scaling, units ]
72+ problem .constraints = np .array ([
73+ [ 'energy_constraint' , '=' , 0.0 , 1.0 , Units .less ],
74+ [ 'battery_mass' , '>' , 0.0 , 1.0 , Units .kg ],
75+ [ 'CL' , '>' , 0.0 , 1.0 , Units .less ],
76+ [ 'Throttle_min' , '>' , 0.0 , 1.0 , Units .less ],
77+ [ 'Throttle_max' , '>' , 0.0 , 1.0 , Units .less ],
78+ ])
79+
80+ # -------------------------------------------------------------------
81+ # Aliases
82+ # -------------------------------------------------------------------
83+
84+ # [ 'alias' , ['data.path1.name','data.path2.name'] ]
85+ problem .aliases = [
86+ [ 'wing_area' ,['vehicle_configurations.*.wings.main_wing.areas.reference' ,
87+ 'vehicle_configurations.base.reference_area' ] ],
88+ [ 'aspect_ratio' , 'vehicle_configurations.*.wings.main_wing.aspect_ratio' ],
89+ [ 'kv' , 'vehicle_configurations.*.propulsors.network.motor.speed_constant' ],
90+ [ 'battery_mass' , 'vehicle_configurations.base.propulsors.network.battery.mass_properties.mass' ],
91+ [ 'solar_ratio' , 'vehicle_configurations.*.propulsors.network.solar_panel.ratio' ],
92+ [ 'dynamic_pressure' , 'missions.mission.segments.cruise.dynamic_pressure' ],
93+ [ 'Nothing' , 'summary.nothing' ],
94+ [ 'energy_constraint' , 'summary.energy_constraint' ],
95+ [ 'CL' , 'summary.CL' ],
96+ [ 'Throttle_min' , 'summary.throttle_min' ],
97+ [ 'Throttle_max' , 'summary.throttle_max' ],
98+ ]
99+
100+ # -------------------------------------------------------------------
101+ # Vehicles
102+ # -------------------------------------------------------------------
103+ nexus .vehicle_configurations = Vehicles .setup ()
104+
105+ # -------------------------------------------------------------------
106+ # Analyses
107+ # -------------------------------------------------------------------
108+ nexus .analyses = Analyses .setup (nexus .vehicle_configurations )
109+
110+ # -------------------------------------------------------------------
111+ # Missions
112+ # -------------------------------------------------------------------
113+ nexus .missions = Missions .setup (nexus .analyses )
114+
115+ # -------------------------------------------------------------------
116+ # Procedure
117+ # -------------------------------------------------------------------
118+ nexus .procedure = Procedure .setup ()
119+
120+ return nexus
121+
122+ if __name__ == '__main__' :
123+ main ()
0 commit comments