Beispiel #1
0
    def configure(self):

        # Create Optimizer instance
        self.add('driver', CaseIteratorDriver())

        # Create component instances
        self.add('input_list', Input_List())
        self.add('postprocess', Postprocess_Fuzzy_Outputs())
        self.add('compatibility', checkCompatibility())

        #PHI SYSTEM
        self.add('fuzz_combine_phi', Build_Fuzzy_Input())
        self.add('phi_sys', Fuzzy_System())

        #Lift/Drag SYSTEM
        self.add('fuzz_combine_LD', Build_Fuzzy_Input())
        self.add('LoD_sys', Fuzzy_System())

        #FoM SYSTEM
        self.add('fuzz_combine_FoM', Build_Fuzzy_Input())
        self.add('FoM_sys', DFES())

        #Propulsive Efficiency System
        self.add('fuzz_combine_etaP', Build_Fuzzy_Input())
        self.add('etaP_sys', Fuzzy_System())

        #QUANTIFICATION
        self.add('quantifyPHI', Quantify())
        self.add('quantifySFC', Quantify())

        #RF SYSTEMs
        self.add('fuzz_combine_GWT', Build_Fuzzy_Input())
        self.add('GWT_sys', DFES())
        self.add('fuzz_combine_P', Build_Fuzzy_Input())
        self.add('P_sys', DFES())
        self.add('fuzz_combine_VH', Build_Fuzzy_Input())
        self.add('VH_sys', DFES())
        

        # Iteration Hierarchy
        self.driver.workflow.add([  'compatibility', 'input_list',
                                    'fuzz_combine_phi', 'phi_sys',
                                    'fuzz_combine_LD',  'LoD_sys', 
                                    'fuzz_combine_FoM', 'FoM_sys', 
                                    'fuzz_combine_etaP', 'etaP_sys',
                                    'quantifyPHI', 'quantifySFC', 
                                    'GWT_sys', 'P_sys', 'VH_sys',
                                    'postprocess' ])

        self.connect('compatibility.option1_out', 'input_list.option1')
        self.connect('compatibility.option2_out', 'input_list.option2')
        self.connect('compatibility.option3_out', 'input_list.option3')
        self.connect('compatibility.option4_out', 'input_list.option4')
        self.connect('compatibility.option5_out', 'input_list.option5')
        self.connect('compatibility.option6_out', 'input_list.option6')
        self.connect('compatibility.option7_out', 'input_list.option7')
        self.connect('compatibility.option8_out', 'input_list.option8')
        self.connect('compatibility.option9_out', 'input_list.option9')
        self.connect('compatibility.compatibility', 'input_list.passthrough')
        self.connect('compatibility.compatibility', 'postprocess.passthrough')
        self.connect('compatibility.incompatCount', 'postprocess.incompatCount')

        self.connect('compatibility.compatibility', 'phi_sys.passthrough')
        self.connect('compatibility.compatibility', 'LoD_sys.passthrough')
        self.connect('compatibility.compatibility', 'FoM_sys.passthrough')
        self.connect('compatibility.compatibility', 'etaP_sys.passthrough')
        self.connect('compatibility.compatibility', 'GWT_sys.passthrough')
        self.connect('compatibility.compatibility', 'P_sys.passthrough')
        self.connect('compatibility.compatibility', 'VH_sys.passthrough')

        self.connect('compatibility.compatibility', 'quantifyPHI.passthrough')
        self.connect('compatibility.compatibility', 'quantifySFC.passthrough')


        ## CONNECT phi system
        #connect inputs for phi system
        self.connect("input_list.VL_SYS_TYPE_phi", "fuzz_combine_phi.in_1.input_value")
        self.connect("input_list.VL_SYS_TYPE_w", "fuzz_combine_phi.in_2.input_value")
        self.connect("input_list.VL_SYS_TYPE_f", "fuzz_combine_phi.in_3.input_value")
        
        self.connect("input_list.VL_SYS_PROP_w", "fuzz_combine_phi.in_4.input_value")
        self.connect("input_list.VL_SYS_PROP_phi", "fuzz_combine_phi.in_5.input_value")
        
        self.connect("input_list.VL_SYS_TECH_phi", "fuzz_combine_phi.in_6.input_value")
        self.connect("input_list.VL_SYS_TECH_w", "fuzz_combine_phi.in_7.input_value")
        self.connect("input_list.VL_SYS_TECH_f", "fuzz_combine_phi.in_8.input_value")
        self.connect("input_list.VL_SYS_TECH_LD", "fuzz_combine_phi.in_9.input_value")
        
        self.connect("input_list.FWD_SYS_PROP_eta_p", "fuzz_combine_phi.in_10.input_value")
        
        self.connect("input_list.FWD_SYS_DRV_eta_d", "fuzz_combine_phi.in_11.input_value")
        
        self.connect("input_list.FWD_SYS_TYPE_phi", "fuzz_combine_phi.in_12.input_value")
        self.connect("input_list.FWD_SYS_TYPE_TP", "fuzz_combine_phi.in_13.input_value")
        
        self.connect("input_list.WING_SYS_TYPE_LD", "fuzz_combine_phi.in_14.input_value")
        self.connect("input_list.WING_SYS_TYPE_f", "fuzz_combine_phi.in_15.input_value")


        self.connect("fuzz_combine_phi.system_inputs","phi_sys.input_list")
        self.connect("fuzz_combine_phi.runFlag_out", "phi_sys.runFlag_in")

        self.postprocess.fuzzSys_in_1.mf_key = 'sys_phi'
        self.connect('phi_sys.outputs_all', 'postprocess.fuzzSys_in_1.mf_dict')


        ## CONNECT LoD System
        self.connect("input_list.SYSTEM_f", "fuzz_combine_LD.in_1.input_value")
        self.connect("input_list.WING_LoD", "fuzz_combine_LD.in_2.input_value")
        
        self.connect("fuzz_combine_LD.system_inputs", "LoD_sys.input_list")
        self.connect("fuzz_combine_LD.runFlag_out", "LoD_sys.runFlag_in")

        self.postprocess.fuzzSys_in_2.mf_key = 'sys_LoD'
        self.connect('LoD_sys.outputs_all', 'postprocess.fuzzSys_in_2.mf_dict')


        ## CONNECT FoM System
        self.connect("input_list.VL_SYS_e_d", "fuzz_combine_FoM.in_1.input_value")
        self.connect("input_list.VL_SYS_PROP_sigma", "fuzz_combine_FoM.in_2.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_FoM.in_3.input_value")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_FoM.in_4.input_value")
   
        self.connect("fuzz_combine_FoM.system_inputs","FoM_sys.input_list")
        self.connect("fuzz_combine_FoM.runFlag_out", "FoM_sys.runFlag_in")

        self.postprocess.fuzzSys_in_3.mf_key = 'sys_FoM'
        self.connect('FoM_sys.outputs_all', 'postprocess.fuzzSys_in_3.mf_dict')


        ## CONNECT etaP System
        self.connect("input_list.FWD_SYS_eta_p", "fuzz_combine_etaP.in_1.input_value")
        self.connect("input_list.FWD_DRV_eta_d", "fuzz_combine_etaP.in_2.input_value")
        
        self.connect("fuzz_combine_etaP.system_inputs", "etaP_sys.input_list")
        self.connect("fuzz_combine_etaP.runFlag_out", "etaP_sys.runFlag_in")

        self.postprocess.fuzzSys_in_4.mf_key = 'sys_etaP'
        self.connect('etaP_sys.outputs_all', 'postprocess.fuzzSys_in_4.mf_dict')

        self.postprocess.PLOTMODE = 0

        ## CONNECT RF Systems
        self.connect('phi_sys.outputs_all', 'quantifyPHI.inDict') #key defined below
        self.connect('input_list.ENG_SYS_TYPE_SFC', 'quantifySFC.qualVal')

        #GWT:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_GWT.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_GWT.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_GWT.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_GWT.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_GWT.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_GWT.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_GWT.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_GWT.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_GWT.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_GWT.in_8.input_value")

        self.connect("fuzz_combine_GWT.system_inputs","GWT_sys.input_list")
        self.connect("fuzz_combine_GWT.runFlag_out", "GWT_sys.runFlag_in")

        self.postprocess.fuzzSys_in_5.mf_key = 'sys_GWT'
        self.connect('GWT_sys.outputs_all', 'postprocess.fuzzSys_in_5.mf_dict')

        #Power Installed:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_P.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_P.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_P.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_P.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_P.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_P.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_P.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_P.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_P.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_P.in_8.input_value")

        self.connect("fuzz_combine_P.system_inputs","P_sys.input_list")
        self.connect("fuzz_combine_P.runFlag_out", "P_sys.runFlag_in")

        self.postprocess.fuzzSys_in_6.mf_key = 'sys_P'
        self.connect('P_sys.outputs_all', 'postprocess.fuzzSys_in_6.mf_dict') 

        #VH:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_VH.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_VH.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_VH.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_VH.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_VH.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_VH.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_VH.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_VH.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_VH.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_VH.in_8.input_value")

        self.connect("fuzz_combine_VH.system_inputs","VH_sys.input_list")
        self.connect("fuzz_combine_VH.runFlag_out", "VH_sys.runFlag_in")

        self.postprocess.fuzzSys_in_7.mf_key = 'sys_VH'
        self.connect('VH_sys.outputs_all', 'postprocess.fuzzSys_in_7.mf_dict')       


        ######
        # Design Variables
        self.input_list.input_file = 'data/morphInputs_13Jun15.csv'

        ## SET VARIABLES phi system
        self.phi_sys.TESTMODE = 0
        self.phi_sys.TESTPLOT = 0
        self.phi_sys.fcl_file = 'FCL_files/FRBS_phi/PHIsys_trained_5-2In9-2Out_gauss250tData_50vData_optInputsBEST_GA.fcl'    

        self.fuzz_combine_phi.in_1.input_key = 'VL_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_2.input_key = 'VL_SYS_TYPE_w'
        self.fuzz_combine_phi.in_3.input_key = 'VL_SYS_TYPE_f'
        self.fuzz_combine_phi.in_4.input_key = 'VL_SYS_PROP_w'
        self.fuzz_combine_phi.in_5.input_key = 'VL_SYS_PROP_phi'
        self.fuzz_combine_phi.in_6.input_key = 'VL_SYS_TECH_phi'
        self.fuzz_combine_phi.in_7.input_key = 'VL_SYS_TECH_w'
        self.fuzz_combine_phi.in_8.input_key = 'VL_SYS_TECH_f'
        self.fuzz_combine_phi.in_9.input_key = 'VL_SYS_TECH_LD'
        self.fuzz_combine_phi.in_10.input_key = 'FWD_SYS_PROP_eta_p'
        self.fuzz_combine_phi.in_11.input_key = 'FWD_SYS_DRV_eta_d'
        self.fuzz_combine_phi.in_12.input_key = 'FWD_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_13.input_key = 'FWD_SYS_TYPE_TP'
        self.fuzz_combine_phi.in_14.input_key = 'WING_SYS_TYPE_LD'
        self.fuzz_combine_phi.in_15.input_key = 'WING_SYS_TYPE_f'

        ## SET VARIABLES LoD system
        self.LoD_sys.TESTMODE = 0
        self.LoD_sys.TESTPLOT = 0
        self.LoD_sys.fcl_file = 'FCL_files/LoDsys_simple_13Jun15.fcl'

        self.fuzz_combine_LD.in_1.input_key = 'SYSTEM_f'
        self.fuzz_combine_LD.in_2.input_key = 'WING_LoD'


        ## SET VARIABLES FoM system
        self.FoM_sys.weight_file = 'FCL_files/DFES_FoM/DFES_FOMdata_data(500)_nodes(160_50_50).nwf'
        self.FoM_sys.inRanges = { 'VL_SYS_e_d':           [0.0,  0.3 ],
                                  'VL_SYS_PROP_sigma':    [0.05, 0.4 ],
                                  'VL_SYS_w':             [0.,   150.],
                                  'VL_SYS_DRV_eta':       [0.5,  1.0 ],}
        self.FoM_sys.inOrder = ['VL_SYS_e_d', 'VL_SYS_w', 'VL_SYS_DRV_eta', 'VL_SYS_PROP_sigma']
        self.FoM_sys.outRanges = {  'sys_FoM' :           [0.4,  1.0 ] }
        self.FoM_sys.actType = 'sigmoid'
        self.FoM_sys.hidNodes = 160
        self.FoM_sys.inGran   = 50
        self.FoM_sys.outGran  = 50

        self.FoM_sys.TESTPLOT = 0

        self.fuzz_combine_FoM.in_1.input_key ='VL_SYS_e_d'
        self.fuzz_combine_FoM.in_2.input_key ='VL_SYS_PROP_sigma'
        self.fuzz_combine_FoM.in_3.input_key ='VL_SYS_w'
        self.fuzz_combine_FoM.in_4.input_key ='VL_SYS_DRV_eta'


        ## SET VARIABLES etaP system
        self.etaP_sys.TESTMODE = 0
        self.etaP_sys.TESTPLOT = 0
        self.etaP_sys.fcl_file = 'FCL_files/etaPsys_simple_14Aug15.fcl'

        self.fuzz_combine_etaP.in_1.input_key = 'FWD_SYS_eta_p'
        self.fuzz_combine_etaP.in_2.input_key = 'FWD_DRV_eta_d'


        ## SET VARIABLES RF systems
        self.quantifyPHI.quantRange = [0.85, 0.50]
        self.quantifyPHI.inKey = 'sys_phi'
        self.quantifySFC.quantRange = [0.75, 0.35]

        ## SET VARIABLES RF:
        #GWT:
        self.GWT_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_GWT_30_250_50.nwf'
        self.GWT_sys.inRanges = { 'SYSTEM_QUANT_PHI':   [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
                               
        self.GWT_sys.inOrder = ['VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type', 'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP', 'ENG_SYS_TYPE_SFC']
                                #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                                #    'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.GWT_sys.outRanges = {'sys_GWT' :           [5000, 50000]}
        self.GWT_sys.actType = 'sigmoid'
        self.GWT_sys.hidNodes = 250
        self.GWT_sys.inGran   = 30
        self.GWT_sys.outGran  = 50
        
        self.fuzz_combine_GWT.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_GWT.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_GWT.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_GWT.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_GWT.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_GWT.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_GWT.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_GWT.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_GWT.in_7.input_key ='SYS_type'
        #self.fuzz_combine_GWT.in_8.input_key ='SYS_tech'

        #P installed:
        self.P_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_Pin_30_250_50.nwf'
        self.P_sys.TESTPLOT = 0
        self.P_sys.inRanges = {   'SYSTEM_QUANT_PHI':   [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
        self.P_sys.inOrder = ['VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type', 'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP', 'ENG_SYS_TYPE_SFC']
                             #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                             # 'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.P_sys.outRanges = {'sys_P' :           [1000, 15000]}
        self.P_sys.actType = 'sigmoid'
        self.P_sys.hidNodes = 250
        self.P_sys.inGran   = 30
        self.P_sys.outGran  = 50
        
        self.fuzz_combine_P.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_P.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_P.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_P.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_P.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_P.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_P.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_P.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_P.in_7.input_key ='SYS_type'
        #self.fuzz_combine_P.in_8.input_key ='SYS_tech'

        #VH:
        self.VH_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_VH_40_250_50.nwf'
        self.VH_sys.inRanges = { 'SYSTEM_QUANT_PHI':    [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
        self.VH_sys.inOrder = ['VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type', 'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP', 'ENG_SYS_TYPE_SFC']
                                #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                                #'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.VH_sys.outRanges = {'sys_VH' :           [200, 500]}
        self.VH_sys.actType = 'sigmoid'
        self.VH_sys.hidNodes = 250
        self.VH_sys.inGran   = 40
        self.VH_sys.outGran  = 50
        
        self.fuzz_combine_VH.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_VH.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_VH.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_VH.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_VH.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_VH.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_VH.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_VH.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_VH.in_7.input_key ='SYS_type'

        # CONFIGURE DRIVER
        self.driver.iprint = 0 # Driver Flags

        self.driver.add_parameter('compatibility.option1') #list of options as input
        self.driver.add_parameter('compatibility.option2') #list of options as input
        self.driver.add_parameter('compatibility.option3') #list of options as input
        self.driver.add_parameter('compatibility.option4') #list of options as input
        self.driver.add_parameter('compatibility.option5') #list of options as input
        self.driver.add_parameter('compatibility.option6') #list of options as input
        self.driver.add_parameter('compatibility.option7') #list of options as input
        self.driver.add_parameter('compatibility.option8') #list of options as input
        self.driver.add_parameter('compatibility.option9') #list of options as input

        self.driver.add_response('postprocess.ranges_out') #output from system (dict)
        self.driver.add_response('postprocess.response_1') #output from system (dict)
        self.driver.add_response('postprocess.response_1_r') #output from system (dict)
        self.driver.add_response('postprocess.response_2') #output from system (dict)
        self.driver.add_response('postprocess.response_2_r') #output from system (dict)
        self.driver.add_response('postprocess.response_3') #output from system (dict)
        self.driver.add_response('postprocess.response_3_r') #output from system (dict)
        self.driver.add_response('postprocess.response_4') #output from system (dict)
        self.driver.add_response('postprocess.response_4_r') #output from system (dict)
        self.driver.add_response('postprocess.response_5') #output from system (dict)
        self.driver.add_response('postprocess.response_5_r') #output from system (dict)
        self.driver.add_response('postprocess.response_6') #output from system (dict)
        self.driver.add_response('postprocess.response_6_r') #output from system (dict)
        self.driver.add_response('postprocess.response_7') #output from system (dict)
        self.driver.add_response('postprocess.response_7_r') #output from system (dict)

        #TEST ALTERNATIVES:
        """
        tests = [   [5, 1, 1, 1, 1, 1, 1, 1, 1],
                    [5, 1, 1, 1, 1, 1, 1, 3, 1],
                    [5, 1, 1, 1, 1, 1, 2, 1, 3],]
        
        self.driver.case_inputs.compatibility.option1 = [t[0] for t in tests]
        self.driver.case_inputs.compatibility.option2 = [t[1] for t in tests]
        self.driver.case_inputs.compatibility.option3 = [t[2] for t in tests]
        self.driver.case_inputs.compatibility.option4 = [t[3] for t in tests]
        self.driver.case_inputs.compatibility.option5 = [t[4] for t in tests]
        self.driver.case_inputs.compatibility.option6 = [t[5] for t in tests]
        self.driver.case_inputs.compatibility.option7 = [t[6] for t in tests]
        self.driver.case_inputs.compatibility.option8 = [t[7] for t in tests]
        self.driver.case_inputs.compatibility.option9 = [t[8] for t in tests]
        """

        #PRE-SELECTED ALTERNATIVES:
        """
        self.driver.case_inputs.compatibility.option1 = [2, 2, 4, 4, 1, 1, 6, 4, 1, 5]
        self.driver.case_inputs.compatibility.option2 = [2, 1, 3, 3, 2, 2, 2, 3, 2, 3]
        self.driver.case_inputs.compatibility.option3 = [1, 1, 3, 1, 2, 1, 1, 1, 2, 1]
        self.driver.case_inputs.compatibility.option4 = [2, 2, 1, 2, 3, 5, 2, 1, 5, 1]
        self.driver.case_inputs.compatibility.option5 = [2, 1, 4, 3, 4, 1, 2, 1, 4, 3]
        self.driver.case_inputs.compatibility.option6 = [1, 1, 3, 1, 3, 1, 1, 1, 3, 1]
        self.driver.case_inputs.compatibility.option7 = [2, 2, 1, 2, 1, 1, 2, 1, 1, 4]
        self.driver.case_inputs.compatibility.option8 = [1, 5, 2, 4, 6, 1, 1, 4, 1, 1]
        self.driver.case_inputs.compatibility.option9 = [1, 1, 2, 1, 3, 1, 1, 1, 3, 4]
        """

        #CREATE RANDOM ALTERNTIVES:
        """
        n = 10000

        self.driver.case_inputs.compatibility.option1 = [random.randrange(1,7) for i in range(n)]
        self.driver.case_inputs.compatibility.option2 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option3 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option4 = [random.randrange(1,6) for i in range(n)]
        self.driver.case_inputs.compatibility.option5 = [random.randrange(1,5) for i in range(n)]
        self.driver.case_inputs.compatibility.option6 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option7 = [random.randrange(1,5) for i in range(n)]
        self.driver.case_inputs.compatibility.option8 = [random.randrange(1,7) for i in range(n)]
        self.driver.case_inputs.compatibility.option9 = [random.randrange(1,5) for i in range(n)]
        """

        #ALL COMPATIBLE COMBOS:
        nMax = None

        o_cases = [[] for i in range(9)]
        with open('compatCombos.csv', 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=',')
            for row in reader:
                if int(row[1]) <> 4 and int(row[2]) <> 4:         #remove bad options
                #print "case:", row
                    for i in range(len(row)):
                        o_cases[i].append(int(row[i]))
                #print "captured:", [o[-1] for o in o_cases]
        print len(o_cases[0]), "compatible combos read. Running cases..."



        #for i in range(len(o_cases)): o_cases[i] = list(reversed(o_cases[i]))[:1000]

        if nMax is None:
            self.driver.case_inputs.compatibility.option1 = o_cases[0]
            self.driver.case_inputs.compatibility.option2 = o_cases[1]
            self.driver.case_inputs.compatibility.option3 = o_cases[2]
            self.driver.case_inputs.compatibility.option4 = o_cases[3]
            self.driver.case_inputs.compatibility.option5 = o_cases[4]
            self.driver.case_inputs.compatibility.option6 = o_cases[5]
            self.driver.case_inputs.compatibility.option7 = o_cases[6]
            self.driver.case_inputs.compatibility.option8 = o_cases[7]
            self.driver.case_inputs.compatibility.option9 = o_cases[8]
        else:
            cnums = random.sample(range(len(o_cases[0])), nMax)
            self.driver.case_inputs.compatibility.option1 = [o_cases[0][i] for i in cnums]
            self.driver.case_inputs.compatibility.option2 = [o_cases[1][i] for i in cnums]
            self.driver.case_inputs.compatibility.option3 = [o_cases[2][i] for i in cnums]
            self.driver.case_inputs.compatibility.option4 = [o_cases[3][i] for i in cnums]
            self.driver.case_inputs.compatibility.option5 = [o_cases[4][i] for i in cnums]
            self.driver.case_inputs.compatibility.option6 = [o_cases[5][i] for i in cnums]
            self.driver.case_inputs.compatibility.option7 = [o_cases[6][i] for i in cnums]
            self.driver.case_inputs.compatibility.option8 = [o_cases[7][i] for i in cnums]
            self.driver.case_inputs.compatibility.option9 = [o_cases[8][i] for i in cnums]
        

        self.recorders = [CSVCaseRecorder(filename='randomCompatCases.csv')]

        self.recording_options.includes = ['compatibility.gen_num', 'compatibility.option1', 'compatibility.option2', 'compatibility.option3', 'compatibility.option4',
                                           'compatibility.option5', 'compatibility.option6', 'compatibility.option7', 'compatibility.option8', 'compatibility.option9', "compatibility.compatibility", 
                                           'postprocess.response_1', 'postprocess.response_2', 'postprocess.response_3', 'postprocess.response_4', 
                                           'postprocess.response_5', 'postprocess.response_6', 'postprocess.response_7',
                                           'postprocess.response_1_r', 'postprocess.response_2_r', 'postprocess.response_3_r', 'postprocess.response_4_r', 
                                           'postprocess.response_5_r', 'postprocess.response_6_r', 'postprocess.response_7_r',
                                           'postprocess.response_1_POS', 'postprocess.response_2_POS', 'postprocess.response_3_POS', 'postprocess.response_4_POS', 
                                           'postprocess.response_5_POS', 'postprocess.response_6_POS', 'postprocess.response_7_POS', 'postprocess.fuzzyPOS']
        
#if __name__ == "__main__":
#    None
Beispiel #2
0
    def configure(self):

        # Create Optimizer instance
        #self.add('driver', CaseIteratorDriver())
        self.add('driver', GenDriver())

        # Create component instances
        self.add('input_list', Input_List())
        self.add('postprocess', Postprocess_Fuzzy_Outputs())
        self.add('compatibility', checkCompatibility())

        #PHI SYSTEM
        self.add('fuzz_combine_phi', Build_Fuzzy_Input())
        self.add('phi_sys', Fuzzy_System())

        #Lift/Drag SYSTEM
        self.add('fuzz_combine_LD', Build_Fuzzy_Input())
        self.add('LoD_sys', Fuzzy_System())

        #FoM SYSTEM
        self.add('fuzz_combine_FoM', Build_Fuzzy_Input())
        self.add('FoM_sys', DFES())

        #Propulsive Efficiency System
        self.add('fuzz_combine_etaP', Build_Fuzzy_Input())
        self.add('etaP_sys', Fuzzy_System())

        #QUANTIFICATION
        self.add('quantifyPHI', Quantify())
        self.add('quantifySFC', Quantify())

        #RF SYSTEMs
        self.add('fuzz_combine_GWT', Build_Fuzzy_Input())
        self.add('GWT_sys', DFES())
        self.add('fuzz_combine_P', Build_Fuzzy_Input())
        self.add('P_sys', DFES())
        self.add('fuzz_combine_VH', Build_Fuzzy_Input())
        self.add('VH_sys', DFES())

        # Iteration Hierarchy
        self.driver.workflow.add([
            'compatibility', 'input_list', 'fuzz_combine_phi', 'phi_sys',
            'fuzz_combine_LD', 'LoD_sys', 'fuzz_combine_FoM', 'FoM_sys',
            'fuzz_combine_etaP', 'etaP_sys', 'quantifyPHI', 'quantifySFC',
            'GWT_sys', 'P_sys', 'VH_sys', 'postprocess'
        ])

        self.connect('compatibility.option1_out', 'input_list.option1')
        self.connect('compatibility.option2_out', 'input_list.option2')
        self.connect('compatibility.option3_out', 'input_list.option3')
        self.connect('compatibility.option4_out', 'input_list.option4')
        self.connect('compatibility.option5_out', 'input_list.option5')
        self.connect('compatibility.option6_out', 'input_list.option6')
        self.connect('compatibility.option7_out', 'input_list.option7')
        self.connect('compatibility.option8_out', 'input_list.option8')
        self.connect('compatibility.option9_out', 'input_list.option9')
        self.connect('compatibility.compatibility', 'input_list.passthrough')
        self.connect('compatibility.compatibility', 'postprocess.passthrough')
        self.connect('compatibility.incompatCount',
                     'postprocess.incompatCount')

        self.connect('compatibility.compatibility', 'phi_sys.passthrough')
        self.connect('compatibility.compatibility', 'LoD_sys.passthrough')
        self.connect('compatibility.compatibility', 'FoM_sys.passthrough')
        self.connect('compatibility.compatibility', 'etaP_sys.passthrough')
        self.connect('compatibility.compatibility', 'GWT_sys.passthrough')
        self.connect('compatibility.compatibility', 'P_sys.passthrough')
        self.connect('compatibility.compatibility', 'VH_sys.passthrough')

        self.connect('compatibility.compatibility', 'quantifyPHI.passthrough')
        self.connect('compatibility.compatibility', 'quantifySFC.passthrough')

        ## CONNECT phi system
        #connect inputs for phi system
        self.connect("input_list.VL_SYS_TYPE_phi",
                     "fuzz_combine_phi.in_1.input_value")
        self.connect("input_list.VL_SYS_TYPE_w",
                     "fuzz_combine_phi.in_2.input_value")
        self.connect("input_list.VL_SYS_TYPE_f",
                     "fuzz_combine_phi.in_3.input_value")

        self.connect("input_list.VL_SYS_PROP_w",
                     "fuzz_combine_phi.in_4.input_value")
        self.connect("input_list.VL_SYS_PROP_phi",
                     "fuzz_combine_phi.in_5.input_value")

        self.connect("input_list.VL_SYS_TECH_phi",
                     "fuzz_combine_phi.in_6.input_value")
        self.connect("input_list.VL_SYS_TECH_w",
                     "fuzz_combine_phi.in_7.input_value")
        self.connect("input_list.VL_SYS_TECH_f",
                     "fuzz_combine_phi.in_8.input_value")
        self.connect("input_list.VL_SYS_TECH_LD",
                     "fuzz_combine_phi.in_9.input_value")

        self.connect("input_list.FWD_SYS_PROP_eta_p",
                     "fuzz_combine_phi.in_10.input_value")

        self.connect("input_list.FWD_SYS_DRV_eta_d",
                     "fuzz_combine_phi.in_11.input_value")

        self.connect("input_list.FWD_SYS_TYPE_phi",
                     "fuzz_combine_phi.in_12.input_value")
        self.connect("input_list.FWD_SYS_TYPE_TP",
                     "fuzz_combine_phi.in_13.input_value")

        self.connect("input_list.WING_SYS_TYPE_LD",
                     "fuzz_combine_phi.in_14.input_value")
        self.connect("input_list.WING_SYS_TYPE_f",
                     "fuzz_combine_phi.in_15.input_value")

        self.connect("fuzz_combine_phi.system_inputs", "phi_sys.input_list")
        self.connect("fuzz_combine_phi.runFlag_out", "phi_sys.runFlag_in")

        self.postprocess.fuzzSys_in_1.mf_key = 'sys_phi'
        self.connect('phi_sys.outputs_all', 'postprocess.fuzzSys_in_1.mf_dict')

        ## CONNECT LoD System
        self.connect("input_list.SYSTEM_f", "fuzz_combine_LD.in_1.input_value")
        self.connect("input_list.WING_LoD", "fuzz_combine_LD.in_2.input_value")

        self.connect("fuzz_combine_LD.system_inputs", "LoD_sys.input_list")
        self.connect("fuzz_combine_LD.runFlag_out", "LoD_sys.runFlag_in")

        self.postprocess.fuzzSys_in_2.mf_key = 'sys_LoD'
        self.connect('LoD_sys.outputs_all', 'postprocess.fuzzSys_in_2.mf_dict')

        ## CONNECT FoM System
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_FoM.in_1.input_value")
        self.connect("input_list.VL_SYS_PROP_sigma",
                     "fuzz_combine_FoM.in_2.input_value")
        self.connect("input_list.VL_SYS_w",
                     "fuzz_combine_FoM.in_3.input_value")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_FoM.in_4.input_value")

        self.connect("fuzz_combine_FoM.system_inputs", "FoM_sys.input_list")
        self.connect("fuzz_combine_FoM.runFlag_out", "FoM_sys.runFlag_in")

        self.postprocess.fuzzSys_in_3.mf_key = 'sys_FoM'
        self.connect('FoM_sys.outputs_all', 'postprocess.fuzzSys_in_3.mf_dict')

        ## CONNECT etaP System
        self.connect("input_list.FWD_SYS_eta_p",
                     "fuzz_combine_etaP.in_1.input_value")
        self.connect("input_list.FWD_DRV_eta_d",
                     "fuzz_combine_etaP.in_2.input_value")

        self.connect("fuzz_combine_etaP.system_inputs", "etaP_sys.input_list")
        self.connect("fuzz_combine_etaP.runFlag_out", "etaP_sys.runFlag_in")

        self.postprocess.fuzzSys_in_4.mf_key = 'sys_etaP'
        self.connect('etaP_sys.outputs_all',
                     'postprocess.fuzzSys_in_4.mf_dict')

        self.postprocess.PLOTMODE = 0

        ## CONNECT RF Systems
        self.connect('phi_sys.outputs_all',
                     'quantifyPHI.inDict')  #key defined below
        self.connect('input_list.ENG_SYS_TYPE_SFC', 'quantifySFC.qualVal')

        #GWT:
        self.connect("quantifyPHI.quantVal",
                     "fuzz_combine_GWT.in_1.input_value")
        self.connect("input_list.VL_SYS_w",
                     "fuzz_combine_GWT.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_GWT.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_GWT.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_GWT.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_GWT.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_GWT.in_5.input_value")
        self.connect("quantifySFC.quantVal",
                     "fuzz_combine_GWT.in_6.input_value")
        self.connect("input_list.SYS_type",
                     "fuzz_combine_GWT.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_GWT.in_8.input_value")

        self.connect("fuzz_combine_GWT.system_inputs", "GWT_sys.input_list")
        self.connect("fuzz_combine_GWT.runFlag_out", "GWT_sys.runFlag_in")

        self.postprocess.fuzzSys_in_5.mf_key = 'sys_GWT'
        self.connect('GWT_sys.outputs_all', 'postprocess.fuzzSys_in_5.mf_dict')

        #Power Installed:
        self.connect("quantifyPHI.quantVal", "fuzz_combine_P.in_1.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_P.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_P.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_P.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_P.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_P.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_P.in_5.input_value")
        self.connect("quantifySFC.quantVal", "fuzz_combine_P.in_6.input_value")
        self.connect("input_list.SYS_type", "fuzz_combine_P.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_P.in_8.input_value")

        self.connect("fuzz_combine_P.system_inputs", "P_sys.input_list")
        self.connect("fuzz_combine_P.runFlag_out", "P_sys.runFlag_in")

        self.postprocess.fuzzSys_in_6.mf_key = 'sys_P'
        self.connect('P_sys.outputs_all', 'postprocess.fuzzSys_in_6.mf_dict')

        #VH:
        self.connect("quantifyPHI.quantVal",
                     "fuzz_combine_VH.in_1.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_VH.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_VH.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_VH.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_VH.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_VH.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_VH.in_5.input_value")
        self.connect("quantifySFC.quantVal",
                     "fuzz_combine_VH.in_6.input_value")
        self.connect("input_list.SYS_type", "fuzz_combine_VH.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_VH.in_8.input_value")

        self.connect("fuzz_combine_VH.system_inputs", "VH_sys.input_list")
        self.connect("fuzz_combine_VH.runFlag_out", "VH_sys.runFlag_in")

        self.postprocess.fuzzSys_in_7.mf_key = 'sys_VH'
        self.connect('VH_sys.outputs_all', 'postprocess.fuzzSys_in_7.mf_dict')

        ######
        # Design Variables
        self.input_list.input_file = 'data/morphInputs_13Jun15.csv'

        ## SET VARIABLES phi system
        self.phi_sys.TESTMODE = 0
        self.phi_sys.TESTPLOT = 0
        self.phi_sys.fcl_file = 'FCL_files/FRBS_phi/PHIsys_trained_5-2In9-2Out_gauss250tData_50vData_optInputsBEST_GA.fcl'

        self.fuzz_combine_phi.in_1.input_key = 'VL_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_2.input_key = 'VL_SYS_TYPE_w'
        self.fuzz_combine_phi.in_3.input_key = 'VL_SYS_TYPE_f'
        self.fuzz_combine_phi.in_4.input_key = 'VL_SYS_PROP_w'
        self.fuzz_combine_phi.in_5.input_key = 'VL_SYS_PROP_phi'
        self.fuzz_combine_phi.in_6.input_key = 'VL_SYS_TECH_phi'
        self.fuzz_combine_phi.in_7.input_key = 'VL_SYS_TECH_w'
        self.fuzz_combine_phi.in_8.input_key = 'VL_SYS_TECH_f'
        self.fuzz_combine_phi.in_9.input_key = 'VL_SYS_TECH_LD'
        self.fuzz_combine_phi.in_10.input_key = 'FWD_SYS_PROP_eta_p'
        self.fuzz_combine_phi.in_11.input_key = 'FWD_SYS_DRV_eta_d'
        self.fuzz_combine_phi.in_12.input_key = 'FWD_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_13.input_key = 'FWD_SYS_TYPE_TP'
        self.fuzz_combine_phi.in_14.input_key = 'WING_SYS_TYPE_LD'
        self.fuzz_combine_phi.in_15.input_key = 'WING_SYS_TYPE_f'

        ## SET VARIABLES LoD system
        self.LoD_sys.TESTMODE = 0
        self.LoD_sys.TESTPLOT = 0
        self.LoD_sys.fcl_file = 'FCL_files/LoDsys_simple_13Jun15.fcl'

        self.fuzz_combine_LD.in_1.input_key = 'SYSTEM_f'
        self.fuzz_combine_LD.in_2.input_key = 'WING_LoD'

        ## SET VARIABLES FoM system
        self.FoM_sys.weight_file = 'FCL_files/DFES_FoM/DFES_FOMdata_data(500)_nodes(160_50_50).nwf'
        self.FoM_sys.inRanges = {
            'VL_SYS_e_d': [0.0, 0.3],
            'VL_SYS_PROP_sigma': [0.05, 0.4],
            'VL_SYS_w': [0., 150.],
            'VL_SYS_DRV_eta': [0.5, 1.0],
        }
        self.FoM_sys.inOrder = [
            'VL_SYS_e_d', 'VL_SYS_w', 'VL_SYS_DRV_eta', 'VL_SYS_PROP_sigma'
        ]
        self.FoM_sys.outRanges = {'sys_FoM': [0.4, 1.0]}
        self.FoM_sys.actType = 'sigmoid'
        self.FoM_sys.hidNodes = 160
        self.FoM_sys.inGran = 50
        self.FoM_sys.outGran = 50

        self.FoM_sys.TESTPLOT = 0

        self.fuzz_combine_FoM.in_1.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_FoM.in_2.input_key = 'VL_SYS_PROP_sigma'
        self.fuzz_combine_FoM.in_3.input_key = 'VL_SYS_w'
        self.fuzz_combine_FoM.in_4.input_key = 'VL_SYS_DRV_eta'

        ## SET VARIABLES etaP system
        self.etaP_sys.TESTMODE = 0
        self.etaP_sys.TESTPLOT = 0
        self.etaP_sys.fcl_file = 'FCL_files/etaPsys_simple_14Aug15.fcl'

        self.fuzz_combine_etaP.in_1.input_key = 'FWD_SYS_eta_p'
        self.fuzz_combine_etaP.in_2.input_key = 'FWD_DRV_eta_d'

        ## SET VARIABLES RF systems
        self.quantifyPHI.quantRange = [0.85, 0.50]
        self.quantifyPHI.inKey = 'sys_phi'
        self.quantifySFC.quantRange = [0.75, 0.35]

        ## SET VARIABLES RF:
        #GWT:
        self.GWT_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_GWT_30_250_50.nwf'
        self.GWT_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }

        self.GWT_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        #    'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.GWT_sys.outRanges = {'sys_GWT': [5000, 50000]}
        self.GWT_sys.actType = 'sigmoid'
        self.GWT_sys.hidNodes = 250
        self.GWT_sys.inGran = 30
        self.GWT_sys.outGran = 50

        self.fuzz_combine_GWT.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_GWT.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_GWT.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_GWT.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_GWT.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_GWT.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_GWT.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_GWT.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_GWT.in_7.input_key = 'SYS_type'
        #self.fuzz_combine_GWT.in_8.input_key ='SYS_tech'

        #P installed:
        self.P_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_Pin_30_250_50.nwf'
        self.P_sys.TESTPLOT = 0
        self.P_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }
        self.P_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        # 'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.P_sys.outRanges = {'sys_P': [1000, 15000]}
        self.P_sys.actType = 'sigmoid'
        self.P_sys.hidNodes = 250
        self.P_sys.inGran = 30
        self.P_sys.outGran = 50

        self.fuzz_combine_P.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_P.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_P.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_P.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_P.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_P.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_P.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_P.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_P.in_7.input_key = 'SYS_type'
        #self.fuzz_combine_P.in_8.input_key ='SYS_tech'

        #VH:
        self.VH_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_VH_40_250_50.nwf'
        self.VH_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }
        self.VH_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        #'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.VH_sys.outRanges = {'sys_VH': [200, 500]}
        self.VH_sys.actType = 'sigmoid'
        self.VH_sys.hidNodes = 250
        self.VH_sys.inGran = 40
        self.VH_sys.outGran = 50

        self.fuzz_combine_VH.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_VH.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_VH.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_VH.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_VH.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_VH.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_VH.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_VH.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_VH.in_7.input_key = 'SYS_type'

        # CONFIGURE DRIVER
        self.driver.iprint = 0  # Driver Flags

        self.driver.add_parameter('compatibility.gen_num')
        self.driver.add_parameter(
            'compatibility.option1')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option2')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option3')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option4')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option5')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option6')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option7')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option8')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option9')  #list of options as input

        #self.driver.add_response('driver.gen_num')

        self.driver.add_objective(
            'postprocess.response_1_POS')  #output from system (dict)
        self.driver.add_objective(
            'postprocess.response_2_POS')  #output from system (dict)
        self.driver.add_objective(
            'postprocess.response_3_POS')  #output from system (dict)
        self.driver.add_objective(
            'postprocess.response_4_POS')  #output from system (dict)
        self.driver.add_objective(
            'postprocess.response_6_POS')  #output from system (dict)

        #self.driver.add_response('postprocess.ranges_out') #output from system (dict)
        #self.driver.add_response('postprocess.response_1_r') #output from system (dict)
        #self.driver.add_response('postprocess.response_2_r') #output from system (dict)
        #self.driver.add_response('postprocess.response_3_r') #output from system (dict)
        t = time.strftime("%H-%M-%S")
        self.recorders = [
            CSVCaseRecorder(filename='optCases_POS_' + t + '.csv')
        ]  #  [JSONCaseRecorder(out='opt_record.json')]  #
        self.recording_options.includes = [
            'compatibility.gen_num', 'compatibility.option1',
            'compatibility.option2', 'compatibility.option3',
            'compatibility.option4', 'compatibility.option5',
            'compatibility.option6', 'compatibility.option7',
            'compatibility.option8', 'compatibility.option9',
            "compatibility.compatibility", 'postprocess.response_1',
            'postprocess.response_2', 'postprocess.response_3',
            'postprocess.response_4', 'postprocess.response_5',
            'postprocess.response_6', 'postprocess.response_7',
            'postprocess.response_1_r', 'postprocess.response_2_r',
            'postprocess.response_3_r', 'postprocess.response_4_r',
            'postprocess.response_5_r', 'postprocess.response_6_r',
            'postprocess.response_7_r', 'postprocess.response_1_POS',
            'postprocess.response_2_POS', 'postprocess.response_3_POS',
            'postprocess.response_4_POS', 'postprocess.response_5_POS',
            'postprocess.response_6_POS', 'postprocess.response_7_POS',
            'postprocess.fuzzyPOS'
        ]

        self.driver.print_results = True


#if __name__ == "__main__":
#    None
Beispiel #3
0
    def configure(self):

        # Create Optimizer instance
        self.add('driver', CaseIteratorDriver())

        # Create component instances
        self.add('input_list', Input_List())
        self.add('postprocess', Postprocess_Fuzzy_Outputs())
        self.add('compatibility', checkCompatibility())

        #PHI SYSTEM
        self.add('fuzz_combine_phi', Build_Fuzzy_Input())
        self.add('phi_sys', Fuzzy_System())

        #Lift/Drag SYSTEM
        self.add('fuzz_combine_LD', Build_Fuzzy_Input())
        self.add('LoD_sys', Fuzzy_System())

        #FoM SYSTEM
        self.add('fuzz_combine_FoM', Build_Fuzzy_Input())
        self.add('FoM_sys', DFES())

        #Propulsive Efficiency System
        self.add('fuzz_combine_etaP', Build_Fuzzy_Input())
        self.add('etaP_sys', Fuzzy_System())

        #QUANTIFICATION
        self.add('quantifyPHI', Quantify())
        self.add('quantifySFC', Quantify())

        #RF SYSTEMs
        self.add('fuzz_combine_GWT', Build_Fuzzy_Input())
        self.add('GWT_sys', DFES())
        self.add('fuzz_combine_P', Build_Fuzzy_Input())
        self.add('P_sys', DFES())
        self.add('fuzz_combine_VH', Build_Fuzzy_Input())
        self.add('VH_sys', DFES())

        # Iteration Hierarchy
        self.driver.workflow.add([
            'compatibility', 'input_list', 'fuzz_combine_phi', 'phi_sys',
            'fuzz_combine_LD', 'LoD_sys', 'fuzz_combine_FoM', 'FoM_sys',
            'fuzz_combine_etaP', 'etaP_sys', 'quantifyPHI', 'quantifySFC',
            'GWT_sys', 'P_sys', 'VH_sys', 'postprocess'
        ])

        self.connect('compatibility.option1_out', 'input_list.option1')
        self.connect('compatibility.option2_out', 'input_list.option2')
        self.connect('compatibility.option3_out', 'input_list.option3')
        self.connect('compatibility.option4_out', 'input_list.option4')
        self.connect('compatibility.option5_out', 'input_list.option5')
        self.connect('compatibility.option6_out', 'input_list.option6')
        self.connect('compatibility.option7_out', 'input_list.option7')
        self.connect('compatibility.option8_out', 'input_list.option8')
        self.connect('compatibility.option9_out', 'input_list.option9')
        self.connect('compatibility.compatibility', 'input_list.passthrough')
        self.connect('compatibility.compatibility', 'postprocess.passthrough')
        self.connect('compatibility.incompatCount',
                     'postprocess.incompatCount')

        self.connect('compatibility.compatibility', 'phi_sys.passthrough')
        self.connect('compatibility.compatibility', 'LoD_sys.passthrough')
        self.connect('compatibility.compatibility', 'FoM_sys.passthrough')
        self.connect('compatibility.compatibility', 'etaP_sys.passthrough')
        self.connect('compatibility.compatibility', 'GWT_sys.passthrough')
        self.connect('compatibility.compatibility', 'P_sys.passthrough')
        self.connect('compatibility.compatibility', 'VH_sys.passthrough')

        self.connect('compatibility.compatibility', 'quantifyPHI.passthrough')
        self.connect('compatibility.compatibility', 'quantifySFC.passthrough')

        ## CONNECT phi system
        #connect inputs for phi system
        self.connect("input_list.VL_SYS_TYPE_phi",
                     "fuzz_combine_phi.in_1.input_value")
        self.connect("input_list.VL_SYS_TYPE_w",
                     "fuzz_combine_phi.in_2.input_value")
        self.connect("input_list.VL_SYS_TYPE_f",
                     "fuzz_combine_phi.in_3.input_value")

        self.connect("input_list.VL_SYS_PROP_w",
                     "fuzz_combine_phi.in_4.input_value")
        self.connect("input_list.VL_SYS_PROP_phi",
                     "fuzz_combine_phi.in_5.input_value")

        self.connect("input_list.VL_SYS_TECH_phi",
                     "fuzz_combine_phi.in_6.input_value")
        self.connect("input_list.VL_SYS_TECH_w",
                     "fuzz_combine_phi.in_7.input_value")
        self.connect("input_list.VL_SYS_TECH_f",
                     "fuzz_combine_phi.in_8.input_value")
        self.connect("input_list.VL_SYS_TECH_LD",
                     "fuzz_combine_phi.in_9.input_value")

        self.connect("input_list.FWD_SYS_PROP_eta_p",
                     "fuzz_combine_phi.in_10.input_value")

        self.connect("input_list.FWD_SYS_DRV_eta_d",
                     "fuzz_combine_phi.in_11.input_value")

        self.connect("input_list.FWD_SYS_TYPE_phi",
                     "fuzz_combine_phi.in_12.input_value")
        self.connect("input_list.FWD_SYS_TYPE_TP",
                     "fuzz_combine_phi.in_13.input_value")

        self.connect("input_list.WING_SYS_TYPE_LD",
                     "fuzz_combine_phi.in_14.input_value")
        self.connect("input_list.WING_SYS_TYPE_f",
                     "fuzz_combine_phi.in_15.input_value")

        self.connect("fuzz_combine_phi.system_inputs", "phi_sys.input_list")
        self.connect("fuzz_combine_phi.runFlag_out", "phi_sys.runFlag_in")

        self.postprocess.fuzzSys_in_1.mf_key = 'sys_phi'
        self.connect('phi_sys.outputs_all', 'postprocess.fuzzSys_in_1.mf_dict')

        ## CONNECT LoD System
        self.connect("input_list.SYSTEM_f", "fuzz_combine_LD.in_1.input_value")
        self.connect("input_list.WING_LoD", "fuzz_combine_LD.in_2.input_value")

        self.connect("fuzz_combine_LD.system_inputs", "LoD_sys.input_list")
        self.connect("fuzz_combine_LD.runFlag_out", "LoD_sys.runFlag_in")

        self.postprocess.fuzzSys_in_2.mf_key = 'sys_LoD'
        self.connect('LoD_sys.outputs_all', 'postprocess.fuzzSys_in_2.mf_dict')

        ## CONNECT FoM System
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_FoM.in_1.input_value")
        self.connect("input_list.VL_SYS_PROP_sigma",
                     "fuzz_combine_FoM.in_2.input_value")
        self.connect("input_list.VL_SYS_w",
                     "fuzz_combine_FoM.in_3.input_value")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_FoM.in_4.input_value")

        self.connect("fuzz_combine_FoM.system_inputs", "FoM_sys.input_list")
        self.connect("fuzz_combine_FoM.runFlag_out", "FoM_sys.runFlag_in")

        self.postprocess.fuzzSys_in_3.mf_key = 'sys_FoM'
        self.connect('FoM_sys.outputs_all', 'postprocess.fuzzSys_in_3.mf_dict')

        ## CONNECT etaP System
        self.connect("input_list.FWD_SYS_eta_p",
                     "fuzz_combine_etaP.in_1.input_value")
        self.connect("input_list.FWD_DRV_eta_d",
                     "fuzz_combine_etaP.in_2.input_value")

        self.connect("fuzz_combine_etaP.system_inputs", "etaP_sys.input_list")
        self.connect("fuzz_combine_etaP.runFlag_out", "etaP_sys.runFlag_in")

        self.postprocess.fuzzSys_in_4.mf_key = 'sys_etaP'
        self.connect('etaP_sys.outputs_all',
                     'postprocess.fuzzSys_in_4.mf_dict')

        self.postprocess.PLOTMODE = 0

        ## CONNECT RF Systems
        self.connect('phi_sys.outputs_all',
                     'quantifyPHI.inDict')  #key defined below
        self.connect('input_list.ENG_SYS_TYPE_SFC', 'quantifySFC.qualVal')

        #GWT:
        self.connect("quantifyPHI.quantVal",
                     "fuzz_combine_GWT.in_1.input_value")
        self.connect("input_list.VL_SYS_w",
                     "fuzz_combine_GWT.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_GWT.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_GWT.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_GWT.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_GWT.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_GWT.in_5.input_value")
        self.connect("quantifySFC.quantVal",
                     "fuzz_combine_GWT.in_6.input_value")
        self.connect("input_list.SYS_type",
                     "fuzz_combine_GWT.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_GWT.in_8.input_value")

        self.connect("fuzz_combine_GWT.system_inputs", "GWT_sys.input_list")
        self.connect("fuzz_combine_GWT.runFlag_out", "GWT_sys.runFlag_in")

        self.postprocess.fuzzSys_in_5.mf_key = 'sys_GWT'
        self.connect('GWT_sys.outputs_all', 'postprocess.fuzzSys_in_5.mf_dict')

        #Power Installed:
        self.connect("quantifyPHI.quantVal", "fuzz_combine_P.in_1.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_P.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_P.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_P.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_P.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_P.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_P.in_5.input_value")
        self.connect("quantifySFC.quantVal", "fuzz_combine_P.in_6.input_value")
        self.connect("input_list.SYS_type", "fuzz_combine_P.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_P.in_8.input_value")

        self.connect("fuzz_combine_P.system_inputs", "P_sys.input_list")
        self.connect("fuzz_combine_P.runFlag_out", "P_sys.runFlag_in")

        self.postprocess.fuzzSys_in_6.mf_key = 'sys_P'
        self.connect('P_sys.outputs_all', 'postprocess.fuzzSys_in_6.mf_dict')

        #VH:
        self.connect("quantifyPHI.quantVal",
                     "fuzz_combine_VH.in_1.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_VH.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS",
                     "fuzz_combine_VH.in_3.input_value")
        self.connect("etaP_sys.outputs_all",
                     "fuzz_combine_VH.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d",
                     "fuzz_combine_VH.in_4.input_value")
        self.connect("FoM_sys.outputs_all",
                     "fuzz_combine_VH.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",
                     "fuzz_combine_VH.in_5.input_value")
        self.connect("quantifySFC.quantVal",
                     "fuzz_combine_VH.in_6.input_value")
        self.connect("input_list.SYS_type", "fuzz_combine_VH.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_VH.in_8.input_value")

        self.connect("fuzz_combine_VH.system_inputs", "VH_sys.input_list")
        self.connect("fuzz_combine_VH.runFlag_out", "VH_sys.runFlag_in")

        self.postprocess.fuzzSys_in_7.mf_key = 'sys_VH'
        self.connect('VH_sys.outputs_all', 'postprocess.fuzzSys_in_7.mf_dict')

        ######
        # Design Variables
        self.input_list.input_file = 'data/morphInputs_13Jun15.csv'

        ## SET VARIABLES phi system
        self.phi_sys.TESTMODE = 0
        self.phi_sys.TESTPLOT = 0
        self.phi_sys.fcl_file = 'FCL_files/FRBS_phi/PHIsys_trained_5-2In9-2Out_gauss250tData_50vData_optInputsBEST_GA.fcl'

        self.fuzz_combine_phi.in_1.input_key = 'VL_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_2.input_key = 'VL_SYS_TYPE_w'
        self.fuzz_combine_phi.in_3.input_key = 'VL_SYS_TYPE_f'
        self.fuzz_combine_phi.in_4.input_key = 'VL_SYS_PROP_w'
        self.fuzz_combine_phi.in_5.input_key = 'VL_SYS_PROP_phi'
        self.fuzz_combine_phi.in_6.input_key = 'VL_SYS_TECH_phi'
        self.fuzz_combine_phi.in_7.input_key = 'VL_SYS_TECH_w'
        self.fuzz_combine_phi.in_8.input_key = 'VL_SYS_TECH_f'
        self.fuzz_combine_phi.in_9.input_key = 'VL_SYS_TECH_LD'
        self.fuzz_combine_phi.in_10.input_key = 'FWD_SYS_PROP_eta_p'
        self.fuzz_combine_phi.in_11.input_key = 'FWD_SYS_DRV_eta_d'
        self.fuzz_combine_phi.in_12.input_key = 'FWD_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_13.input_key = 'FWD_SYS_TYPE_TP'
        self.fuzz_combine_phi.in_14.input_key = 'WING_SYS_TYPE_LD'
        self.fuzz_combine_phi.in_15.input_key = 'WING_SYS_TYPE_f'

        ## SET VARIABLES LoD system
        self.LoD_sys.TESTMODE = 0
        self.LoD_sys.TESTPLOT = 0
        self.LoD_sys.fcl_file = 'FCL_files/LoDsys_simple_13Jun15.fcl'

        self.fuzz_combine_LD.in_1.input_key = 'SYSTEM_f'
        self.fuzz_combine_LD.in_2.input_key = 'WING_LoD'

        ## SET VARIABLES FoM system
        self.FoM_sys.weight_file = 'FCL_files/DFES_FoM/DFES_FOMdata_data(500)_nodes(160_50_50).nwf'
        self.FoM_sys.inRanges = {
            'VL_SYS_e_d': [0.0, 0.3],
            'VL_SYS_PROP_sigma': [0.05, 0.4],
            'VL_SYS_w': [0., 150.],
            'VL_SYS_DRV_eta': [0.5, 1.0],
        }
        self.FoM_sys.inOrder = [
            'VL_SYS_e_d', 'VL_SYS_w', 'VL_SYS_DRV_eta', 'VL_SYS_PROP_sigma'
        ]
        self.FoM_sys.outRanges = {'sys_FoM': [0.4, 1.0]}
        self.FoM_sys.actType = 'sigmoid'
        self.FoM_sys.hidNodes = 160
        self.FoM_sys.inGran = 50
        self.FoM_sys.outGran = 50

        self.FoM_sys.TESTPLOT = 0

        self.fuzz_combine_FoM.in_1.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_FoM.in_2.input_key = 'VL_SYS_PROP_sigma'
        self.fuzz_combine_FoM.in_3.input_key = 'VL_SYS_w'
        self.fuzz_combine_FoM.in_4.input_key = 'VL_SYS_DRV_eta'

        ## SET VARIABLES etaP system
        self.etaP_sys.TESTMODE = 0
        self.etaP_sys.TESTPLOT = 0
        self.etaP_sys.fcl_file = 'FCL_files/etaPsys_simple_14Aug15.fcl'

        self.fuzz_combine_etaP.in_1.input_key = 'FWD_SYS_eta_p'
        self.fuzz_combine_etaP.in_2.input_key = 'FWD_DRV_eta_d'

        ## SET VARIABLES RF systems
        self.quantifyPHI.quantRange = [0.85, 0.50]
        self.quantifyPHI.inKey = 'sys_phi'
        self.quantifySFC.quantRange = [0.75, 0.35]

        ## SET VARIABLES RF:
        #GWT:
        self.GWT_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_GWT_30_250_50.nwf'
        self.GWT_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }

        self.GWT_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        #    'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.GWT_sys.outRanges = {'sys_GWT': [5000, 50000]}
        self.GWT_sys.actType = 'sigmoid'
        self.GWT_sys.hidNodes = 250
        self.GWT_sys.inGran = 30
        self.GWT_sys.outGran = 50

        self.fuzz_combine_GWT.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_GWT.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_GWT.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_GWT.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_GWT.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_GWT.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_GWT.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_GWT.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_GWT.in_7.input_key = 'SYS_type'
        #self.fuzz_combine_GWT.in_8.input_key ='SYS_tech'

        #P installed:
        self.P_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_Pin_30_250_50.nwf'
        self.P_sys.TESTPLOT = 0
        self.P_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }
        self.P_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        # 'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.P_sys.outRanges = {'sys_P': [1000, 15000]}
        self.P_sys.actType = 'sigmoid'
        self.P_sys.hidNodes = 250
        self.P_sys.inGran = 30
        self.P_sys.outGran = 50

        self.fuzz_combine_P.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_P.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_P.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_P.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_P.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_P.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_P.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_P.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_P.in_7.input_key = 'SYS_type'
        #self.fuzz_combine_P.in_8.input_key ='SYS_tech'

        #VH:
        self.VH_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_VH_40_250_50.nwf'
        self.VH_sys.inRanges = {
            'SYSTEM_QUANT_PHI': [0.5, 0.85],
            'VL_SYS_w': [1., 150.],
            'WING_SYS_TYPE_WS': [15., 300.],
            'sys_etaP': [0.6, 1.0],
            'VL_SYS_DRV_eta_d': [0.7, 1.0],
            'sys_FoM': [0.3, 1.0],
            'VL_SYS_e_d': [0.0, 0.3],
            'ENG_SYS_TYPE_SFC': [0.35, 0.75],
            'SYS_type': [0.5, 3.5],
        }
        self.VH_sys.inOrder = [
            'VL_SYS_e_d', 'WING_SYS_TYPE_WS', 'SYSTEM_QUANT_PHI', 'SYS_type',
            'VL_SYS_DRV_eta_d', 'sys_FoM', 'VL_SYS_w', 'sys_etaP',
            'ENG_SYS_TYPE_SFC'
        ]
        #['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
        #'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.VH_sys.outRanges = {'sys_VH': [200, 500]}
        self.VH_sys.actType = 'sigmoid'
        self.VH_sys.hidNodes = 250
        self.VH_sys.inGran = 40
        self.VH_sys.outGran = 50

        self.fuzz_combine_VH.in_1.input_key = 'SYSTEM_QUANT_PHI'
        self.fuzz_combine_VH.in_2.input_key = 'VL_SYS_w'
        self.fuzz_combine_VH.in_3.input_key = 'WING_SYS_TYPE_WS'
        self.fuzz_combine_VH.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_VH.in_4.input_key = 'VL_SYS_DRV_eta_d'
        self.fuzz_combine_VH.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_VH.in_5.input_key = 'VL_SYS_e_d'
        self.fuzz_combine_VH.in_6.input_key = 'ENG_SYS_TYPE_SFC'
        self.fuzz_combine_VH.in_7.input_key = 'SYS_type'

        # CONFIGURE DRIVER
        self.driver.iprint = 0  # Driver Flags

        self.driver.add_parameter(
            'compatibility.option1')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option2')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option3')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option4')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option5')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option6')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option7')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option8')  #list of options as input
        self.driver.add_parameter(
            'compatibility.option9')  #list of options as input

        self.driver.add_response(
            'postprocess.ranges_out')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_1')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_1_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_2')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_2_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_3')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_3_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_4')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_4_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_5')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_5_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_6')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_6_r')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_7')  #output from system (dict)
        self.driver.add_response(
            'postprocess.response_7_r')  #output from system (dict)

        #TEST ALTERNATIVES:
        """
        tests = [   [5, 1, 1, 1, 1, 1, 1, 1, 1],
                    [5, 1, 1, 1, 1, 1, 1, 3, 1],
                    [5, 1, 1, 1, 1, 1, 2, 1, 3],]
        
        self.driver.case_inputs.compatibility.option1 = [t[0] for t in tests]
        self.driver.case_inputs.compatibility.option2 = [t[1] for t in tests]
        self.driver.case_inputs.compatibility.option3 = [t[2] for t in tests]
        self.driver.case_inputs.compatibility.option4 = [t[3] for t in tests]
        self.driver.case_inputs.compatibility.option5 = [t[4] for t in tests]
        self.driver.case_inputs.compatibility.option6 = [t[5] for t in tests]
        self.driver.case_inputs.compatibility.option7 = [t[6] for t in tests]
        self.driver.case_inputs.compatibility.option8 = [t[7] for t in tests]
        self.driver.case_inputs.compatibility.option9 = [t[8] for t in tests]
        """

        #PRE-SELECTED ALTERNATIVES:
        """
        self.driver.case_inputs.compatibility.option1 = [2, 2, 4, 4, 1, 1, 6, 4, 1, 5]
        self.driver.case_inputs.compatibility.option2 = [2, 1, 3, 3, 2, 2, 2, 3, 2, 3]
        self.driver.case_inputs.compatibility.option3 = [1, 1, 3, 1, 2, 1, 1, 1, 2, 1]
        self.driver.case_inputs.compatibility.option4 = [2, 2, 1, 2, 3, 5, 2, 1, 5, 1]
        self.driver.case_inputs.compatibility.option5 = [2, 1, 4, 3, 4, 1, 2, 1, 4, 3]
        self.driver.case_inputs.compatibility.option6 = [1, 1, 3, 1, 3, 1, 1, 1, 3, 1]
        self.driver.case_inputs.compatibility.option7 = [2, 2, 1, 2, 1, 1, 2, 1, 1, 4]
        self.driver.case_inputs.compatibility.option8 = [1, 5, 2, 4, 6, 1, 1, 4, 1, 1]
        self.driver.case_inputs.compatibility.option9 = [1, 1, 2, 1, 3, 1, 1, 1, 3, 4]
        """

        #CREATE RANDOM ALTERNTIVES:
        """
        n = 10000

        self.driver.case_inputs.compatibility.option1 = [random.randrange(1,7) for i in range(n)]
        self.driver.case_inputs.compatibility.option2 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option3 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option4 = [random.randrange(1,6) for i in range(n)]
        self.driver.case_inputs.compatibility.option5 = [random.randrange(1,5) for i in range(n)]
        self.driver.case_inputs.compatibility.option6 = [random.randrange(1,4) for i in range(n)]
        self.driver.case_inputs.compatibility.option7 = [random.randrange(1,5) for i in range(n)]
        self.driver.case_inputs.compatibility.option8 = [random.randrange(1,7) for i in range(n)]
        self.driver.case_inputs.compatibility.option9 = [random.randrange(1,5) for i in range(n)]
        """

        #ALL COMPATIBLE COMBOS:
        nMax = None

        o_cases = [[] for i in range(9)]
        with open('compatCombos.csv', 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=',')
            for row in reader:
                if int(row[1]) <> 4 and int(row[2]) <> 4:  #remove bad options
                    #print "case:", row
                    for i in range(len(row)):
                        o_cases[i].append(int(row[i]))
                #print "captured:", [o[-1] for o in o_cases]
        print len(o_cases[0]), "compatible combos read. Running cases..."

        #for i in range(len(o_cases)): o_cases[i] = list(reversed(o_cases[i]))[:1000]

        if nMax is None:
            self.driver.case_inputs.compatibility.option1 = o_cases[0]
            self.driver.case_inputs.compatibility.option2 = o_cases[1]
            self.driver.case_inputs.compatibility.option3 = o_cases[2]
            self.driver.case_inputs.compatibility.option4 = o_cases[3]
            self.driver.case_inputs.compatibility.option5 = o_cases[4]
            self.driver.case_inputs.compatibility.option6 = o_cases[5]
            self.driver.case_inputs.compatibility.option7 = o_cases[6]
            self.driver.case_inputs.compatibility.option8 = o_cases[7]
            self.driver.case_inputs.compatibility.option9 = o_cases[8]
        else:
            cnums = random.sample(range(len(o_cases[0])), nMax)
            self.driver.case_inputs.compatibility.option1 = [
                o_cases[0][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option2 = [
                o_cases[1][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option3 = [
                o_cases[2][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option4 = [
                o_cases[3][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option5 = [
                o_cases[4][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option6 = [
                o_cases[5][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option7 = [
                o_cases[6][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option8 = [
                o_cases[7][i] for i in cnums
            ]
            self.driver.case_inputs.compatibility.option9 = [
                o_cases[8][i] for i in cnums
            ]

        self.recorders = [CSVCaseRecorder(filename='randomCompatCases.csv')]

        self.recording_options.includes = [
            'compatibility.gen_num', 'compatibility.option1',
            'compatibility.option2', 'compatibility.option3',
            'compatibility.option4', 'compatibility.option5',
            'compatibility.option6', 'compatibility.option7',
            'compatibility.option8', 'compatibility.option9',
            "compatibility.compatibility", 'postprocess.response_1',
            'postprocess.response_2', 'postprocess.response_3',
            'postprocess.response_4', 'postprocess.response_5',
            'postprocess.response_6', 'postprocess.response_7',
            'postprocess.response_1_r', 'postprocess.response_2_r',
            'postprocess.response_3_r', 'postprocess.response_4_r',
            'postprocess.response_5_r', 'postprocess.response_6_r',
            'postprocess.response_7_r', 'postprocess.response_1_POS',
            'postprocess.response_2_POS', 'postprocess.response_3_POS',
            'postprocess.response_4_POS', 'postprocess.response_5_POS',
            'postprocess.response_6_POS', 'postprocess.response_7_POS',
            'postprocess.fuzzyPOS'
        ]


#if __name__ == "__main__":
#    None
    def configure(self):

        # Create Optimizer instance
        #self.add('driver', CaseIteratorDriver())
        self.add('driver', GenDriver())
        
        # Create component instances
        self.add('input_list', Input_List())
        self.add('postprocess', Postprocess_Fuzzy_Outputs())
        self.add('compatibility', checkCompatibility())

        #PHI SYSTEM
        self.add('fuzz_combine_phi', Build_Fuzzy_Input())
        self.add('phi_sys', Fuzzy_System())

        #Lift/Drag SYSTEM
        self.add('fuzz_combine_LD', Build_Fuzzy_Input())
        self.add('LoD_sys', Fuzzy_System())

        #FoM SYSTEM
        self.add('fuzz_combine_FoM', Build_Fuzzy_Input())
        self.add('FoM_sys', DFES())

        #Propulsive Efficiency System
        self.add('fuzz_combine_etaP', Build_Fuzzy_Input())
        self.add('etaP_sys', Fuzzy_System())

        #QUANTIFICATION
        self.add('quantifyPHI', Quantify())
        self.add('quantifySFC', Quantify())

        #RF SYSTEMs
        self.add('fuzz_combine_GWT', Build_Fuzzy_Input())
        self.add('GWT_sys', DFES())
        self.add('fuzz_combine_P', Build_Fuzzy_Input())
        self.add('P_sys', DFES())
        self.add('fuzz_combine_VH', Build_Fuzzy_Input())
        self.add('VH_sys', DFES())
        

        # Iteration Hierarchy
        self.driver.workflow.add([  'compatibility', 'input_list',
                                    'fuzz_combine_phi', 'phi_sys',
                                    'fuzz_combine_LD',  'LoD_sys', 
                                    'fuzz_combine_FoM', 'FoM_sys', 
                                    'fuzz_combine_etaP', 'etaP_sys',
                                    'quantifyPHI', 'quantifySFC', 
                                    'GWT_sys', 'P_sys', 'VH_sys',
                                    'postprocess' ])

        self.connect('compatibility.option1_out', 'input_list.option1')
        self.connect('compatibility.option2_out', 'input_list.option2')
        self.connect('compatibility.option3_out', 'input_list.option3')
        self.connect('compatibility.option4_out', 'input_list.option4')
        self.connect('compatibility.option5_out', 'input_list.option5')
        self.connect('compatibility.option6_out', 'input_list.option6')
        self.connect('compatibility.option7_out', 'input_list.option7')
        self.connect('compatibility.option8_out', 'input_list.option8')
        self.connect('compatibility.option9_out', 'input_list.option9')
        self.connect('compatibility.compatibility', 'input_list.passthrough')
        self.connect('compatibility.compatibility', 'postprocess.passthrough')
        self.connect('compatibility.incompatCount', 'postprocess.incompatCount')

        self.connect('compatibility.compatibility', 'phi_sys.passthrough')
        self.connect('compatibility.compatibility', 'LoD_sys.passthrough')
        self.connect('compatibility.compatibility', 'FoM_sys.passthrough')
        self.connect('compatibility.compatibility', 'etaP_sys.passthrough')
        self.connect('compatibility.compatibility', 'GWT_sys.passthrough')
        self.connect('compatibility.compatibility', 'P_sys.passthrough')
        self.connect('compatibility.compatibility', 'VH_sys.passthrough')

        self.connect('compatibility.compatibility', 'quantifyPHI.passthrough')
        self.connect('compatibility.compatibility', 'quantifySFC.passthrough')


        ## CONNECT phi system
        #connect inputs for phi system
        self.connect("input_list.VL_SYS_TYPE_phi", "fuzz_combine_phi.in_1.input_value")
        self.connect("input_list.VL_SYS_TYPE_w", "fuzz_combine_phi.in_2.input_value")
        self.connect("input_list.VL_SYS_TYPE_f", "fuzz_combine_phi.in_3.input_value")
        
        self.connect("input_list.VL_SYS_PROP_w", "fuzz_combine_phi.in_4.input_value")
        self.connect("input_list.VL_SYS_PROP_phi", "fuzz_combine_phi.in_5.input_value")
        
        self.connect("input_list.VL_SYS_TECH_phi", "fuzz_combine_phi.in_6.input_value")
        self.connect("input_list.VL_SYS_TECH_w", "fuzz_combine_phi.in_7.input_value")
        self.connect("input_list.VL_SYS_TECH_f", "fuzz_combine_phi.in_8.input_value")
        self.connect("input_list.VL_SYS_TECH_LD", "fuzz_combine_phi.in_9.input_value")
        
        self.connect("input_list.FWD_SYS_PROP_eta_p", "fuzz_combine_phi.in_10.input_value")
        
        self.connect("input_list.FWD_SYS_DRV_eta_d", "fuzz_combine_phi.in_11.input_value")
        
        self.connect("input_list.FWD_SYS_TYPE_phi", "fuzz_combine_phi.in_12.input_value")
        self.connect("input_list.FWD_SYS_TYPE_TP", "fuzz_combine_phi.in_13.input_value")
        
        self.connect("input_list.WING_SYS_TYPE_LD", "fuzz_combine_phi.in_14.input_value")
        self.connect("input_list.WING_SYS_TYPE_f", "fuzz_combine_phi.in_15.input_value")


        self.connect("fuzz_combine_phi.system_inputs","phi_sys.input_list")
        self.connect("fuzz_combine_phi.runFlag_out", "phi_sys.runFlag_in")

        self.postprocess.fuzzSys_in_1.mf_key = 'sys_phi'
        self.connect('phi_sys.outputs_all', 'postprocess.fuzzSys_in_1.mf_dict')


        ## CONNECT LoD System
        self.connect("input_list.SYSTEM_f", "fuzz_combine_LD.in_1.input_value")
        self.connect("input_list.WING_LoD", "fuzz_combine_LD.in_2.input_value")
        
        self.connect("fuzz_combine_LD.system_inputs", "LoD_sys.input_list")
        self.connect("fuzz_combine_LD.runFlag_out", "LoD_sys.runFlag_in")

        self.postprocess.fuzzSys_in_2.mf_key = 'sys_LoD'
        self.connect('LoD_sys.outputs_all', 'postprocess.fuzzSys_in_2.mf_dict')


        ## CONNECT FoM System
        self.connect("input_list.VL_SYS_e_d", "fuzz_combine_FoM.in_1.input_value")
        self.connect("input_list.VL_SYS_PROP_sigma", "fuzz_combine_FoM.in_2.input_value")
        self.connect("input_list.VL_SYS_w", "fuzz_combine_FoM.in_3.input_value")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_FoM.in_4.input_value")
   
        self.connect("fuzz_combine_FoM.system_inputs","FoM_sys.input_list")
        self.connect("fuzz_combine_FoM.runFlag_out", "FoM_sys.runFlag_in")

        self.postprocess.fuzzSys_in_3.mf_key = 'sys_FoM'
        self.connect('FoM_sys.outputs_all', 'postprocess.fuzzSys_in_3.mf_dict')


        ## CONNECT etaP System
        self.connect("input_list.FWD_SYS_eta_p", "fuzz_combine_etaP.in_1.input_value")
        self.connect("input_list.FWD_DRV_eta_d", "fuzz_combine_etaP.in_2.input_value")
        
        self.connect("fuzz_combine_etaP.system_inputs", "etaP_sys.input_list")
        self.connect("fuzz_combine_etaP.runFlag_out", "etaP_sys.runFlag_in")

        self.postprocess.fuzzSys_in_4.mf_key = 'sys_etaP'
        self.connect('etaP_sys.outputs_all', 'postprocess.fuzzSys_in_4.mf_dict')

        self.postprocess.PLOTMODE = 0

        ## CONNECT RF Systems
        self.connect('phi_sys.outputs_all', 'quantifyPHI.inDict') #key defined below
        self.connect('input_list.ENG_SYS_TYPE_SFC', 'quantifySFC.qualVal')

        #GWT:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_GWT.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_GWT.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_GWT.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_GWT.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_GWT.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_GWT.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_GWT.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_GWT.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_GWT.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_GWT.in_8.input_value")

        self.connect("fuzz_combine_GWT.system_inputs","GWT_sys.input_list")
        self.connect("fuzz_combine_GWT.runFlag_out", "GWT_sys.runFlag_in")

        self.postprocess.fuzzSys_in_5.mf_key = 'sys_GWT'
        self.connect('GWT_sys.outputs_all', 'postprocess.fuzzSys_in_5.mf_dict')

        #Power Installed:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_P.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_P.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_P.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_P.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_P.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_P.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_P.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_P.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_P.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_P.in_8.input_value")

        self.connect("fuzz_combine_P.system_inputs","P_sys.input_list")
        self.connect("fuzz_combine_P.runFlag_out", "P_sys.runFlag_in")

        self.postprocess.fuzzSys_in_6.mf_key = 'sys_P'
        self.connect('P_sys.outputs_all', 'postprocess.fuzzSys_in_6.mf_dict') 

        #VH:
        self.connect("quantifyPHI.quantVal",        "fuzz_combine_VH.in_1.input_value")
        self.connect("input_list.VL_SYS_w",         "fuzz_combine_VH.in_2.input_value")
        self.connect("input_list.WING_SYS_TYPE_WS", "fuzz_combine_VH.in_3.input_value")
        self.connect("etaP_sys.outputs_all",        "fuzz_combine_VH.inDict_1.input_dict")
        self.connect("input_list.VL_SYS_DRV_eta_d", "fuzz_combine_VH.in_4.input_value")
        self.connect("FoM_sys.outputs_all",         "fuzz_combine_VH.inDict_2.input_dict")
        self.connect("input_list.VL_SYS_e_d",       "fuzz_combine_VH.in_5.input_value")
        self.connect("quantifySFC.quantVal",        "fuzz_combine_VH.in_6.input_value")
        self.connect("input_list.SYS_type",         "fuzz_combine_VH.in_7.input_value")
        #self.connect("input_list.SYS_tech",         "fuzz_combine_VH.in_8.input_value")

        self.connect("fuzz_combine_VH.system_inputs","VH_sys.input_list")
        self.connect("fuzz_combine_VH.runFlag_out", "VH_sys.runFlag_in")

        self.postprocess.fuzzSys_in_7.mf_key = 'sys_VH'
        self.connect('VH_sys.outputs_all', 'postprocess.fuzzSys_in_7.mf_dict')       


        ######
        # Design Variables
        self.input_list.input_file = 'data/morphInputs_13Jun15.csv'

        ## SET VARIABLES phi system
        self.phi_sys.TESTMODE = 0
        self.phi_sys.TESTPLOT = 0
        self.phi_sys.fcl_file = 'FCL_files/FRBS_phi/PHIsys_trained_5-2In9-2Out_gauss250tData_50vData_optInputsBEST_GA.fcl'    

        self.fuzz_combine_phi.in_1.input_key = 'VL_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_2.input_key = 'VL_SYS_TYPE_w'
        self.fuzz_combine_phi.in_3.input_key = 'VL_SYS_TYPE_f'
        self.fuzz_combine_phi.in_4.input_key = 'VL_SYS_PROP_w'
        self.fuzz_combine_phi.in_5.input_key = 'VL_SYS_PROP_phi'
        self.fuzz_combine_phi.in_6.input_key = 'VL_SYS_TECH_phi'
        self.fuzz_combine_phi.in_7.input_key = 'VL_SYS_TECH_w'
        self.fuzz_combine_phi.in_8.input_key = 'VL_SYS_TECH_f'
        self.fuzz_combine_phi.in_9.input_key = 'VL_SYS_TECH_LD'
        self.fuzz_combine_phi.in_10.input_key = 'FWD_SYS_PROP_eta_p'
        self.fuzz_combine_phi.in_11.input_key = 'FWD_SYS_DRV_eta_d'
        self.fuzz_combine_phi.in_12.input_key = 'FWD_SYS_TYPE_phi'
        self.fuzz_combine_phi.in_13.input_key = 'FWD_SYS_TYPE_TP'
        self.fuzz_combine_phi.in_14.input_key = 'WING_SYS_TYPE_LD'
        self.fuzz_combine_phi.in_15.input_key = 'WING_SYS_TYPE_f'

        ## SET VARIABLES LoD system
        self.LoD_sys.TESTMODE = 0
        self.LoD_sys.TESTPLOT = 0
        self.LoD_sys.fcl_file = 'FCL_files/LoDsys_simple_13Jun15.fcl'

        self.fuzz_combine_LD.in_1.input_key = 'SYSTEM_f'
        self.fuzz_combine_LD.in_2.input_key = 'WING_LoD'


        ## SET VARIABLES FoM system
        self.FoM_sys.weight_file = 'FCL_files/DFES_FoM/DFES_FOMdata_data(500)_nodes(160_50_50).nwf'
        self.FoM_sys.inRanges = { 'VL_SYS_e_d':           [0.0,  0.3 ],
                                  'VL_SYS_PROP_sigma':    [0.05, 0.4 ],
                                  'VL_SYS_w':             [0.,   150.],
                                  'VL_SYS_DRV_eta':       [0.5,  1.0 ],}
        self.FoM_sys.inOrder = ['VL_SYS_e_d', 'VL_SYS_w', 'VL_SYS_DRV_eta', 'VL_SYS_PROP_sigma']
        self.FoM_sys.outRanges = {  'sys_FoM' :           [0.4,  1.0 ] }
        self.FoM_sys.actType = 'sigmoid'
        self.FoM_sys.hidNodes = 160
        self.FoM_sys.inGran   = 50
        self.FoM_sys.outGran  = 50

        self.FoM_sys.TESTPLOT = 0

        self.fuzz_combine_FoM.in_1.input_key ='VL_SYS_e_d'
        self.fuzz_combine_FoM.in_2.input_key ='VL_SYS_PROP_sigma'
        self.fuzz_combine_FoM.in_3.input_key ='VL_SYS_w'
        self.fuzz_combine_FoM.in_4.input_key ='VL_SYS_DRV_eta'


        ## SET VARIABLES etaP system
        self.etaP_sys.TESTMODE = 0
        self.etaP_sys.TESTPLOT = 0
        self.etaP_sys.fcl_file = 'FCL_files/etaPsys_simple_14Aug15.fcl'

        self.fuzz_combine_etaP.in_1.input_key = 'FWD_SYS_eta_p'
        self.fuzz_combine_etaP.in_2.input_key = 'FWD_DRV_eta_d'


        ## SET VARIABLES RF systems
        self.quantifyPHI.quantRange = [0.85, 0.50]
        self.quantifyPHI.inKey = 'sys_phi'
        self.quantifySFC.quantRange = [0.75, 0.35]

        ## SET VARIABLES RF:
        #GWT:
        self.GWT_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_GWT_30_250_50.nwf'
        self.GWT_sys.inRanges = { 'SYSTEM_QUANT_PHI':   [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
        self.GWT_sys.inOrder = ['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                                'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.GWT_sys.outRanges = {'sys_GWT' :           [5000, 50000]}
        self.GWT_sys.actType = 'sigmoid'
        self.GWT_sys.hidNodes = 250
        self.GWT_sys.inGran   = 30
        self.GWT_sys.outGran  = 50
        
        self.fuzz_combine_GWT.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_GWT.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_GWT.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_GWT.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_GWT.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_GWT.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_GWT.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_GWT.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_GWT.in_7.input_key ='SYS_type'
        self.fuzz_combine_GWT.in_8.input_key ='SYS_tech'

        #P installed:
        self.P_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_Pin_30_250_50.nwf'
        self.P_sys.inRanges = {   'SYSTEM_QUANT_PHI':   [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
        self.P_sys.inOrder = ['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                              'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.P_sys.outRanges = {'sys_P' :           [1000, 15000]}
        self.P_sys.actType = 'sigmoid'
        self.P_sys.hidNodes = 250
        self.P_sys.inGran   = 30
        self.P_sys.outGran  = 50
        
        self.fuzz_combine_P.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_P.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_P.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_P.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_P.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_P.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_P.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_P.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_P.in_7.input_key ='SYS_type'
        self.fuzz_combine_P.in_8.input_key ='SYS_tech'

        #VH:
        self.VH_sys.weight_file = 'FCL_files/DFES_RF/BEST/RFdata20Aug_DFES_VH_40_250_50.nwf'
        self.VH_sys.inRanges = { 'SYSTEM_QUANT_PHI':    [0.5,  0.85 ],
                                  'VL_SYS_w':           [1., 150.],
                                  'WING_SYS_TYPE_WS':   [15., 300.],
                                  'sys_etaP':           [0.6,  1.0 ],
                                  'VL_SYS_DRV_eta_d':   [0.7,  1.0 ],
                                  'sys_FoM':            [0.3,  1.0 ],
                                  'VL_SYS_e_d':         [0.0,  0.3 ],
                                  'ENG_SYS_TYPE_SFC':   [0.35, 0.75 ],
                                  'SYS_type':           [0.5,  3.5 ],}
        self.VH_sys.inOrder = ['SYSTEM_QUANT_PHI', 'VL_SYS_w', 'WING_SYS_TYPE_WS', 'sys_etaP',
                                'VL_SYS_DRV_eta_d', 'sys_FoM','VL_SYS_e_d', 'ENG_SYS_TYPE_SFC', 'SYS_type']
        self.VH_sys.outRanges = {'sys_VH' :           [200, 500]}
        self.VH_sys.actType = 'sigmoid'
        self.VH_sys.hidNodes = 250
        self.VH_sys.inGran   = 40
        self.VH_sys.outGran  = 50
        
        self.fuzz_combine_VH.in_1.input_key ='SYSTEM_QUANT_PHI'
        self.fuzz_combine_VH.in_2.input_key ='VL_SYS_w'
        self.fuzz_combine_VH.in_3.input_key ='WING_SYS_TYPE_WS'
        self.fuzz_combine_VH.inDict_1.input_keys = ['sys_etaP']
        self.fuzz_combine_VH.in_4.input_key ='VL_SYS_DRV_eta_d'
        self.fuzz_combine_VH.inDict_2.input_keys = ['sys_FoM']
        self.fuzz_combine_VH.in_5.input_key ='VL_SYS_e_d'
        self.fuzz_combine_VH.in_6.input_key ='ENG_SYS_TYPE_SFC'
        self.fuzz_combine_VH.in_7.input_key ='SYS_type'
        

        # CONFIGURE DRIVER
        self.driver.iprint = 0 # Driver Flags

        self.driver.add_parameter('compatibility.gen_num')
        self.driver.add_parameter('compatibility.option1') #list of options as input
        self.driver.add_parameter('compatibility.option2') #list of options as input
        self.driver.add_parameter('compatibility.option3') #list of options as input
        self.driver.add_parameter('compatibility.option4') #list of options as input
        self.driver.add_parameter('compatibility.option5') #list of options as input
        self.driver.add_parameter('compatibility.option6') #list of options as input
        self.driver.add_parameter('compatibility.option7') #list of options as input
        self.driver.add_parameter('compatibility.option8') #list of options as input
        self.driver.add_parameter('compatibility.option9') #list of options as input
        
        #self.driver.add_response('driver.gen_num')

        self.driver.add_objective('postprocess.response_1_POS') #output from system (dict)
        self.driver.add_objective('postprocess.response_2_POS') #output from system (dict)
        self.driver.add_objective('postprocess.response_3_POS') #output from system (dict)
        self.driver.add_objective('postprocess.response_4_POS') #output from system (dict)
        self.driver.add_objective('postprocess.response_6_POS') #output from system (dict)


        #self.driver.add_response('postprocess.ranges_out') #output from system (dict)
        #self.driver.add_response('postprocess.response_1_r') #output from system (dict)
        #self.driver.add_response('postprocess.response_2_r') #output from system (dict)
        #self.driver.add_response('postprocess.response_3_r') #output from system (dict)
        self.recorders = [CSVCaseRecorder(filename='optCases_.csv')] #  [JSONCaseRecorder(out='opt_record.json')]  #
        self.recording_options.includes = ['compatibility.gen_num', 'compatibility.option1', 'compatibility.option2', 'compatibility.option3', 'compatibility.option4',
                                           'compatibility.option5', 'compatibility.option6', 'compatibility.option7', 'compatibility.option8', 'compatibility.option9', "compatibility.compatibility", 
                                           'postprocess.response_1', 'postprocess.response_2', 'postprocess.response_3', 'postprocess.response_4', 
                                           'postprocess.response_5', 'postprocess.response_6', 'postprocess.response_7',
                                           'postprocess.response_1_r', 'postprocess.response_2_r', 'postprocess.response_3_r', 'postprocess.response_4_r', 
                                           'postprocess.response_5_r', 'postprocess.response_6_r', 'postprocess.response_7_r',
                                           'postprocess.response_1_POS', 'postprocess.response_2_POS', 'postprocess.response_3_POS', 'postprocess.response_4_POS', 
                                           'postprocess.response_5_POS', 'postprocess.response_6_POS', 'postprocess.response_7_POS', 'postprocess.fuzzyPOS']

        self.driver.print_results = True

        
#if __name__ == "__main__":
#    None