Esempio n. 1
0
    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
Esempio n. 2
0
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)