Пример #1
0
def simulateFlights(simulationParameters, airports, airspace, weather, 
                    flightsAndCosts, instructions):
#    simulationParameters (airports:IDictionary<string,Airport.Airport*Arrival.AirportEnvironment>) (airspace:Airspace)
#    weather (flightsAndCosts:(FlightEntry*CostParameters)[]) (instructions:(int64*Instruction[])[]) =
    # TODO: convert instructions to a table of Id:instructions
    #let instructionTable = Map.ofArray instructions
    # instructions is a map of flightId to routes
    # Simulate each flight and return results in parallel
    # how to do it sequentially?
    flightResults = { } # id: cost 
    # does each flight have a cost parameter?
    for flightEntry, costParameters in flightsAndCosts:
       # print flightEntry
        if (flightEntry.Id in instructions) and (flightEntry.DepartureAirport in airports) and  \
                (flightEntry.ArrivalAirport in airports):
            instruction = instructions[flightEntry.Id]
            (flightParams, flightState) = FlightEntry.generateParametersAndState(
                airports, flightEntry)
            airportEnvironment = None
            #airportEnvironment = airports[flightEntry.ArrivalAirport][1] # TODO check the snd
            results = simulateFlight(fullCoreFunctions, simulationParameters, 
                                     airportEnvironment, 
                                     airspace,
                                     costParameters, weather, flightState, 
                                     flightParams, instruction)
            flightResults[flightEntry.Id] = results
    return flightResults
Пример #2
0
def rowToFlightEntry (row):
    id = int(row[0])
    position = Spatial.Position(float(row[1]), float(row[2]), float(row[3]))
    flightEntry = FlightEntry.FlightEntry(id, position, 
                                          row[4], row[5], 
                                          FlightTypes.Payload(int(row[6]), int(row[7])),
                                          float(row[8]), float(row[9]), float(row[10]), 
                                          float(row[11]),
                                          float(row[12]), float(row[13]))
    
    costParameters = CostParameters.CostParameters(
        float(row[14]), float(row[15]), float(row[16]), float(row[17]), 
        float(row[18]), float(row[19]), float(row[20]), float(row[21]), 
        int(row[22]), float(row[23]), float(row[24]))

    return (flightEntry,costParameters)
Пример #3
0
    
    for flightEntry, costParameters in flights:
        print flightEntry.Id

        if flightEntry.Id not in rawInstructions.keys():
            print flightEntry.Id, " not in instructions."
            count_miss +=1
            continue
        
        raw_instr = rawInstructions[flightEntry.Id]
        instruction = routes[flightEntry.Id]
        n_ins = len(instruction)
        print n_ins
        
        count_opt +=1
        (flightParams, flightState) = FlightEntry.generateParametersAndState(
            airports, flightEntry)
        
        if n_ins <=7:
            init_hgt_spd = [0] * 2 * n_ins 
            for k in range(len(instruction)):
                init_hgt_spd[k] = instruction[k][0][2] / ALT_SCALE # height
                init_hgt_spd[k + n_ins] = instruction[k][1] / SPD_SCALE # air-speed
        else:
            init_hgt_spd = [0] * 2 * 7 
            for k in range(4):
                init_hgt_spd[k] = instruction[k][0][2] / ALT_SCALE # height
                init_hgt_spd[k + 7] = instruction[k][1] / SPD_SCALE # air-speed
            for k in range(4,7):
                init_hgt_spd[k] = instruction[n_ins + k - 7][0][2] / ALT_SCALE # height
                init_hgt_spd[k + 7] = instruction[n_ins + k - 7][1] / SPD_SCALE # air-speed