def test(): for config in configs: aircraft = OnDemandAircraft() aircraft = aircraft.standard_substitutions( config=config, autonomousEnabled=generic_data["autonomousEnabled"]) sizing_mission = OnDemandSizingMission(aircraft=aircraft) sizing_mission = sizing_mission.standard_substitutions( piloted=generic_data["isSizingMissionPiloted"], reserve=generic_data["reserve"]) revenue_mission = OnDemandRevenueMission(aircraft=aircraft) revenue_mission = revenue_mission.standard_substitutions( piloted=generic_data["isRevenueMissionPiloted"]) deadhead_mission = OnDemandDeadheadMission(aircraft=aircraft) deadhead_mission = deadhead_mission.standard_substitutions( piloted=generic_data["isDeadheadMissionPiloted"]) mission_cost = OnDemandMissionCost(aircraft=aircraft, revenue_mission=revenue_mission, deadhead_mission=deadhead_mission) mission_cost = mission_cost.standard_substitutions( isRevenueMissionPiloted=generic_data["isRevenueMissionPiloted"], isDeadheadMissionPiloted=generic_data["isDeadheadMissionPiloted"]) objective_function = mission_cost.cpt problem = Model(objective_function, [ aircraft, sizing_mission, revenue_mission, deadhead_mission, mission_cost ]) solution = problem.solve(verbosity=0)
elif (config == "Coaxial heli"): mission_range = np.linspace(1, 49, num_pts) * ureg.nautical_mile elif (config == "Compound heli"): mission_range = np.linspace(10, 82, num_pts) * ureg.nautical_mile elif (config == "Lift + cruise"): mission_range = np.linspace(10, 85, num_pts) * ureg.nautical_mile elif (config == "Tilt wing"): mission_range = np.linspace(15, 98, num_pts) * ureg.nautical_mile elif (config == "Tilt rotor"): mission_range = np.linspace(15, 110, num_pts) * ureg.nautical_mile c = configs[config] c["SPL_sizing_A"] = np.zeros(np.size(mission_range)) aircraft = OnDemandAircraft() aircraft = aircraft.standard_substitutions(config=config, autonomousEnabled=generic_data["autonomousEnabled"]) sizing_mission = OnDemandSizingMission(aircraft=aircraft) sizing_mission = sizing_mission.standard_substitutions(piloted=generic_data["isSizingMissionPiloted"], reserve=generic_data["reserve"]) sizing_mission.substitutions.update({ sizing_mission.cruise_segment.d_segment: ("sweep", mission_range.to(ureg.km).magnitude), # Careful with units here }) revenue_mission = OnDemandRevenueMission(aircraft=aircraft) revenue_mission = revenue_mission.standard_substitutions(piloted=generic_data["isRevenueMissionPiloted"]) deadhead_mission = OnDemandDeadheadMission(aircraft=aircraft) deadhead_mission = deadhead_mission.standard_substitutions(piloted=generic_data["isDeadheadMissionPiloted"]) mission_cost = OnDemandMissionCost(aircraft=aircraft, revenue_mission=revenue_mission, deadhead_mission=deadhead_mission)
return constraints if __name__ == "__main__": #Concept representative analysis # from noise_models import rotational_noise, vortex_noise, noise_weighting #String inputs # reserve_type="FAA_heli" # sizing_mission_type="piloted" aircraft = OnDemandAircraft() aircraft = aircraft.standard_substitutions(config="Compound heli", autonomousEnabled=True) sizing_mission = OnDemandSizingMission(aircraft=aircraft) sizing_mission = sizing_mission.standard_substitutions( piloted=True, reserve="20-minute loiter") revenue_mission = OnDemandRevenueMission(aircraft=aircraft) revenue_mission = revenue_mission.standard_substitutions(piloted=True) deadhead_mission = OnDemandDeadheadMission(aircraft=aircraft) deadhead_mission = deadhead_mission.standard_substitutions(piloted=False) mission_cost = OnDemandMissionCost(aircraft=aircraft, revenue_mission=revenue_mission, deadhead_mission=deadhead_mission) mission_cost = mission_cost.standard_substitutions(
constraints += [W_mission == c.performance.W for c in flight_segments] constraints += [ W_mission >= W_noPassengersOrCrew + sum(c.W for c in payload) ] constraints += [MTOW >= W_mission] constraints += [ E_mission >= sum(c.performance.battery_perf.E for c in flight_segments) ] constraints += [E_eff >= E_mission] return constraints if __name__ == "__main__": aircraft = OnDemandAircraft() aircraft = aircraft.standard_substitutions(config="Lift + cruise", autonomousEnabled=True) sizing_mission = OnDemandSizingMission(aircraft=aircraft) sizing_mission = sizing_mission.standard_substitutions( piloted=True, reserve="20-minute loiter") objective_function = aircraft.MTOM problem = Model(objective_function, [aircraft, sizing_mission]) solution = problem.solve(verbosity=0) # print solution.table()
cases[config]["Initial"]["battery_cost_per_energy"] = 400 * ureg.kWh**-1 cases[config]["Near term"]["battery_cost_per_energy"] = 200 * ureg.kWh**-1 cases[config]["Long term"]["battery_cost_per_energy"] = 100 * ureg.kWh**-1 # Optimize for config in cases: print "Solving configuration: " + config for i, case in enumerate(cases[config]): c = cases[config][case] aircraft = OnDemandAircraft() aircraft = aircraft.standard_substitutions(config=config, autonomousEnabled=c["autonomousEnabled"]) aircraft.substitutions.update({ aircraft.airframe.cost_per_weight: c["airframe_cost_per_weight"], aircraft.battery.e: c["e"], aircraft.battery.cost_per_energy: c["battery_cost_per_energy"], }) sizing_mission = OnDemandSizingMission(aircraft=aircraft) sizing_mission = sizing_mission.standard_substitutions(piloted=c["isSizingMissionPiloted"], reserve=generic_data["reserve"]) revenue_mission = OnDemandRevenueMission(aircraft=aircraft) revenue_mission = revenue_mission.standard_substitutions(piloted=c["isRevenueMissionPiloted"]) deadhead_mission = OnDemandDeadheadMission(aircraft=aircraft) deadhead_mission = deadhead_mission.standard_substitutions(piloted=c["isDeadheadMissionPiloted"])