def handleMessage(self): print "< received", repr(self.data) try: self.data = json.loads(self.data) print self.data config = 'optimalD8' substitutions = get_optimalD8_subs() fixedBPR = False pRatOpt = True mutategparg = True m = Mission(3, 2, config, 1) m.cost = m['W_{f_{total}}'] for name, value in self.data.items(): try: key = m.design_parameters[name] m.substitutions[key] = value except KeyError as e: print repr(e) sol = optimize_aircraft(m, substitutions, fixedBPR, pRatOpt, mutategparg) LASTSOL[0] = sol genfiles(m, sol) self.send({"status": "optimal", "msg": ("Successfully optimized." " Optimal heat transfer: %.1f watts " % sol["variables"][m.Q])}) except Exception as e: self.send({"status": "unknown", "msg": "The last solution" " raised an exception; tweak it and send again."}) print type(e), e
def standard_killer_plot(): """ Generates the standard killer plots from the TASOPT paper """ Nclimb = 3 Ncruise = 2 Nmission = 1 subsList = [ get_optimal737_subs(), get_M072_737_subs(), get_D8_eng_wing_subs(), get_D8_no_BLI_subs(), get_optimalD8_subs(), get_optimalD8_subs() ] configList = [ 'optimal737', 'M072_737', 'D8_eng_wing', 'D8_no_BLI', 'optimalD8', 'optimalD8' ] fixedBPRList = [True, True, True, True, True, False] pRatOptList = [False, False, False, False, False, True] mutategpargList = [False, False, False, False, False, False] sol = {} wf = [] for i in range(0, 6): m = Mission(Nclimb, Ncruise, configList[i], Nmission) m.cost = m['W_{f_{total}}'].sum() substitutions = subsList[i] substitutions.update({ 'R_{req}': 3000. * units('nmi'), 'n_{pass}': 180. }) sol[i] = optimize_aircraft(m, substitutions, fixedBPRList[i], pRatOptList[i], mutategpargList[i]) wf.append(sol[i]('W_{f_{total}}')) wing_sens = [ sol[i]['sensitivities']['constants']['C_{wing}'] for i in range(0, 6) ] HT_sens = [ sol[i]['sensitivities']['constants']['C_{ht}'] for i in range(0, 6) ] VT_sens = [ sol[i]['sensitivities']['constants']['C_{VT}'] for i in range(0, 6) ] fuse_sens = [ sol[i]['sensitivities']['constants']['C_{fuse}'] for i in range(0, 6) ] engine_sens = [ sol[i]['sensitivities']['constants']['C_{engsys}'] for i in range(0, 6) ] lg_sens = [ sol[i]['sensitivities']['constants']['C_{lg}'] for i in range(0, 6) ] Mmin_sens = [ sol[i]['sensitivities']['constants']['M_{min}'] for i in range(0, 6) ] ytest = [mag(wf[i] / wf[0])[0] for i in range(0, 6)] xtest = [0, 1, 2, 3, 4, 5] xlabels = [ 'Optimized 737-800 M = 0.8', 'Slow to M = 0.72', 'D8 fuselage, Pi tail', 'Rear podded engines', 'Integrated engines, BLI = D8', 'Optimize engine', '2020 Engines' ] plt.plot(xtest, ytest, "o--") plt.plot([0, 1, 2, 3, 4, 5, 6], [1, .88, .81, .82, .67, .66, .63], "o--") plt.plot([0, 1, 2, 3, 6], [1, .868, .871, .865, .602], "o--") plt.plot([0, 1, 2, 3, 4, 5, 6], [ 1, 41129. / 43843, 38402. / 43843, 37180. / 43843, 32987. / 43843, 32383. / 43843, 29753. / 43843 ], "o--") plt.xticks(np.linspace(0, 6, 7), xlabels, rotation='vertical') plt.ylim([0, 1.1]) plt.xlim([-.5, 6.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('$W_{\mathrm{f}}/W_{\mathrm{f}_\mathrm{0}}$', fontsize=20) plt.title('D8 Morphing Chart') plt.legend(['SP Model', 'TASOPT', 'NASA', 'Aurora'], loc=3) plt.savefig('Morphing_Chart_Figs/D8_standard_morphing_chart.pdf', bbox_inches="tight") plt.show(), plt.close() xtest = [0, 1, 2, 3, 4, 5] plt.plot(xtest, wing_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.25]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Wing Weight', fontsize=20) plt.title('Wing Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_wing_sens.pdf', bbox_inches="tight") plt.show(), plt.close() plt.plot(xtest, HT_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.02]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Horizontal Tail Weight', fontsize=20) plt.title('Horizontal Tail Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_HT_sens.pdf', bbox_inches="tight") plt.show(), plt.close() plt.plot(xtest, VT_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.15]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Vertical Tail Weight', fontsize=20) plt.title('Vertical Tail Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_VT_sens.pdf', bbox_inches="tight") plt.show(), plt.close() plt.plot(xtest, fuse_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.55]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Fuselage Weight', fontsize=20) plt.title('Fuselage Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_fuse_sens.pdf', bbox_inches="tight") plt.show(), plt.close() plt.plot(xtest, engine_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.3]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Engine Weight', fontsize=20) plt.title('Engine Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_engine_sens.pdf', bbox_inches="tight") plt.show(), plt.close() plt.plot(xtest, lg_sens, "o--") plt.xticks(xtest, xlabels, rotation='vertical') plt.ylim([0, 0.07]) plt.xlim([-.5, 5.5]) plt.grid() plt.xlabel('Design Step', fontsize=20) plt.ylabel('Sensitivity to Landing Gear Weight', fontsize=20) plt.title('Landing Gear Weight Sensitivity Morphing Chart') plt.savefig( 'Morphing_Chart_Figs/D8_standard_killer_chart_max_opt_eng_lg_sens.pdf', bbox_inches="tight") plt.show(), plt.close()
" raised an exception; tweak it and send again."}) print type(e), e def send(self, msg): print "> sent", repr(msg) self.sendMessage(unicode(json.dumps(msg))) def handleConnected(self): print self.address, "connected" def handleClose(self): print self.address, "closed" EXIT[0] = True if __name__ == "__main__": objective = 'W_{f_{total}}' aircraft = 'optimald8' substitutions = get_optimalD8_subs() fixedBPR = False pRatOpt = True mutategparg = True LASTSOL[0] = None sol = optimize_aircraft(objective, aircraft, substitutions, fixedBPR, pRatOpt, mutategparg, x0 = LASTSOL[0]) LASTSOL[0] = sol genfiles(m, sol) server = SimpleWebSocketServer('', 8000, SPaircraftServer) while not EXIT[0]: server.serveonce() print "Python server has exited."
Nclimb = 3 # number of climb segments Ncruise = 2 # number of cruise segments Nmission = 1 # number of missions config = 'optimal737' # String describing configuration: m = Mission(Nclimb, Ncruise, config, Nmission) # Additional options fixedBPR = True pRatOpt = False mutategparg = False sol = {} objectives = [ m['W_{f_{total}}'], m['W_{dry}'], m['b'], m['AR'], m['W_{engine}'], m['TotalTime'], m['L/D'][Nclimb], m['W_{lg}'] ] for i in range(0, 8): m.cost = objectives[i].sum() substitutions = get_optimal737_subs() substitutions.update({'R_{req}': 3000. * units('nmi'), 'n_{pass}': 180.}) sol[i] = optimize_aircraft(m, substitutions, fixedBPR, pRatOpt, mutategparg) basesol = sol[0] # output the columns of the table for i in range(0, 8): print("column %s" % i) print "\n" print[sol[i](objectives[j]) / basesol(objectives[j]) for j in range(0, 8)] print "\n" print "\n"