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)
# 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( isRevenueMissionPiloted=True, isDeadheadMissionPiloted=False) objective_function = mission_cost.cpt problem = Model(objective_function, [ aircraft, sizing_mission, revenue_mission, deadhead_mission, mission_cost ]) solution = problem.solve(verbosity=0) """ delta_S = 500*ureg.ft
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) mission_cost = mission_cost.standard_substitutions(isRevenueMissionPiloted=generic_data["isRevenueMissionPiloted"], isDeadheadMissionPiloted=generic_data["isDeadheadMissionPiloted"]) # All missions have the same range. Needed or else we can't sweep. range_constraints = [sizing_mission.cruise_segment.d_segment == revenue_mission.cruise_segment.d_segment] range_constraints += [sizing_mission.cruise_segment.d_segment == deadhead_mission.cruise_segment.d_segment] objective_function = mission_cost.cpt problem = Model(objective_function, [aircraft, sizing_mission, revenue_mission, deadhead_mission, mission_cost, range_constraints]) del problem.substitutions["d_{segment}_OnDemandRevenueMission/Cruise"] # These variables were set via substitution. They must be freed before model will solve. del problem.substitutions["d_{segment}_OnDemandDeadheadMission/Cruise"] # These variables were set via substitution. They must be freed before model will solve. solution = problem.solve(verbosity=0)
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"]) mission_cost = OnDemandMissionCost(aircraft=aircraft, revenue_mission=revenue_mission, deadhead_mission=deadhead_mission) mission_cost = mission_cost.standard_substitutions(isRevenueMissionPiloted=c["isRevenueMissionPiloted"], isDeadheadMissionPiloted=c["isDeadheadMissionPiloted"]) mission_cost.substitutions.update({ mission_cost.deadhead_ratio: c["deadhead_ratio"] }) objective_function = mission_cost.cpt problem = Model(objective_function, [aircraft, sizing_mission, revenue_mission, deadhead_mission, mission_cost]) solution = problem.solve(verbosity=0) c["solution"] = solution print case + "aircraft cost: %0.1f per kg" % solution("cost_per_mass_OnDemandAircraft/Airframe").to(ureg.kg**-1).magnitude