def __call__(self, optimizer, options=None): """ Run optimization """ system = self._system variables = self._variables opt_prob = OptProblem('Optimization', self.obj_func) for dv_name in variables['dv'].keys(): dv = variables['dv'][dv_name] dv_id = dv['ID'] value = dv['value'] lower = dv['lower'] upper = dv['upper'] size = system.vec['u'](dv_id).shape[0] opt_prob.addVarGroup(dv_name, size, value=value, lower=lower, upper=upper) opt_prob.finalizeDesignVariables() for func_name in variables['func'].keys(): func = variables['func'][func_name] func_id = func['ID'] lower = func['lower'] upper = func['upper'] linear = func['linear'] get_jacs = func['get_jacs'] size = system.vec['u'](func_id).shape[0] if lower is None and upper is None: opt_prob.addObj(func_name) else: if func['get_jacs'] is None: opt_prob.addConGroup(func_name, size, lower=lower, upper=upper) else: jacs_var = get_jacs() dv_names = [] jacs = {} for dv_var in jacs_var: dv_id = self._system.get_id(dv_var) dv_name = self._get_name(dv_id) dv_names.append(dv_name) jacs[dv_name] = jacs_var[dv_var] opt_prob.addConGroup(func_name, size, wrt=dv_names, jac=jacs, linear=linear, lower=lower, upper=upper) if options is None: options = {} opt = Optimizer(optimizer, options=options) opt.setOption('Iterations limit', int(1e6)) #opt.setOption('Verify level', 3) sol = opt(opt_prob, sens=self.sens_func, storeHistory='hist.hst') print sol
optProb.finalizeDesignVariables() if constrained: optProb.addCon("con", upper=0, scale=1.0) optProb.addObj("obj") # Create optimizer opt = OPT(args.opt, options=optOptions) if testHist == "no": # Just run a normal run sol = opt(optProb, sens=sens, sensMode=sensMode) # print(sol.fStar) print(sol) else: # First call just does 10 iterations if args.opt.lower() == "snopt": opt.setOption("Major iterations limit", 10) solSnopt1 = opt(optProb, sens=sens, sensMode="pgc", storeHistory="opt_hist") # Now we are allowed to do 50 opt.setOption("Major iterations limit", 50) if testHist == "hot": solSnopt2 = opt(optProb, sens=sens, sensMode=sensMode, hotStart="opt_hist", storeHistory="opt_hist") else: solSnopt2 = opt(optProb,
optProb.finalizeDesignVariables() if constrained: optProb.addCon('con', upper=0, scale=1.0) optProb.addObj('obj') # Create optimizer opt = OPT(args.opt, options=optOptions) if testHist == 'no': # Just run a normal run sol = opt(optProb, sens=sens, sensMode=sensMode) # print(sol.fStar) print(sol) else: # First call just does 10 iterations if args.opt.lower() == 'snopt': opt.setOption('Major iterations limit', 10) solSnopt1 = opt(optProb, sens=sens, sensMode='pgc', storeHistory='opt_hist') # Now we are allowed to do 50 opt.setOption('Major iterations limit', 50) if testHist == 'hot': solSnopt2 = opt(optProb, sens=sens, sensMode=sensMode, hotStart='opt_hist', storeHistory='opt_hist') else: solSnopt2 = opt(optProb,
def __call__(self, optimizer, options=None): """ Run optimization """ system = self._system variables = self._variables opt_prob = OptProblem('Optimization', self.obj_func) for dv_name in variables['dv'].keys(): dv = variables['dv'][dv_name] dv_id = dv['ID'] if dv['value'] is not None: value = dv['value'] else: value = system.vec['u'](dv_id) scale = dv['scale'] lower = dv['lower'] upper = dv['upper'] size = system.vec['u'](dv_id).shape[0] opt_prob.addVarGroup(dv_name, size, value=value, scale=scale, lower=lower, upper=upper) opt_prob.finalizeDesignVariables() for func_name in variables['func'].keys(): func = variables['func'][func_name] func_id = func['ID'] lower = func['lower'] upper = func['upper'] linear = func['linear'] get_jacs = func['get_jacs'] sys = func['sys'] size = system.vec['u'](func_id).shape[0] if lower is None and upper is None: opt_prob.addObj(func_name) else: if get_jacs is not None: jacs_var = get_jacs() dv_names = [] jacs = {} for dv_var in jacs_var: dv_id = self._system.get_id(dv_var) dv_name = self._get_name(dv_id) dv_names.append(dv_name) jacs[dv_name] = jacs_var[dv_var] opt_prob.addConGroup(func_name, size, wrt=dv_names, jac=jacs, linear=linear, lower=lower, upper=upper) elif sys is not None: dv_names = [] for dv_name in variables['dv'].keys(): dv_id = variables['dv'][dv_name]['ID'] if dv_id in sys.vec['u']: dv_names.append(dv_name) opt_prob.addConGroup(func_name, size, wrt=dv_names, lower=lower, upper=upper) else: opt_prob.addConGroup(func_name, size, lower=lower, upper=upper) if options is None: options = {} opt = Optimizer(optimizer, options=options) opt.setOption('Iterations limit', int(1e6)) #opt.setOption('Verify level', 3) sol = opt(opt_prob, sens=self.sens_func, storeHistory='hist.hst') print sol try: exit_status = sol.optInform['value'] self.exit_flag = 1 if exit_status > 2: # bad self.exit_flag = 0 except KeyError: #nothing is here, so something bad happened! self.exit_flag = 0