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
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)
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