Example #1
0
    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
Example #2
0
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()
Example #3
0
                      " 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."
Example #4
0
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"