示例#1
0
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)
示例#2
0
	
	print "Solving configuration: " + config

	c = configs[config]

	configs[config]["TOGW"] = np.zeros(np.size(sizing_N_passengers_array))
	configs[config]["W_{battery}"] = np.zeros(np.size(sizing_N_passengers_array))
	configs[config]["cost_per_trip_per_passenger"] = np.zeros(np.size(sizing_N_passengers_array))
	configs[config]["SPL_A"] = np.zeros(np.size(sizing_N_passengers_array))

	for i,sizing_N_passengers in enumerate(sizing_N_passengers_array):
		revenue_N_passengers = revenue_N_passengers_array[i]

		problem_subDict = {}
	
		Aircraft = OnDemandAircraft(autonomousEnabled=generic_data["autonomousEnabled"])
		problem_subDict.update({
			Aircraft.L_D_cruise: c["L/D"], #estimated L/D in cruise
			Aircraft.eta_cruise: generic_data["\eta_{cruise}"], #propulsive efficiency in cruise
			Aircraft.tailRotor_power_fraction_hover: c["tailRotor_power_fraction_hover"],
			Aircraft.tailRotor_power_fraction_levelFlight: c["tailRotor_power_fraction_levelFlight"],
			Aircraft.cost_per_weight: generic_data["vehicle_cost_per_weight"], #vehicle cost per unit empty weight
			Aircraft.battery.C_m: generic_data["C_m"], #battery energy density
			Aircraft.battery.cost_per_C: generic_data["battery_cost_per_C"], #battery cost per unit energy capacity
			Aircraft.rotors.N: c["N"], #number of propellers
			Aircraft.rotors.Cl_mean_max: c["Cl_{mean_{max}}"], #maximum allowed mean lift coefficient
			Aircraft.structure.weight_fraction: c["weight_fraction"], #empty weight fraction
			Aircraft.electricalSystem.eta: generic_data["\eta_{electric}"], #electrical system efficiency	
		})

		SizingMission = OnDemandSizingMission(Aircraft,mission_type=generic_data["sizing_mission"]["type"],
示例#3
0
		V_cruise = c["V_{cruise}"]
		L_D_cruise = c["L/D"]
		T_A = c["T/A"]
		loiter_type = c["loiter_type"]
		tailRotor_power_fraction_hover = c["tailRotor_power_fraction_hover"]
		tailRotor_power_fraction_levelFlight = c["tailRotor_power_fraction_levelFlight"]
		weight_fraction = c["weight_fraction"]

		N = c["N"]
		B = c["B"]
		s = c["s"]
		t_c = c["t_c"]
		Cl_mean_max = c["Cl_{mean_{max}}"]

		Aircraft = OnDemandAircraft(N=N,L_D_cruise=L_D_cruise,eta_cruise=eta_cruise,C_m=C_m,
			Cl_mean_max=Cl_mean_max,weight_fraction=weight_fraction,s=s,n=n,eta_electric=eta_electric,
			cost_per_weight=vehicle_cost_per_weight,cost_per_C=battery_cost_per_C,
			autonomousEnabled=autonomousEnabled)

		SizingMission = OnDemandSizingMission(Aircraft,mission_range=sizing_mission_range,
			V_cruise=V_cruise,N_passengers=sizing_N_passengers,t_hover=sizing_t_hover,
			reserve_type=reserve_type,mission_type=sizing_mission_type,loiter_type=loiter_type,
			tailRotor_power_fraction_hover=tailRotor_power_fraction_hover,
			tailRotor_power_fraction_levelFlight=tailRotor_power_fraction_levelFlight)
		SizingMission.substitutions.update({SizingMission.fs0.topvar("T/A"):T_A})
	
		RevenueMission = OnDemandRevenueMission(Aircraft,mission_range=revenue_mission_range,
			V_cruise=V_cruise,N_passengers=revenue_N_passengers,t_hover=revenue_t_hover,
			charger_power=charger_power,mission_type=revenue_mission_type,
			tailRotor_power_fraction_hover=tailRotor_power_fraction_hover,
			tailRotor_power_fraction_levelFlight=tailRotor_power_fraction_levelFlight)
示例#4
0
		mission_range = np.linspace(2,  36, num_pts) * ureg.nautical_mile
	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"])
示例#5
0
del configs["Tilt duct"]
del configs["Helicopter"]
del configs["Coaxial heli"]

#Optimize remaining configurations
for config in configs:
	
	print "Solving configuration: " + config

	for time_frame in configs[config]:
		
		c = configs[config][time_frame]

		problem_subDict = {}

		Aircraft = OnDemandAircraft(autonomousEnabled=time_frame_data[time_frame]["autonomousEnabled"])
		problem_subDict.update({
			Aircraft.L_D_cruise: c["L/D"], #estimated L/D in cruise
			Aircraft.eta_cruise: generic_data["\eta_{cruise}"], #propulsive efficiency in cruise
			Aircraft.tailRotor_power_fraction_hover: c["tailRotor_power_fraction_hover"],
			Aircraft.tailRotor_power_fraction_levelFlight: c["tailRotor_power_fraction_levelFlight"],
			Aircraft.cost_per_weight: time_frame_data[time_frame]["vehicle_cost_per_weight"], #vehicle cost per unit empty weight
			Aircraft.battery.C_m: time_frame_data[time_frame]["C_m"], #battery energy density
			Aircraft.battery.cost_per_C: time_frame_data[time_frame]["battery_cost_per_C"], #battery cost per unit energy capacity
			Aircraft.rotors.N: c["N"], #number of propellers
			Aircraft.rotors.Cl_mean_max: c["Cl_{mean_{max}}"], #maximum allowed mean lift coefficient
			Aircraft.structure.weight_fraction: c["weight_fraction"], #empty weight fraction
			Aircraft.electricalSystem.eta: generic_data["\eta_{electric}"], #electrical system efficiency	
		})

		SizingMission = OnDemandSizingMission(Aircraft,mission_type=time_frame_data[time_frame]["sizing_mission_type"],
示例#6
0
def test(generic_data, configuration_data, config):

    configs = configuration_data.copy()
    c = configs[config]

    problem_subDict = {}

    Aircraft = OnDemandAircraft(
        autonomousEnabled=generic_data["autonomousEnabled"])
    problem_subDict.update({
        Aircraft.L_D_cruise:
        c["L/D"],  #estimated L/D in cruise
        Aircraft.eta_cruise:
        generic_data["\eta_{cruise}"],  #propulsive efficiency in cruise
        Aircraft.tailRotor_power_fraction_hover:
        c["tailRotor_power_fraction_hover"],
        Aircraft.tailRotor_power_fraction_levelFlight:
        c["tailRotor_power_fraction_levelFlight"],
        Aircraft.cost_per_weight:
        generic_data[
            "vehicle_cost_per_weight"],  #vehicle cost per unit empty weight
        Aircraft.battery.C_m:
        generic_data["C_m"],  #battery energy density
        Aircraft.battery.cost_per_C:
        generic_data[
            "battery_cost_per_C"],  #battery cost per unit energy capacity
        Aircraft.rotors.N:
        c["N"],  #number of propellers
        Aircraft.rotors.Cl_mean_max:
        c["Cl_{mean_{max}}"],  #maximum allowed mean lift coefficient
        Aircraft.structure.weight_fraction:
        c["weight_fraction"],  #empty weight fraction
        Aircraft.electricalSystem.eta:
        generic_data["\eta_{electric}"],  #electrical system efficiency	
    })

    SizingMission = OnDemandSizingMission(
        Aircraft,
        mission_type=generic_data["sizing_mission"]["type"],
        reserve_type=generic_data["reserve_type"])
    problem_subDict.update({
        SizingMission.mission_range:
        generic_data["sizing_mission"]["range"],  #mission range
        SizingMission.V_cruise:
        c["V_{cruise}"],  #cruising speed
        SizingMission.t_hover:
        generic_data["sizing_mission"]["t_{hover}"],  #hover time
        SizingMission.T_A:
        c["T/A"],  #disk loading
        SizingMission.passengers.N_passengers:
        generic_data["sizing_mission"]["N_passengers"],  #Number of passengers
    })

    RevenueMission = OnDemandRevenueMission(
        Aircraft, mission_type=generic_data["revenue_mission"]["type"])
    problem_subDict.update({
        RevenueMission.mission_range:
        generic_data["revenue_mission"]["range"],  #mission range
        RevenueMission.V_cruise:
        c["V_{cruise}"],  #cruising speed
        RevenueMission.t_hover:
        generic_data["revenue_mission"]["t_{hover}"],  #hover time
        RevenueMission.passengers.N_passengers:
        generic_data["revenue_mission"]["N_passengers"],  #Number of passengers
        RevenueMission.time_on_ground.charger_power:
        generic_data["charger_power"],  #Charger power
    })

    DeadheadMission = OnDemandDeadheadMission(
        Aircraft, mission_type=generic_data["deadhead_mission"]["type"])
    problem_subDict.update({
        DeadheadMission.mission_range:
        generic_data["deadhead_mission"]["range"],  #mission range
        DeadheadMission.V_cruise:
        c["V_{cruise}"],  #cruising speed
        DeadheadMission.t_hover:
        generic_data["deadhead_mission"]["t_{hover}"],  #hover time
        DeadheadMission.passengers.N_passengers:
        generic_data["deadhead_mission"]
        ["N_passengers"],  #Number of passengers
        DeadheadMission.time_on_ground.charger_power:
        generic_data["charger_power"],  #Charger power
    })

    MissionCost = OnDemandMissionCost(Aircraft, RevenueMission,
                                      DeadheadMission)
    problem_subDict.update({
        MissionCost.revenue_mission_costs.operating_expenses.pilot_cost.wrap_rate:
        generic_data["pilot_wrap_rate"],  #pilot wrap rate
        MissionCost.revenue_mission_costs.operating_expenses.maintenance_cost.wrap_rate:
        generic_data["mechanic_wrap_rate"],  #mechanic wrap rate
        MissionCost.revenue_mission_costs.operating_expenses.maintenance_cost.MMH_FH:
        generic_data["MMH_FH"],  #maintenance man-hours per flight hour
        MissionCost.deadhead_mission_costs.operating_expenses.pilot_cost.wrap_rate:
        generic_data["pilot_wrap_rate"],  #pilot wrap rate
        MissionCost.deadhead_mission_costs.operating_expenses.maintenance_cost.wrap_rate:
        generic_data["mechanic_wrap_rate"],  #mechanic wrap rate
        MissionCost.deadhead_mission_costs.operating_expenses.maintenance_cost.MMH_FH:
        generic_data["MMH_FH"],  #maintenance man-hours per flight hour
        MissionCost.deadhead_ratio:
        generic_data["deadhead_ratio"],  #deadhead ratio
        #MissionCost.NdNr: 0.25,
    })

    problem = Model(MissionCost["cost_per_trip"], [
        Aircraft, SizingMission, RevenueMission, DeadheadMission, MissionCost
    ])
    #problem = Model(Aircraft["TOGW"],[Aircraft, SizingMission])
    problem.substitutions.update(problem_subDict)

    try:
        solution = problem.solve(verbosity=0)
        return solution
    except:
        return problem
示例#7
0
        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()
示例#8
0
        ]

        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,