def optimize( self, optName, tol, optOptions={}, storeHistory=False, setDV=None, xScale=1.0, objScale=1.0, conScale=1.0, offset=0.0, check_solution=True, ): # Optimization Object optProb = Optimization("HS071 Constraint Problem", self.objfunc) # Design Variables x0 = [1.0, 5.0, 5.0, 1.0] optProb.addVarGroup("xvars", 4, lower=1, upper=5, value=x0, scale=xScale, offset=offset) # Constraints optProb.addConGroup("con", 2, lower=[25, 40], upper=[None, 40], scale=conScale) # Objective optProb.addObj("obj", scale=objScale) # Optimizer try: opt = OPT(optName, options=optOptions) except Error: raise unittest.SkipTest("Optimizer not available:", optName) if isinstance(setDV, str): optProb.setDVsFromHistory(setDV) elif isinstance(setDV, dict): optProb.setDVs(setDV) outDV = optProb.getDVs() assert_allclose(setDV["xvars"], outDV["xvars"]) sol = opt(optProb, sens=self.sens, storeHistory=storeHistory) # Check Solution if check_solution: self.fStar = 17.0140172 self.xStar = (1.0, 4.743, 3.82115, 1.37941) self.lambdaStar = (0.55229366, -0.16146857) assert_allclose(sol.objectives["obj"].value, self.fStar, atol=tol, rtol=tol) assert_allclose(sol.xStar["xvars"], self.xStar, atol=tol, rtol=tol) if hasattr(sol, "lambdaStar"): assert_allclose(sol.lambdaStar["con"], self.lambdaStar, atol=tol, rtol=tol) return sol
MP.setObjCon(objCon) MP.setOptProb(optProb) # ============================================================================== # Run optimization # ============================================================================== # Create optimizer optOptions = { 'Function precision': 1e-4, 'Major feasibility tolerance': 1.0e-4, 'Major optimality tolerance': 1.0e-4, 'Difference interval': 1e-3, 'Print file': os.path.join(outputDirectory, 'SNOPT_print.out'), 'Summary file': os.path.join(outputDirectory, 'SNOPT_summary.out'), } opt = OPT('snopt', options=optOptions) # Load the optimized structural variables optProb.setDVsFromHistory('struct.hst') # Print Optimization Problem and sparsity if comm.rank == 0: print(optProb) optProb.printSparsity() # Run Optimization histFile = os.path.join(outputDirectory, 'opt_hist.hst') MP.gcomm.barrier() sol = opt(optProb, MP.sens, storeHistory=histFile) if comm.rank == 0: print(sol)