def __init__(self, num_elem=10, num_cp=5, x_pts=None, surr_file=None): """Initialize this segment trajectory problem. num_elem: int number of computations points in the mission profile num_cp: int number of control points for the splines x_pts: 1d array array containing the x locations of the spline control points. surr_file: Name of file for generating the Tripan surrogate models. """ self.num_elem = num_elem self.num_pt = num_cp self.x_pts = x_pts # Generate jacobians for b-splines using MBI package self.jac_h, self.jac_gamma = setup_MBI(num_elem + 1, num_cp, x_pts) # Setup the surrogate models self.CL_arr, self.CD_arr, self.CM_arr, self.num = \ setup_surrogate(surr_file) super(MissionSegment, self).__init__()
def __init__(self, num_elem=10, num_cp=5, x_pts=None, surr_file=None): """Initialize this segment trajectory problem. num_elem: int number of computations points in the mission profile num_cp: int number of control points for the splines x_pts: 1d array array containing the x locations of the spline control points. surr_file: Name of file for generating the Tripan surrogate models. """ self.num_elem = num_elem self.num_pt = num_cp self.x_pts = x_pts # Generate jacobians for b-splines using MBI package self.jac_h, self.jac_gamma = setup_MBI(num_elem+1, num_cp, x_pts) # Setup the surrogate models self.CL_arr, self.CD_arr, self.CM_arr, self.num = \ setup_surrogate(surr_file) super(MissionSegment, self).__init__()
def test_ASysTripanCDSurrogate(self): surr = '../crm_surr' CL_arr, CD_arr, CM_arr, num = setup_surrogate(surr) compname = 'SysTripanCDSurrogate' self.arg_dict['num'] = num self.arg_dict['CD'] = CD_arr self.setup(compname, self.arg_dict) # Scale some inputs val = self.model.comp.get('M') shape1 = val.shape self.model.comp.set('M', 0.8 + .1*np.random.random(shape1)) self.run_model() self.compare_derivatives()
def test_ASysTripanCDSurrogate(self): surr = '../crm_surr' CL_arr, CD_arr, CM_arr, num = setup_surrogate(surr) compname = 'SysTripanCDSurrogate' self.arg_dict['num'] = num self.arg_dict['CD'] = CD_arr self.setup(compname, self.arg_dict) # Scale some inputs val = self.model.comp.get('M') shape1 = val.shape self.model.comp.set('M', 0.8 + .1 * np.random.random(shape1)) self.run_model() self.compare_derivatives()
def __init__(self, problem_file): super(AllocationProblem, self).__init__() data = {} execfile(problem_file, data) misc_data = data['misc_data'] ac_data = data['ac_data'] rt_data = data['rt_data'] num_routes = rt_data['number'] num_existing_ac = len(ac_data['existing_ac']) num_new_ac = len(ac_data['new_ac']) num_ac = num_existing_ac + num_new_ac self.num_routes = num_routes self.num_existing_ac = num_existing_ac self.num_new_ac = num_new_ac self.num_ac = num_ac ac_aerosurr = {} for ac_name in ac_data['new_ac']: data = {} execfile(ac_name+'_params.py', data) params = data['params'] surr = {} surr['CL'], surr['CD'], surr['CM'], surr['nums'] = setup_surrogate(params['surr']) ac_aerosurr[ac_name] = surr self.gamma_lb = np.tan(-35.0 * (np.pi/180.0))/1e-1 self.gamma_ub = np.tan(35.0 * (np.pi/180.0))/1e-1 for irt in xrange(num_routes): num_elem = rt_data['num_elem'][irt] num_cp = rt_data['num_cp'][irt] x_range = rt_data['range'][irt] * 1.852 altitude = 10 * np.sin(np.pi * np.linspace(0,1,num_elem+1)) x_init = x_range * 1e3 * (1-np.cos(np.linspace(0, 1, num_cp)*np.pi))/2/1e6 M_init = np.ones(num_cp)*0.82 h_init = 10 * np.sin(np.pi * x_init / (x_range/1e3)) jac_h, jac_gamma = setup_MBI(num_elem+1, num_cp, x_init) #altitude = 10 * np.sin(np.pi * np.linspace(0,1,num_elem+1)) for iac in xrange(num_new_ac): ac_name = ac_data['new_ac'][iac] seg_name = 'Seg_%03i_%03i'%(irt,iac) seg = self.add(seg_name, MissionSegment(num_elem=num_elem, num_cp=num_cp, x_pts=x_init, params_file=ac_name+'_params.py', aero_surr=ac_aerosurr[ac_name], jac_h=jac_h, jac_gamma=jac_gamma)) seg.h_pt = h_init seg.M_pt = M_init #seg.set_init_h_pt(altitude) seg.driver.system_type = 'serial' seg.coupled_solver.system_type = 'serial' seg.driver.gradient_options.iprint = 0 seg.coupled_solver.gradient_options.iprint = 0 seg.coupled_solver.iprint = 0 # seg.coupled_solver.gradient_options.iprint = 0 #seg.coupled_solver.pre_setup() self.add('pax_flt', Array(10*np.ones((num_routes, num_ac)), iotype='in')) self.add('flt_day', Array(0.1*np.ones((num_routes, num_ac)), iotype='in')) cost_fuel = np.zeros((num_routes, num_ac)) prc_pax = np.zeros((num_routes, num_ac)) cost_nf = np.zeros((num_routes, num_ac)) maintenance = np.zeros((num_routes, num_ac)) turnaround = np.zeros((num_routes, num_ac)) for irt in xrange(num_routes): for iac in xrange(num_ac): if iac < num_existing_ac: ac_name = ac_data['existing_ac'][iac] else: inac = iac - num_existing_ac ac_name = ac_data['new_ac'][inac] cost_fuel[irt, iac] = misc_data['cost/fuel'] * 2.2 / 9.81 prc_pax[irt, iac] = ac_data['ticket price', ac_name][irt] cost_nf[irt, iac] = ac_data['flight cost no fuel', ac_name][irt] maintenance[irt, iac] = ac_data['MH', ac_name] + 1 turnaround[irt, iac] = misc_data['turnaround'] self.add('SysProfit', Profit(num_routes, num_ac, prc_pax, cost_fuel, cost_nf)) self.add('SysPaxCon', PaxCon(num_routes, num_ac)) self.add('SysAircraftCon', AircraftCon(num_routes, num_ac, maintenance, turnaround)) for iac in xrange(num_existing_ac): ac_name = ac_data['existing_ac'][iac] self.SysProfit.fuelburn[:, iac] = ac_data['fuel', ac_name] / 1e5 self.SysAircraftCon.time[:, iac] = ac_data['block time', ac_name] * 3.6e3 / 1e4 self.connect('pax_flt', 'SysProfit.pax_flt') self.connect('flt_day', 'SysProfit.flt_day') self.connect('pax_flt', 'SysPaxCon.pax_flt') self.connect('flt_day', 'SysPaxCon.flt_day') self.connect('flt_day', 'SysAircraftCon.flt_day') for irt in xrange(num_routes): for inac in xrange(num_new_ac): iac = inac + num_existing_ac seg_name = 'Seg_%03i_%03i'%(irt,inac) self.connect('pax_flt[%i, %i]'%(irt,iac), seg_name+'.pax_flt') self.connect(seg_name+'.fuelburn', 'SysProfit.fuelburn[%i, %i]'%(irt,iac)) self.connect(seg_name+'.time', 'SysAircraftCon.time[%i, %i]'%(irt,iac)) self.create_passthrough('SysProfit.profit') self.create_passthrough('SysPaxCon.pax_con') self.create_passthrough('SysAircraftCon.ac_con') pax_upper = np.zeros((num_routes, num_ac)) demand = np.zeros(num_routes) ac_avail = np.zeros(num_ac) for irt in xrange(num_routes): for iac in xrange(num_ac): if iac < num_existing_ac: ac_name = ac_data['existing_ac'][iac] else: inac = iac - num_existing_ac ac_name = ac_data['new_ac'][inac] pax_upper[irt, iac] = ac_data['capacity', ac_name] for irt in xrange(num_routes): demand[irt] = rt_data['demand'][irt] for iac in xrange(num_ac): if iac < num_existing_ac: ac_name = ac_data['existing_ac'][iac] else: inac = iac - num_existing_ac ac_name = ac_data['new_ac'][inac] ac_avail[iac] = 12 * ac_data['number', ac_name] self.add('pax_upper', Array(np.zeros((num_routes, num_ac)), iotype='out')) self.add('demand', Array(np.zeros(num_routes), iotype='out')) self.add('ac_avail', Array(np.zeros(num_ac), iotype='out')) self.pax_upper = pax_upper self.demand = demand self.ac_avail = ac_avail self.add('missions', Driver()) for irt in xrange(self.num_routes): for inac in xrange(self.num_new_ac): seg_name = 'Seg_%03i_%03i'%(irt,inac) self.missions.workflow.add(seg_name) self.missions.system_type = 'parallel' #self.missions.gradient_options.lin_solver = "linear_gs" self.missions.gradient_options.lin_solver = "petsc_ksp" self.missions.gradient_options.iprint = 0 self.add('stuff', Driver()) self.stuff.system_type = "serial" self.stuff.workflow.add(['SysProfit', 'SysPaxCon', 'SysAircraftCon']) self.driver.workflow.add(['missions', 'stuff'])