Exemple #1
0
def otimiza(obitos, x0):
    a, b, c, d = x0
    partial_func = partial(problema, obitos=obitos)
    update_wrapper(partial_func, problema)

    # Instantiate Optimization Problem
    opt_prob = Optimization('Rosenbrock Unconstraint Problem', partial_func)
    # opt_prob.addVarGroup('x', 2, 'c', lower=-1e10, upper=0.5, value=-3.0)
    # opt_prob.addVar('x1', 'c', lower=-10, upper=10, value=-3.0)
    # opt_prob.addVar('x2', 'c', lower=-10, upper=10, value=-4.0)
    opt_prob.addVar('A', 'c', lower=0, upper=2000, value=a)
    opt_prob.addVar('B', 'c', lower=0, upper=2000, value=b)
    opt_prob.addVar('C', 'c', lower=0, upper=2, value=c)
    opt_prob.addVar('D', 'c', lower=0, upper=1, value=d)
    # opt_prob.addCon('C', type='i', lower=0, upper=5, equal=c)
    # opt_prob.addCon('D', type='i', lower=0, upper=1, equal=d)
    opt_prob.addObj('f')
    # print(opt_prob)

    # from pyOpt.pySLSQP.pySLSQP import SLSQP
    # sopt = SLSQP()
    # sopt.setOption('IPRINT', -1)

    from pyOpt.pySOLVOPT.pySOLVOPT import SOLVOPT
    sopt = SOLVOPT()
    sopt.setOption('iprint', -1)

    [fstr, xstr, inform] = sopt(opt_prob, sens_type='FD')
    solution = getlastsolution(opt_prob)
    print(solution)
    return xstr, solution
def solveOpt(int_domain, J, a, model, u0, sign):
    '''
    INPUT:
        int_domain = 
        J = 
        a = 
        model = 
        u0 =
        sign = 
    OUTPUT:
        opt_prob = 
    '''
    def objfun(u, **kwargs):
        '''objfun defines optimization problem using the pyOpt sintax'''
        # 1) extract paraeters
        int_domain = kwargs['int_domain']
        J = kwargs['J']
        x = kwargs['a']
        model = kwargs['model']
        sign = kwargs['sign']
        # 2) define objective function and constraints
        funz = np.trapz(x=int_domain, y=J * model.pf(int_domain, u, x))
        g = []
        fail = 0
        return sign * funz, g, fail

    opt_prob = Optimization('ODAA problem', objfun)
    opt_prob.addObj('funz')
    solver = SLSQP()  # choose the solver
    solver.setOption('IPRINT', -1)
    opt_prob.addVar('u', 'c', lower=-1, upper=1, value=u0)
    #print opt_prob # print optimization problem
    solver(opt_prob, int_domain=int_domain, J=J, a=a, model=model, sign=sign)
    #print opt_prob.solution(0) # print solution
    return opt_prob
Exemple #3
0
def translateProgramToPyOpt(dfovecProgram):
    # Currently only handles inequality
    def objfunc(x):
        f = dfovecProgram.objective(x)

        g = []
        if dfovecProgram.hasInequalityConstraints():
            g = dfovecProgram.inequalityConstraints(x)

        fail = 0
        return f, g, fail

    opt_prob = Optimization('Dfovec problem', objfunc)
    for i in range(len(dfovecProgram.x0)):
        opt_prob.addVar('x' + str(i),
                        lower=-1000.0,
                        upper=1000.0,
                        value=dfovecProgram.x0[i])
    opt_prob.addObj('f')

    numIneq = dfovecProgram.getNumInequalityConstraints()
    opt_prob.addConGroup('g',
                         numIneq,
                         type='i',
                         lower=[-10000] * numIneq,
                         upper=[0] * numIneq)

    print(opt_prob)
    return opt_prob
Exemple #4
0
def optimize(k, w1, w2):
    
    # Physical problem
    rho = 0.2836  # lb/in^3
    L   = 5.0     # in
    P   = 25000.0 # lb
    E   = 30.0e6  # psi
    ys  = 36260.0 # psi
    fs  = 1.5
    dtruss = TwoBarTruss(rho, L, P, E, ys, fs)
    struss = StochasticTwoBarTruss(dtruss)

    # Optimization Problem
    optproblem = TwoBarTrussOpt(MPI.COMM_WORLD, struss, k, w1, w2)
    opt_prob = Optimization(args.logfile, optproblem.evalObjCon)
    
    # Add functions
    opt_prob.addObj('weight')
    opt_prob.addCon('buckling-bar1', type='i')
    opt_prob.addCon('failure-bar1' , type='i')
    opt_prob.addCon('failure-bar2' , type='i')
    
    # Add variables
    opt_prob.addVar('area-1', type='c', value= 1.5, lower= 1.5, upper= 1.5)
    opt_prob.addVar('area-2', type='c', value= 1.5, lower= 1.5, upper= 1.5)
    opt_prob.addVar('height', type='c', value= 4.0, lower= 4.0, upper= 10.0)
    
    # Optimization algorithm
    if args.algorithm == 'ALGENCAN':
        opt = ALGENCAN()
        opt.setOption('iprint',2)
        opt.setOption('epsfeas',1e-6)
        opt.setOption('epsopt',1e-6)
    else:
        opt = SLSQP(pll_type='POA')
        opt.setOption('MAXIT',999)
    
    opt(opt_prob,
        sens_type=optproblem.evalObjConGradient,
        disp_opts=True,
        store_hst=True,
        hot_start=False)
    
    if optproblem.comm.Get_rank() ==0:   
        print opt_prob.solution(0)
        opt_prob.write2file(disp_sols=True)
        x = optproblem.x_hist[-1]
        f = optproblem.fvals[0]
        print 'x', x
        print 'f', f

    return x, f
Exemple #5
0
def runoptimizer():
    opt_prob = Optimization('TP37 Constrained Problem',objfun)
    opt_prob.addObj('LL')
    opt_prob.addVar('x1','c',lower=0.01,upper=10.0,value=1.0)
    opt_prob.addVar('x2','c',lower=0.01,upper=10.0,value=1.0)
    opt_prob.addVar('x3','c',lower=0.01,upper=10.0,value=1.0)
    opt_prob.addVar('x4','c',lower=0.01,upper=10.0,value=1.0)

    opt_prob.addConGroup('g', 4, 'i')

    # sanity check
    print opt_prob
    print objfun([1.0,1.0,1.0,1.0])

    # other optimization methods can be used here - we use sequential least squares programming
    slsqp = SLSQP() 
    [fstr, xstr, inform] = slsqp(opt_prob)

    print opt_prob.solution(0)
    return [v.value for v in opt_prob.solution(0).getVarSet().values()]
Exemple #6
0
    def infill(self, points, method='error'):
        ## We'll be making non-permanent modifications to self.X and self.y here, so lets make a copy just in case
        initX = np.copy(self.X)
        inity = np.copy(self.y)

        ## This array will hold the new values we add
        returnValues = np.zeros([points, self.k], dtype=float)

        for i in range(points):
            opt_prob1 = Optimization('InFillPSO',
                                     self.errorObjective_normalized)
            for k in range(self.k):
                opt_prob1.addVar('{0}'.format(k),
                                 'c',
                                 lower=0,
                                 upper=1,
                                 value=.5)

            pso1 = ALPSO()
            pso1.setOption('SwarmSize', 100)
            pso1.setOption('maxOuterIter', 100)
            pso1.setOption('stopCriteria', 1)
            pso1(opt_prob1)

            newpoint = np.zeros(self.k)

            for j in range(self.k):
                newpoint[j] = opt_prob1.solution(0)._variables[j].value
            returnValues[i][:] = self.inversenormX(newpoint)
            self.addPoint(returnValues[i],
                          self.predict(returnValues[i]),
                          norm=True)
            self.updateModel()
            del (opt_prob1)
            del (pso1)
        self.X = np.copy(initX)
        self.y = np.copy(inity)
        self.n = len(self.X)
        self.updateModel()
        return returnValues
def translateProgramToPyOpt(dfovecProgram):
	# Currently only handles inequality
	def objfunc(x):
		f = dfovecProgram.objective(x)

		g = []
		if dfovecProgram.hasInequalityConstraints():
			g = dfovecProgram.inequalityConstraints(x)

		fail = 0
		return f, g, fail

	opt_prob = Optimization('Dfovec problem', objfunc)
	for i in range(len(dfovecProgram.x0)):
		opt_prob.addVar('x' + str(i), lower=-1000.0, upper=1000.0, value=dfovecProgram.x0[i])
	opt_prob.addObj('f')

	numIneq = dfovecProgram.getNumInequalityConstraints()
	opt_prob.addConGroup('g', numIneq, type='i', lower=[-10000] * numIneq, upper=[0] * numIneq)

	print(opt_prob)
	return opt_prob
Exemple #8
0
    def train(self, optimizer='pso'):
        #Define the optimization problem for training the kriging model
        opt_prob = Optimization('Surrogate Test', self.fittingObjective)
        for i in range(self.k):
            opt_prob.addVar('theta%d' % i,
                            'c',
                            lower=1e-3,
                            upper=1e2,
                            value=.1)
        for i in range(self.k):
            opt_prob.addVar('pl%d' % i, 'c', lower=1.5, upper=2, value=2)
        opt_prob.addVar('lambda', 'c', lower=1e-5, upper=1, value=1)
        opt_prob.addObj('f')
        opt_prob.addCon('g1', 'i')

        if optimizer == 'pso':
            optimizer = ALPSO()
            optimizer.setOption('SwarmSize', 150)
            optimizer.setOption('maxOuterIter', 150)
            optimizer.setOption('stopCriteria', 1)
            optimizer.setOption('filename', '{0}Results.log'.format(self.name))

        if optimizer == 'ga':
            optimizer = NSGA2()
            optimizer.setOption('PopSize', (4 * 50))

        while True:
            try:
                self.trainingOptimizer(optimizer, opt_prob)
            except Exception as e:
                print e
                print 'Error traning Model, restarting the optimizer with a larger population'
                if optimizer == 'ga':
                    optimizer.setOption('SwarmSize', 200)
                    optimizer.setOption('maxOuterIter', 100)
                    optimizer.setOption('stopCriteria', 1)
                if optimizer == 'ga':
                    optimizer.setOption('PopSize', 400)
            else:
                break
Exemple #9
0
    g_con[1][1] = x[0] * x[2] * x[3]
    g_con[1][2] = x[0] * x[1] * x[3]
    g_con[1][3] = x[0] * x[1] * x[2]

    fail = 0

    return g_obj, g_con, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('HS 071', objfunc)
opt_prob.addVar('x1', 'c', value=1., lower=1., upper=5.)
opt_prob.addVar('x2', 'c', value=5., lower=1., upper=5.)
opt_prob.addVar('x3', 'c', value=5., lower=1., upper=5.)
opt_prob.addVar('x4', 'c', value=1., lower=1., upper=5.)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'e', equal=40.)
opt_prob.addCon('g2', 'i', lower=25., upper=numpy.inf)

print opt_prob

# Instantiate Optimizer (IPOPT)
ipopt = IPOPT()

# Solve Problem with Optimizer Using Finite Differences
ipopt.setOption('output_file', 'ipopt.out')
ipopt.setOption('max_iter', 2000)
Exemple #10
0
    g_con[2][1] = 2. * x[1] - 1
    g_con[2][2] = 2. * x[2]
    g_con[2][3] = -1.

    fail = 0

    return g_obj, g_con, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('Constrained Rosen-Suzuki', objfunc)
opt_prob.addVar('x1', 'c', value=1.5)
opt_prob.addVar('x2', 'c', value=1.5)
opt_prob.addVar('x3', 'c', value=1.5)
opt_prob.addVar('x4', 'c', value=1.5)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'i')
opt_prob.addCon('g2', 'i')
opt_prob.addCon('g3', 'i')
print opt_prob

# Instantiate Optimizer (CONMIN)
conmin = CONMIN()

# Solve Problem with Optimizer Using Finite Differences
conmin(opt_prob, sens_type='FD')
print opt_prob.solution(0)
Exemple #11
0
	g = [0.0]*2
	g[0] = 3 - x[0]
	g[1] = 2 - x[1]
	
	fail = 0
	
	return f,g,fail
	

# =============================================================================
# 
# =============================================================================

# Instanciate Optimization Problem 
opt_prob = Optimization('TOY Constrained Problem',objfunc)
opt_prob.addVar('x1','c',value=1.0,lower=0.0,upper=10.0)
opt_prob.addVar('x2','c',value=1.0,lower=0.0,upper=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
opt_prob.addCon('g2','i')
print(opt_prob)

# Instanciate Optimizer (SLSQP) & Solve Problem Storing History
slsqp = SLSQP()
slsqp.setOption('IFILE','slsqp1.out')
slsqp(opt_prob,store_hst=True)
print(opt_prob.solution(0))

# Solve Problem Using Stored History (Warm Start)
slsqp.setOption('IFILE','slsqp2.out')
slsqp(opt_prob, store_hst=True, hot_start='slsqp1')
    def execute(self):
        """pyOpt execution. Note that pyOpt controls the execution, and the
        individual optimizers control the iteration."""

        self.pyOpt_solution = None

        opt_prob = Optimization(self.title, self.objfunc, var_set={}, obj_set={}, con_set={})

        # Add all parameters
        self.param_type = {}
        for name, param in self.get_parameters().iteritems():

            # We need to identify Enums, Lists, Dicts
            metadata = param.get_metadata()[0][1]
            values = param.evaluate()

            # Assuming uniform enumerated, discrete, or continuous for now.
            val = values[0]
            choices = []
            if "values" in metadata and isinstance(metadata["values"], (list, tuple, array, set)):
                vartype = "d"
                choices = metadata["values"]
            elif isinstance(val, bool):
                vartype = "d"
                choices = [True, False]
            elif isinstance(val, (int, int32, int64)):
                vartype = "i"
            elif isinstance(val, (float, float32, float64)):
                vartype = "c"
            else:
                msg = "Only continuous, discrete, or enumerated variables" " are supported. %s is %s." % (
                    name,
                    type(val),
                )
                self.raise_exception(msg, ValueError)
            self.param_type[name] = vartype

            names = param.names
            lower_bounds = param.get_low()
            upper_bounds = param.get_high()
            for i in range(param.size):
                opt_prob.addVar(
                    names[i], vartype, lower=lower_bounds[i], upper=upper_bounds[i], value=values[i], choices=choices
                )
        # Add all objectives
        for name in self.get_objectives():
            opt_prob.addObj(name)

        # Add all equality constraints
        for name in self.get_eq_constraints():
            opt_prob.addCon(name, type="e")

        # Add all inequality constraints
        for name in self.get_ineq_constraints():
            opt_prob.addCon(name, type="i")

        # Instantiate the requested optimizer
        optimizer = self.optimizer
        try:
            exec ("from pyOpt import %s" % optimizer)
        except ImportError:
            msg = "Optimizer %s is not available in this installation." % optimizer
            self.raise_exception(msg, ImportError)

        optname = vars()[optimizer]
        opt = optname()

        # Set optimization options
        for option, value in self.options.iteritems():
            opt.setOption(option, value)

        # Execute the optimization problem
        if self.pyopt_diff:
            # Use pyOpt's internal finite difference
            opt(opt_prob, sens_type="FD")
        else:
            # Use OpenMDAO's differentiator for the gradient
            opt(opt_prob, sens_type=self.gradfunc)

        # Print results
        if self.print_results:
            print opt_prob.solution(0)

        # Pull optimal parameters back into framework and re-run, so that
        # framework is left in the right final state
        dvals = []
        for i in range(0, len(opt_prob.solution(0)._variables)):
            dvals.append(opt_prob.solution(0)._variables[i].value)

        # Integer parameters come back as floats, so we need to round them
        # and turn them into python integers before setting.
        if "i" in self.param_type.values():
            for j, param in enumerate(self.get_parameters().keys()):
                if self.param_type[param] == "i":
                    dvals[j] = int(round(dvals[j]))

        self.set_parameters(dvals)
        self.run_iteration()
        self.record_case()

        # Save the most recent solution.
        self.pyOpt_solution = opt_prob.solution(0)
def objfunc_3(x):
    f1 = x[0] - x[1]
    f2 = x[0] + x[1]
    f = (f1, f2)
    fail = 0
    g = []
    return f,(g, g), (fail, fail)
# =============================================================================
# 
# =============================================================================
chord = 1.
x_hinge = 0.75
safety = 0.005*chord

opt_prob = Optimization('main', (objfunc_1, objfunc_2))
opt_prob.addObj("f1")
opt_prob.addObj("f2")
#xs_n
opt_prob.addVar('x1', 'c', lower = -1 , upper = 1, value = 6.817445e-001)
#ys_n
opt_prob.addVar('x2', 'c', lower = -1, upper = 1, value = -5.216475e-001)

#opt_prob.addObj('2', objfunc_2)
print opt_prob

# Global Optimization
nsga2 = NSGA2()
nsga2.setOption('PopSize', 10)
nsga2.setOption('maxGen', 10)
nsga2(opt_prob)
print opt_prob.solution(0)
Exemple #14
0
def main():
    ###########################################
    # Define some values
    ###########################################
    n_blades = 2
    n_elements = 10
    radius = unit_conversion.in2m(9.6) / 2
    root_cutout = 0.1 * radius
    dy = float(radius - root_cutout) / n_elements
    dr = float(1) / n_elements
    y = root_cutout + dy * np.arange(1, n_elements + 1)
    r = y / radius
    pitch = 0.0
    airfoils = (('SDA1075_494p', 0.0, 1.0), )
    #allowable_Re = []
    allowable_Re = [
        1000000., 500000., 250000., 100000., 90000., 80000., 70000., 60000.,
        50000., 40000., 30000., 20000., 10000.
    ]
    vehicle_weight = 12.455
    max_chord = 0.6
    max_chord_tip = 5.
    alt = 0
    tip_loss = True
    mach_corr = False

    # Forward flight parameters
    v_inf = 4.  # m/s
    alpha0 = 0.0454  # Starting guess for trimmed alpha in radians
    n_azi_elements = 5

    # Mission times
    time_in_hover = 0.  # Time in seconds
    time_in_ff = 500.
    mission_time = [time_in_hover, time_in_ff]

    Cl_tables = {}
    Cd_tables = {}
    Clmax = {}
    # Get lookup tables
    if any(airfoil[0] != 'simple' for airfoil in airfoils):
        for airfoil in airfoils:
            Cl_table, Cd_table, Clmax = aero_coeffs.create_Cl_Cd_table(
                airfoil[0])

            Cl_tables[airfoil[0]] = Cl_table
            Cd_tables[airfoil[0]] = Cd_table
            Clmax[airfoil[0]] = Clmax

    # Create list of Cl functions. One for each Reynolds number. Cl_tables (and Cd_tables) will be empty for the
    # 'simple' case, therefore this will be skipped for the simple case. For the full table lookup case this will be
    # skipped because allowable_Re will be empty.
    Cl_funs = {}
    Cd_funs = {}
    lift_curve_info_dict = {}
    if Cl_tables and allowable_Re:
        Cl_funs = dict(
            zip(allowable_Re, [
                aero_coeffs.get_Cl_fun(Re, Cl_tables[airfoils[0][0]],
                                       Clmax[airfoils[0][0]][Re])
                for Re in allowable_Re
            ]))
        Cd_funs = dict(
            zip(allowable_Re, [
                aero_coeffs.get_Cd_fun(Re, Cd_tables[airfoils[0][0]])
                for Re in allowable_Re
            ]))
        lift_curve_info_dict = aero_coeffs.create_liftCurveInfoDict(
            allowable_Re, Cl_tables[airfoils[0][0]])

    ###########################################
    # Set design variable bounds
    ###########################################
    omega_start = 4250. * 2 * np.pi / 60
    # These are c/R values for the DA4002 propeller given at the UIUC propeller database
    chord_base = np.array([
        0.1198, 0.1128, 0.1436, 0.1689, 0.1775, 0.1782, 0.1773, 0.1782, 0.1790,
        0.1787, 0.1787, 0.1786, 0.1785, 0.1790, 0.1792, 0.1792, 0.1692, 0.0154
    ])
    chord_base = np.array(
        [chord_base[i] for i in [0, 2, 4, 6, 8, 10, 12, 14, 15, 17]])
    twist_base = np.array([
        42.481, 44.647, 41.154, 37.475, 34.027, 30.549, 27.875, 25.831, 23.996,
        22.396, 21.009, 19.814, 18.786, 17.957, 17.245, 16.657, 13.973, 2.117
    ]) * 2 * np.pi / 360
    twist_base = np.array(
        [twist_base[i] for i in [0, 2, 4, 6, 8, 10, 12, 14, 15, 17]])
    dtwist_base = np.array([
        twist_base[i + 1] - twist_base[i] for i in xrange(len(twist_base) - 1)
    ])
    dchord_base = np.array([
        chord_base[i + 1] - chord_base[i] for i in xrange(len(chord_base) - 1)
    ])
    twist0_base = twist_base[0]
    chord0_base = chord_base[0]

    chord_start = chord_base
    twist_start = twist_base
    dtwist_start = dtwist_base
    dchord_start = dchord_base
    twist0_start = twist0_base
    chord0_start = chord0_base
    print "chord0_start = " + str(chord0_start)

    omega_lower = 2000 * 2 * np.pi / 60
    omega_upper = 8000.0 * 2 * np.pi / 60

    twist0_lower = 0. * 2 * np.pi / 360
    twist0_upper = 60. * 2 * np.pi / 360

    chord0_upper = 0.1198
    chord0_lower = 0.05

    dtwist_lower = -10.0 * 2 * np.pi / 360
    dtwist_upper = 10.0 * 2 * np.pi / 360
    dchord_lower = -0.1
    dchord_upper = 0.1

    opt_prob = Optimization('Mission Simulator', objfun)
    opt_prob.addVar('omega_h',
                    'c',
                    value=omega_start,
                    lower=omega_lower,
                    upper=omega_upper)
    opt_prob.addVar('twist0',
                    'c',
                    value=twist0_start,
                    lower=twist0_lower,
                    upper=twist0_upper)
    opt_prob.addVar('chord0',
                    'c',
                    value=chord0_start,
                    lower=chord0_lower,
                    upper=chord0_upper)
    opt_prob.addVarGroup('dtwist',
                         n_elements - 1,
                         'c',
                         value=dtwist_start,
                         lower=dtwist_lower,
                         upper=dtwist_upper)
    opt_prob.addVarGroup('dchord',
                         n_elements - 1,
                         'c',
                         value=dchord_start,
                         lower=dchord_lower,
                         upper=dchord_upper)
    opt_prob.addObj('f')
    opt_prob.addCon('thrust', 'i')
    opt_prob.addCon('c_tip', 'i')
    opt_prob.addConGroup('c_lower', n_elements, 'i')
    opt_prob.addConGroup('c_upper', n_elements, 'i')
    print opt_prob

    pop_size = 300
    max_gen = 1100
    opt_method = 'nograd'
    nsga2 = NSGA2()
    nsga2.setOption('PrintOut', 2)
    nsga2.setOption('PopSize', pop_size)
    nsga2.setOption('maxGen', max_gen)
    nsga2.setOption('pCross_real', 0.85)
    nsga2.setOption('pMut_real', 0.2)
    nsga2.setOption('xinit', 1)
    fstr, xstr, inform = nsga2(opt_prob,
                               n_blades=n_blades,
                               radius=radius,
                               dy=dy,
                               dr=dr,
                               y=y,
                               r=r,
                               pitch=pitch,
                               airfoils=airfoils,
                               vehicle_weight=vehicle_weight,
                               max_chord=max_chord,
                               tip_loss=tip_loss,
                               mach_corr=mach_corr,
                               Cl_funs=Cl_funs,
                               Cd_funs=Cd_funs,
                               Cl_tables=Cl_tables,
                               Cd_tables=Cd_tables,
                               allowable_Re=allowable_Re,
                               opt_method=opt_method,
                               alt=alt,
                               v_inf=v_inf,
                               alpha0=alpha0,
                               mission_time=mission_time,
                               n_azi_elements=n_azi_elements,
                               pop_size=pop_size,
                               max_gen=max_gen,
                               lift_curve_info_dict=lift_curve_info_dict,
                               max_chord_tip=max_chord_tip)
    print opt_prob.solution(0)

    # opt_method = 'nograd'
    # xstart_alpso = np.concatenate((np.array([omega_start, twist0_start, chord0_start]), dtwist_start, dchord_start))
    # alpso = ALPSO()
    # alpso.setOption('xinit', 0)
    # alpso.setOption('SwarmSize', 200)
    # alpso.setOption('maxOuterIter', 100)
    # alpso.setOption('stopCriteria', 0)
    # fstr, xstr, inform = alpso(opt_prob, xstart=xstart_alpso,  n_blades=n_blades, n_elements=n_elements,
    #                            root_cutout=root_cutout, radius=radius, dy=dy, dr=dr, y=y, r=r, pitch=pitch,
    #                            airfoils=airfoils, thrust=thrust, max_chord=max_chord, tip_loss=tip_loss,
    #                            mach_corr=mach_corr, Cl_funs=Cl_funs, Cd_funs=Cd_funs, Cl_tables=Cl_tables,
    #                            Cd_tables=Cd_tables, allowable_Re=allowable_Re, opt_method=opt_method)
    # print opt_prob.solution(0)

    # opt_method = 'grad'
    # slsqp = SLSQP()
    # slsqp.setOption('IPRINT', 1)
    # slsqp.setOption('MAXIT', 1000)
    # slsqp.setOption('ACC', 1e-7)
    # fstr, xstr, inform = slsqp(opt_prob, sens_type='FD', n_blades=n_blades, n_elements=n_elements,
    #                            root_cutout=root_cutout, radius=radius, dy=dy, dr=dr, y=y, r=r, pitch=pitch,
    #                            airfoils=airfoils, thrust=thrust, max_chord=max_chord,
    #                            tip_loss=tip_loss, mach_corr=mach_corr, Cl_funs=Cl_funs, Cd_funs=Cd_funs,
    #                            Cl_tables=Cl_tables, Cd_tables=Cd_tables, allowable_Re=allowable_Re,
    #                            opt_method=opt_method, alt=alt)
    # print opt_prob.solution(0)

    def get_performance(o, c, t):
        chord_meters = c * radius
        prop = propeller.Propeller(t,
                                   chord_meters,
                                   radius,
                                   n_blades,
                                   r,
                                   y,
                                   dr,
                                   dy,
                                   airfoils=airfoils,
                                   Cl_tables=Cl_tables,
                                   Cd_tables=Cd_tables)
        quad = quadrotor.Quadrotor(prop, vehicle_weight)

        ff_kwargs = {
            'propeller': prop,
            'pitch': pitch,
            'n_azi_elements': n_azi_elements,
            'allowable_Re': allowable_Re,
            'Cl_funs': Cl_funs,
            'Cd_funs': Cd_funs,
            'tip_loss': tip_loss,
            'mach_corr': mach_corr,
            'alt': alt,
            'lift_curve_info_dict': lift_curve_info_dict
        }
        trim0 = np.array([alpha0, o])
        alpha_trim, omega_trim, converged = trim.trim(quad, v_inf, trim0,
                                                      ff_kwargs)
        T_ff, H_ff, P_ff = bemt.bemt_forward_flight(
            quad,
            pitch,
            omega_trim,
            alpha_trim,
            v_inf,
            n_azi_elements,
            alt=alt,
            tip_loss=tip_loss,
            mach_corr=mach_corr,
            allowable_Re=allowable_Re,
            Cl_funs=Cl_funs,
            Cd_funs=Cd_funs,
            lift_curve_info_dict=lift_curve_info_dict)

        dT_h, P_h = bemt.bemt_axial(prop,
                                    pitch,
                                    o,
                                    allowable_Re=allowable_Re,
                                    Cl_funs=Cl_funs,
                                    Cd_funs=Cd_funs,
                                    tip_loss=tip_loss,
                                    mach_corr=mach_corr,
                                    alt=alt)
        return sum(dT_h), P_h, T_ff, P_ff, alpha_trim, omega_trim

    omega = xstr[0]
    twist0 = xstr[1]
    chord0 = xstr[2]
    dtwist = xstr[3:3 + len(r) - 1]
    dchord = xstr[3 + len(r) - 1:]

    twist = calc_twist_dist(twist0, dtwist)
    chord = calc_chord_dist(chord0, dchord)

    print "chord = " + repr(chord)
    print "twist = " + repr(twist)

    # twist_base = calc_twist_dist(twist0_base, dtwist_base)
    # chord_base = calc_chord_dist(chord0_base, dchord_base)

    perf_opt = get_performance(omega, chord, twist)
    #perf_base = get_performance(omega_start, chord_base, twist_base)
    print "omega = " + str(omega * 60 / 2 / np.pi)
    print "Hover Thrust of optimized = " + str(perf_opt[0])
    print "Hover Power of optimized = " + str(perf_opt[1])
    print "FF Thrust of optimized = " + str(perf_opt[2])
    print "FF Power of optimized = " + str(perf_opt[3])
    print "Trim (alpha, omega) = (%f, %f)" % (perf_opt[4], perf_opt[5])
Exemple #15
0
    
    f = a1*(x[1]-x[0]**2.)**2. + (a2-x[0])**2.
    g = [0.0]*2
    g[0] = x[0]**2. + x[1]**2.0 - a3
    
    fail = 0
    return f,g, fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('Rosenbrock Constrained Problem',objfunc)
opt_prob.addVar('x1','c',lower=0.0,upper=1.0,value=0.5)
opt_prob.addVar('x2','c',lower=0.0,upper=1.0,value=0.5)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
print(opt_prob)

# Arguments to pass into objfunc
a1 = 100.0
a2 = 1.0
a3 = 1.0

# Instantiate Optimizer (SLSQP) & Solve Problem
slsqp = SLSQP()
slsqp.setOption('IPRINT',-1)
slsqp(opt_prob,sens_type='FD',a12=[a1,a2],a3=a3)
print(opt_prob.solution(0))
#==============================================================================
eng = matlab.engine.start_matlab()
#Go to directory where matlab file is
eng.cd('..')
eng.cd('SMA_temperature_strain_driven')

# =============================================================================
# 
# =============================================================================
chord = 1.
x_hinge = 0.75
safety = 0.005*chord

opt_prob = Optimization('Static model optimization', objfunc)
#l_s
opt_prob.addVar('x1', 'c', lower = 0.1 , upper = 0.6, value = 0.2)
#l_l
opt_prob.addVar('x2', 'c', lower = 0.1, upper = 0.6, value = 0.2)
#R
opt_prob.addVar('x5', 'c',  lower = 0.001, upper = 0.03, value = 0.02)
# #yl_n
# opt_prob.addVar('x6', 'c', lower = -.9, upper = 0.9, value = -4.593744e-001)
# #xl_p
# opt_prob.addVar('x7', 'c', lower = x_hinge + safety, upper = chord - safety, value =  8.187166e-001)
# #yl_p
# opt_prob.addVar('x8', 'c', lower = -.9, upper = 0., value = -5.719241e-001)

opt_prob.addObj('f')
#opt_prob.addCon('g', 'i')
print opt_prob
Exemple #17
0
    t0 = 0.5
    print('thickness = ',t0)
    #x = np.array([dp.steady_q,dp.thermal_scale,1.0])

    def unscale(x):
       y = x
       return y

    design_problem = PyOptOptimization(dp.comm, dp.eval_objcon, dp.eval_objcon_grad,
                                       number_of_steps=1,
                                       unscale_design_variables=unscale)

    opt_prob = Optimization('Aerothermoelasticity', design_problem.eval_obj_con)
    opt_prob.addObj('Average Temperature')

    opt_prob.addVar('x1', type='c', value=t0, lower=0.1, upper=1.0)
    opt_prob.addVar('x2', type='c', value=t0, lower=0.1, upper=1.0)
    opt_prob.addVar('x3', type='c', value=t0, lower=0.1, upper=1.0)

    opt_prob.addCon('maximum mass', type='i', lower=-np.inf, upper=np.inf, equal=0.0)

    if 'verify' in sys.argv:
        x0 = np.array([t], TransferScheme.dtype)
        f0, c0, fail = dp.eval_obj(x0)
        g, A, fail = dp.eval_obj_grad(x0, f0, c0)

        for dh in [1e-6, 5e-7, 1e-7, 5e-8, 1e-8]:
            x = x0 + dh
            f1, c1, fail = dp.eval_obj(x)
            fd = (c1[0] - c0[0])/dh
            rel_err = (fd - A[0,0])/fd
Exemple #18
0
def variogram_fit(SVExp, Sb=(0.01,400), Rb=(2,20), Nb=(0,400),
                  ab=(0,2), vb=(0,1000)):
    # Array with functions to be called from the Variograms library
    VarFunArr = [VariogramFit.SVExponential, VariogramFit.SVGaussian, 
                 VariogramFit.SVSpherical, VariogramFit.SVCubic,
                 VariogramFit.SVPentaspherical, VariogramFit.SVSinehole, 
                 VariogramFit.SVPower, VariogramFit.SVMatern]
    
    # Names of functions for display only
    optFunNam = ['Exponential','Gaussian','Spherical','Cubic',
                 'Pentaspherical','Sinehole','Power','Matern']
    
    # Boundaries semivariogram parameters
    #Sb = (0.01,400) # Limit for the sill
    #Rb = (2,20) # Limit for the range
    #Nb = (0,400) # Limit for the Nugget effect
    #ab = (0,2) # Limit for a in power variogram
    #vb = (0,1000) # Limit for Matern v parameters
    
    # Initial seed for variogram fit
    sr = random.uniform(Sb[0],Sb[1])
    rr = random.uniform(Rb[0],Rb[1])
    nr = random.uniform(Nb[0],Nb[1])
    ar = random.uniform(ab[0],ab[1])
    vr = random.uniform(vb[0],vb[1])
    return sr, rr, nr, ar, vr
    
    Var = []
    Res = []
    Mdl = [] 
    
    # Wrapper of minimisation function (RMSE) for semivariogram fitting
    def OptFun(x,*args):
        F, g, fail = VariogramFit.optFunMaster(x,SVExp,j,VarFunArr)
        if F == 9999:
            fail = 1
        else:
            Var.append(x)
            Res.append(F)
            Mdl.append(j)
        return F, g, fail
        
    print 'Initialising Variogram fit'
    print ''
    
    # Optimisation starts to minimise differences between experimental and 
    # theoretical semivariograms
    for j in xrange(0,len(VarFunArr)):
        
        print 'Variogram Fitting ' + optFunNam[j]
        print ''
        
        VarProb = Optimization('Variogram Fitting: ' + optFunNam[j], OptFun)
        VarProb.addObj('RMSE')
        VarProb.addVar('Sill','c',lower=Sb[0],upper=Sb[1],value=sr)
        VarProb.addVar('Range','c',lower=Rb[0],upper=Rb[1],value=rr)
        VarProb.addVar('Nugget','c',lower=Nb[0],upper=Nb[1],value=nr)
        VarProb.addVar('Exponent (a)','c',lower=ab[0],upper=ab[1],value=ar)
        VarProb.addVar('Rank (v)','c',lower=vb[0],upper=vb[1],value=vr)
        
        args = (SVExp, j, VarFunArr, Var, Res, Mdl)
        optmz = ALHSO()
        optmz(VarProb)
    
        print VarProb.solution(0)
        print ''    
    
    # Get position of best semivariogram
    k = numpy.argmin(Res)
    xopt = Var[k]
    ModOpt = Mdl[k]
    del Var
    del Res
    del Mdl
    
    print 'Theoretical variogram fit - Done!'
    print ''
    return xopt, ModOpt, VarFunArr
Exemple #19
0
def theor_variogram(experimental_sv, Sb=(0.01,400), Rb=(2,20), Nb=(0,400),
                    ab=(0,2), vb=(0,1000), candidate_sv=None,
                    candidate_sv_tag=None):
    '''
    Fitting of theoretical variogram
    Parameters
    ----------
        **experimental_sv** -- Experimental semivariogram ''[x,2]'', lag and \
            semivariogram \n
        **Sb** -- Boundaries on Sill of semivariogram ``(min,max)`` \n
        **Rb** -- Boundaries on Range of semivariogram ``(min,max)`` \n
        **Nb** -- Boundaries on Nugget of semivariogram ``(min,max)`` \n
        **ab** -- Boundaries on Power of semivariogram ``(min,max)`` (only \
            valid for power semivariogram) \n
        **vb** -- Boundaries on Shape parameter of semivariogram ``(min,max)``\
            (only valid for matérn type) \n
    
    Returns
    -------
        **xopt** -- Vector with optimal semivariogram parameters ``[5]`` \n
        **ModOpt** -- Pointer to optimal vector location \n
        **candidate_sv** -- Array with pointer to functions in variogram_fit \
        module
    '''                      
    
    if candidate_sv is None:
        # Array with functions to be called from the Variograms library
        candidate_sv = [variogram_fit.exponential_sv, 
                        variogram_fit.gaussian_sv]
     
    if candidate_sv_tag is None:
    # Names of functions for display only
        candidate_sv_tag = ['Exponential','Gaussian']
    
    # Initial seed for variogram fit
    sr = random.uniform(Sb[0], Sb[1])
    rr = random.uniform(Rb[0], Rb[1])
    nr = random.uniform(Nb[0], Nb[1])
    ar = random.uniform(ab[0], ab[1])
    vr = random.uniform(vb[0], vb[1])
    
    Var = []
    Res = []
    Mdl = [] 
    
    # Wrapper of minimisation function (RMSE) for semivariogram fitting
    def _opt_fun(x,*args):
        F, g, fail = variogram_fit.fit_function(x, experimental_sv, 
                                                j,candidate_sv)
        if F == ERROR_CODE:
            fail = 1

        else:
            Var.append(x)
            Res.append(F)
            Mdl.append(j)
        return F, g, fail
    
    # Optimisation starts to minimise differences between experimental and 
    # theoretical semivariograms
    for j in xrange(0,len(candidate_sv)):   
        VarProb = Optimization('Variogram Fitting: ' + candidate_sv_tag[j], 
                               _opt_fun)
        VarProb.addObj('RMSE')
        VarProb.addVar('Sill', 'c', lower=Sb[0], upper=Sb[1], value=sr)
        VarProb.addVar('Range', 'c', lower=Rb[0], upper=Rb[1], value=rr)
        VarProb.addVar('Nugget', 'c', lower=Nb[0], upper=Nb[1], value=nr)
        VarProb.addVar('Exponent (a)', 'c', lower=ab[0], upper=ab[1], value=ar)
        VarProb.addVar('Rank (v)', 'c', lower=vb[0], upper=vb[1], value=vr)
        
        args = (experimental_sv, j, candidate_sv, Var, Res, Mdl)
        optmz = ALHSO()
        optmz.setOption('fileout',0)
        optmz(VarProb)

    # Get pointer to best semivariogram
    k = np.argmin(Res)
    xopt = Var[k]
    ModOpt = Mdl[k]
    
    return xopt, ModOpt, candidate_sv
Exemple #20
0
# Make the objective function
def objfunc(x):
    f=3.32*(1/x[0]-1.21/(x[0]*x[1])**2.12)#objective function
#    ff = 2*[0.0]
#    ff[0] = (x - 0.0)**2 + (y - 0.0)**2
#    ff[1] = (x - 1.0)**2 + (y - 1.0)**2
    g = [] # constraned equation
    fail=False
    
    return f, g, fail


# Setup the optimisation problem
opt_prob = Optimization('Steam_ejector', objfunc)
#opt_prob.addVar('x', 'c', value=10, lower=-10, upper=10)
opt_prob.addVar('x1', 'c', value=3.0, lower=0.0, upper=6.0)
opt_prob.addVar('x2', 'c', value=6.0, lower=2.4, upper=10.0)
opt_prob.addObj('f')
print(opt_prob)

options = {
    'PopSize':300, #	Population Size (a Multiple of 4)
    'maxGen' :1000, # Maximum Number of Generations
    'pCross_real':0.3, #Probability of Crossover of Real Variable (0.6-1.0)
    'pMut_real':0.2, #Probablity of Mutation of Real Variables (1/nreal)
    'eta_c':10.0, 	#Distribution Index for Crossover (5-20) must be > 0
    'eta_m':20.0, 	#Distribution Index for Mutation (5-50) must be > 0
    'pCross_bin':0.0, #Probability of Crossover of Binary Variable (0.6-1.0)
    'pMut_bin':0.0, 	#Probability of Mutation of Binary Variables (1/nbits)
    'PrintOut' :2,   #Flag to Turn On Output to files (0-None, 1-Subset, 2-All)
    'seed':0.0	    #Random Number Seed (0 - Auto-Seed based on time clock)
    def execute(self):
        """pyOpt execution. Note that pyOpt controls the execution, and the
        individual optimizers control the iteration."""
        
        self.pyOpt_solution = None
    
        opt_prob = Optimization(self.title, self.objfunc, var_set={}, 
                                obj_set={}, con_set={})
        
        # Add all parameters
        for name, param in self.get_parameters().iteritems():
            
            val = param.evaluate()
            
            # We need to identify Enums, Lists, Dicts
            metadata = param.get_metadata()[0][1]          
            
            # enumerated, discrete or continuous
            choices = []
            if ('values' in metadata and \
               isinstance(metadata['values'],(list, tuple, array, set))):
                vartype = 'd'
                choices = metadata['values']
            elif isinstance(val, bool):
                vartype = 'd'
                choices = [True, False]
            elif isinstance(val, (int, int32, int64)):
                vartype = 'i'
            elif isinstance(val, (float, float32, float64)):
                vartype = 'c'
            else:
                msg = 'Only continuous, descrete, or enumerated variables ' + \
                      'are supported. %s is %s.' % (name, type(val))
                self.raise_exception(msg, ValueError)
            
            opt_prob.addVar(name, vartype, lower=param.low, upper=param.high, 
                            value=val, choices=choices)

        # Add all objectives
        for name in self.get_objectives().keys():
            opt_prob.addObj(name)
            
        # Add all equality constraints
        for name in self.get_eq_constraints().keys():
            opt_prob.addCon(name, type='e')
        
        # Add all inequality constraints
        for name in self.get_ineq_constraints().keys():
            opt_prob.addCon(name, type='i')

        # Instantiate the requested optimizer
        optimizer = self.optimizer
        try:
            exec('from pyOpt import %s' % optimizer)
        except ImportError:
            msg = "Optimizer %s is not avialable in this installation." % \
                   optimizer
            self.raise_exception(msg, ImportError)
            
        optname = vars()[optimizer]
        opt = optname()
        
        # Set optimization options
        for option, value in self.options.iteritems():
            opt.setOption(option, value)

        # Execute the optimization problem
        if self.differentiator:
            # Use OpenMDAO's differentiator for the gradient
            opt(opt_prob, sens_type=self.gradfunc)
        else:
            # Use pyOpt's internal finite difference
            opt(opt_prob, sens_type='FD')
        
        # Print results
        if self.print_results:
            print opt_prob.solution(0)
        
        # Pull optimal parameters back into framework and re-run, so that
        # framework is left in the right final state
        dvals = []
        for i in range(0, len(opt_prob.solution(0)._variables)):
            dvals.append(opt_prob.solution(0)._variables[i].value)
        self.set_parameters(dvals)
        self.run_iteration()
        
        # Save the most recent solution.
        self.pyOpt_solution = opt_prob.solution(0)
#==============================================================================
eng = matlab.engine.start_matlab()
#Go to directory where matlab file is
eng.cd('..')
eng.cd('SMA_temperature_strain_driven')

# =============================================================================
# 
# =============================================================================
chord = 1.
x_hinge = 0.75
safety = 0.05*chord

opt_prob = Optimization('Static model optimization',objfunc)
#xs_n
opt_prob.addVar('x1', 'c', lower = x_hinge/2. , upper = x_hinge - safety, value = 7.407724e-001)
#ys_n
opt_prob.addVar('x2', 'c', lower = -.9, upper = -0., value = -3.680615e-001)
#xs_p
opt_prob.addVar('x3', 'c', lower = x_hinge + safety, upper = chord - safety, value = 9.933211e-001)
#ys_p
opt_prob.addVar('x4', 'c', lower = 0., upper = .9, value = 6.004423e-001)
#xl_n
opt_prob.addVar('x5', 'c',  lower = x_hinge/2., upper = x_hinge - safety, value = 7.290939e-001)
#yl_n
opt_prob.addVar('x6', 'c', lower = -.9, upper = 0.9, value = -7.584186e-001)
#xl_p
opt_prob.addVar('x7', 'c', lower = x_hinge + safety, upper = chord - safety, value =  7.550874e-001)
#yl_p
opt_prob.addVar('x8', 'c', lower = -.9, upper = 0., value = -4.011175e-001)
    x = xdict['x']
    y = xdict['y']

    ff = [
        (x - 0.0)**2 + (y - 0.0)**2,
        (x - 1.0)**2 + (y - 1.0)**2,
    ]
    gg = []
    fail = False

    return ff, gg, fail


# Instantiate Optimization Problem
optProb = Optimization('Rosenbrock function', objfunc, use_groups=True)
optProb.addVar('x', 'c', value=0, lower=-600, upper=600)
optProb.addVar('y', 'c', value=0, lower=-600, upper=600)

optProb.addObj('obj1')
optProb.addObj('obj2')

# 300 generations will find x=(0,0), 200 or less will find x=(1,1)
options = {
    'maxGen': 200,
}
opt = NSGA2(options=options)
opt.setOption('PrintOut', 0)
opt(optProb)

print(optProb.getSol(0))
Exemple #24
0
    g_con[2][1] = 2.*x[1] - 1
    g_con[2][2] = 2.*x[2]
    g_con[2][3] = -1.
    
    fail = 0
    
    return g_obj,g_con,fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('Constrained Rosen-Suzuki',objfunc)
opt_prob.addVar('x1','c',value=1.5)
opt_prob.addVar('x2','c',value=1.5)
opt_prob.addVar('x3','c',value=1.5)
opt_prob.addVar('x4','c',value=1.5)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
opt_prob.addCon('g2','i')
opt_prob.addCon('g3','i')
print(opt_prob)

# Instantiate Optimizer (CONMIN)
conmin = CONMIN()

# Solve Problem with Optimizer Using Finite Differences
conmin(opt_prob,sens_type='FD')
print(opt_prob.solution(0))
            num = num + DM_php[i] * float(NUTRIENTS_php[i][j - 2]) * x[i]
        g[g_index +
          1] = -(num - divisor * mult_const * float(CONS_LHS_MIN_2_php[j - 1]))

    #time.sleep(0.5)
    fail = 0
    return f, g, fail


opt_prob = Optimization('TP37 Constrained Problem', objfunc)
#values = [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
for i in range(1, len(CONS_LHS_MIN_1_php) + 1):
    x_value = 'x' + str(i)
    opt_prob.addVar(x_value,
                    'c',
                    lower=float(CONS_LHS_MIN_1_php[i - 1]),
                    upper=float(CONS_RHS_MAX_1_php[i - 1]),
                    value=random.uniform(0.1, 1.5))
opt_prob.addObj('f')

for i in range(1, len(NUTRIENTS_php[0]) * 2 + 1):
    g_value = 'g' + str(i)
    opt_prob.addCon(g_value, 'i')

# Instantiate Optimizer (SLSQP)
slsqp = SLSQP()
slsqp.setOption('IPRINT', -1)

# Solve Problem (Without Parallel Gradient)
[fstr, xstr, inform] = slsqp(opt_prob, sens_type='CS')
if myrank == 0:
    f = 0
    for i in range(N - 1):
        f += abs(y1[i] * 100 - y2[i] * 100)**2

    g = []

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================
opt_prob = Optimization('CST Parameterization', objfunc)
opt_prob.addVar('x1', 'c', lower=-2.0, upper=2.0, value=-1.0)
opt_prob.addVar('x2', 'c', lower=-2.0, upper=2.0, value=-1.0)
opt_prob.addVar('x3', 'c', lower=-2.0, upper=2.0, value=-1.0)
opt_prob.addVar('x4', 'c', lower=-2.0, upper=2.0, value=-1.0)
opt_prob.addVar('x5', 'c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x6', 'c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x7', 'c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x8', 'c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addObj('f')
print opt_prob

# Instantiate Optimizer (SLSQP) & Solve Problem
slsqp = SLSQP()
slsqp.setOption('IPRINT', -1)
slsqp(opt_prob, sens_type='FD')
print opt_prob.solution(0)
Exemple #27
0
    f = 0
    for i in range(N-1):
        f += abs(y1[i]*100 - y2[i]*100)**2

    g = []

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================
opt_prob = Optimization('CST Parameterization', objfunc)
opt_prob.addVar('x1','c', lower=-2.0,upper=2.0, value=-1.0)
opt_prob.addVar('x2','c', lower=-2.0,upper=2.0, value=-1.0)
opt_prob.addVar('x3','c', lower=-2.0,upper=2.0, value=-1.0)
opt_prob.addVar('x4','c', lower=-2.0,upper=2.0, value=-1.0)
opt_prob.addVar('x5','c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x6','c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x7','c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addVar('x8','c', lower=-2.0, upper=2.0, value=1.0)
opt_prob.addObj('f')
print opt_prob

# Instantiate Optimizer (SLSQP) & Solve Problem
slsqp = SLSQP()
slsqp.setOption('IPRINT',-1)
slsqp(opt_prob, sens_type='FD')
print opt_prob.solution(0)
#==============================================================================
eng = matlab.engine.start_matlab()
#Go to directory where matlab file is
eng.cd('..')
eng.cd('SMA_temperature_strain_driven')

# =============================================================================
# 
# =============================================================================
chord = 1.
x_hinge = 0.75
safety = 0.005*chord

opt_prob = Optimization('Static model optimization',objfunc)
#xs_n
opt_prob.addVar('x1', 'c', lower = x_hinge/2. , upper = x_hinge - safety, value = 6.817445e-001)
#ys_n
opt_prob.addVar('x2', 'c', lower = -.9, upper = -0., value = -5.216475e-001)
#xs_p
opt_prob.addVar('x3', 'c', lower = x_hinge + safety, upper = chord - safety, value = 9.029895e-001)
#ys_p
opt_prob.addVar('x4', 'c', lower = 0., upper = .9, value = 8.726738e-001)
# #xl_n
# opt_prob.addVar('x5', 'c',  lower = x_hinge/2., upper = x_hinge - safety, value = 6.958111e-001)
# #yl_n
# opt_prob.addVar('x6', 'c', lower = -.9, upper = 0.9, value = -4.593744e-001)
# #xl_p
# opt_prob.addVar('x7', 'c', lower = x_hinge + safety, upper = chord - safety, value =  8.187166e-001)
# #yl_p
# opt_prob.addVar('x8', 'c', lower = -.9, upper = 0., value = -5.719241e-001)
    def optimizeTrajectory(self, plot_func=None):
        # use non-linear optimization to find parameters for minimal
        # condition number trajectory

        self.plot_func = plot_func

        if self.config['showOptimizationGraph']:
            self.initGraph()

        ## describe optimization problem with pyOpt classes

        from pyOpt import Optimization
        from pyOpt import ALPSO, SLSQP

        # Instanciate Optimization Problem
        opt_prob = Optimization('Trajectory optimization', self.objective_func)
        opt_prob.addObj('f')

        # add variables, define bounds
        # w_f - pulsation
        opt_prob.addVar('wf', 'c', value=self.wf_init, lower=self.wf_min, upper=self.wf_max)

        # q - offsets
        for i in range(self.dofs):
            opt_prob.addVar('q_%d'%i,'c', value=self.qinit[i], lower=self.qmin[i], upper=self.qmax[i])
        # a, b - sin/cos params
        for i in range(self.dofs):
            for j in range(self.nf[0]):
                opt_prob.addVar('a{}_{}'.format(i,j), 'c', value=self.ainit[i][j], lower=self.amin, upper=self.amax)
        for i in range(self.dofs):
            for j in range(self.nf[0]):
                opt_prob.addVar('b{}_{}'.format(i,j), 'c', value=self.binit[i][j], lower=self.bmin, upper=self.bmax)

        # add constraint vars (constraint functions are in obfunc)
        if self.config['minVelocityConstraint']:
            opt_prob.addConGroup('g', self.dofs*5, 'i')
        else:
            opt_prob.addConGroup('g', self.dofs*4, 'i')
        #print opt_prob

        initial = [v.value for v in list(opt_prob._variables.values())]

        if self.config['useGlobalOptimization']:
            ### optimize using pyOpt (global)
            opt = ALPSO()  #augmented lagrange particle swarm optimization
            opt.setOption('stopCriteria', 0)
            opt.setOption('maxInnerIter', 3)
            opt.setOption('maxOuterIter', self.config['globalOptIterations'])
            opt.setOption('printInnerIters', 1)
            opt.setOption('printOuterIters', 1)
            opt.setOption('SwarmSize', 30)
            opt.setOption('xinit', 1)
            #TODO: how to properly limit max number of function calls?
            # no. func calls = (SwarmSize * inner) * outer + SwarmSize
            self.iter_max = opt.getOption('SwarmSize') * opt.getOption('maxInnerIter') * opt.getOption('maxOuterIter') + opt.getOption('SwarmSize')

            # run fist (global) optimization
            try:
                #reuse history
                opt(opt_prob, store_hst=False, hot_start=True, xstart=initial)
            except NameError:
                opt(opt_prob, store_hst=False, xstart=initial)
            print(opt_prob.solution(0))

        ### pyOpt local

        # after using global optimization, get more exact solution with
        # gradient based method init optimizer (only local)
        opt2 = SLSQP()   #sequential least squares
        opt2.setOption('MAXIT', self.config['localOptIterations'])
        if self.config['verbose']:
            opt2.setOption('IPRINT', 0)
        # TODO: amount of function calls depends on amount of variables and iterations to approximate gradient
        # iterations are probably steps along the gradient. How to get proper no. of func calls?
        self.iter_max = "(unknown)"

        if self.config['useGlobalOptimization']:
            if self.last_best_sol is not None:
                #use best constrained solution
                for i in range(len(opt_prob._variables)):
                    opt_prob._variables[i].value = self.last_best_sol[i]
            else:
                #reuse previous solution
                for i in range(len(opt_prob._variables)):
                    opt_prob._variables[i].value = opt_prob.solution(0).getVar(i).value

            opt2(opt_prob, store_hst=False, sens_step=0.1)
        else:
            try:
                #reuse history
                opt2(opt_prob, store_hst=True, hot_start=True, sens_step=0.1)
            except NameError:
                opt2(opt_prob, store_hst=True, sens_step=0.1)

        local_sol = opt_prob.solution(0)
        if not self.config['useGlobalOptimization']:
            print(local_sol)
        local_sol_vec = np.array([local_sol.getVar(x).value for x in range(0,len(local_sol._variables))])

        if self.last_best_sol is not None:
            local_sol_vec = self.last_best_sol
            print("using last best constrained solution instead of given solver solution.")

        sol_wf, sol_q, sol_a, sol_b = self.vecToParams(local_sol_vec)

        print("testing final solution")
        self.iter_cnt = 0
        self.objective_func(local_sol_vec)
        print("\n")

        self.trajectory.initWithParams(sol_a, sol_b, sol_q, self.nf, sol_wf)

        if self.config['showOptimizationGraph']:
            plt.ioff()

        return self.trajectory
    g[0] = x[0]**2 - x[1] + 1
    g[1] = 1 - x[0] + (x[1] - 4)**2

    time.sleep(0.01)

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('G08 Global Constrained Problem', objfunc)
opt_prob.addVar('x1', 'c', lower=5.0, upper=1e-6, value=10.0)
opt_prob.addVar('x2', 'c', lower=5.0, upper=1e-6, value=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'i')
opt_prob.addCon('g2', 'i')

# Solve Problem (No-Parallelization)
alpso_none = ALPSO()
alpso_none.setOption('fileout', 0)
alpso_none(opt_prob)
if myrank == 0:
    print opt_prob.solution(0)
# end

# Solve Problem (SPM-Parallelization)
alpso_spm = ALPSO(pll_type='SPM')
Exemple #31
0
# =============================================================================
def objfunc(x):

    f = 100 * (x[1] - x[0]**2)**2 + (1 - x[0])**2
    g = []

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================
opt_prob = Optimization('Rosenbrock Unconstraint Problem', objfunc)
#List of references in the queue with their priority order
opt_prob.addVar('x1', 'c', lower=-10.0, upper=10.0, value=-3.0)
#The Processing capacity
opt_prob.addVar('x2', 'c', lower=-10.0, upper=10.0, value=-4.0)
opt_prob.addObj('f')
#Constraints
#Each queue has a given processing capacity expressed in number of workers
#Each worker can process 35 number of references per week
#Notice period to change the number of workers for one step is 8 weeks
#Max total capacity increase is 20% of nominal capacity
#Fast-lange capacity is fixed equal to 10% planned capacity
#Cost to be added in objective function for revising one date
# is equal to 1000 * number of overdue days

print opt_prob

# Instantiate Optimizer (PSQP) & Solve Problem
Exemple #32
0
def variogram_fit(SVExp,
                  Sb=(0.01, 400),
                  Rb=(2, 20),
                  Nb=(0, 400),
                  ab=(0, 2),
                  vb=(0, 1000)):
    # Array with functions to be called from the Variograms library
    VarFunArr = [
        VariogramFit.SVExponential, VariogramFit.SVGaussian,
        VariogramFit.SVSpherical, VariogramFit.SVCubic,
        VariogramFit.SVPentaspherical, VariogramFit.SVSinehole,
        VariogramFit.SVPower, VariogramFit.SVMatern
    ]

    # Names of functions for display only
    optFunNam = [
        'Exponential', 'Gaussian', 'Spherical', 'Cubic', 'Pentaspherical',
        'Sinehole', 'Power', 'Matern'
    ]

    # Boundaries semivariogram parameters
    #Sb = (0.01,400) # Limit for the sill
    #Rb = (2,20) # Limit for the range
    #Nb = (0,400) # Limit for the Nugget effect
    #ab = (0,2) # Limit for a in power variogram
    #vb = (0,1000) # Limit for Matern v parameters

    # Initial seed for variogram fit
    sr = random.uniform(Sb[0], Sb[1])
    rr = random.uniform(Rb[0], Rb[1])
    nr = random.uniform(Nb[0], Nb[1])
    ar = random.uniform(ab[0], ab[1])
    vr = random.uniform(vb[0], vb[1])
    return sr, rr, nr, ar, vr

    Var = []
    Res = []
    Mdl = []

    # Wrapper of minimisation function (RMSE) for semivariogram fitting
    def OptFun(x, *args):
        F, g, fail = VariogramFit.optFunMaster(x, SVExp, j, VarFunArr)
        if F == 9999:
            fail = 1
        else:
            Var.append(x)
            Res.append(F)
            Mdl.append(j)
        return F, g, fail

    print 'Initialising Variogram fit'
    print ''

    # Optimisation starts to minimise differences between experimental and
    # theoretical semivariograms
    for j in xrange(0, len(VarFunArr)):

        print 'Variogram Fitting ' + optFunNam[j]
        print ''

        VarProb = Optimization('Variogram Fitting: ' + optFunNam[j], OptFun)
        VarProb.addObj('RMSE')
        VarProb.addVar('Sill', 'c', lower=Sb[0], upper=Sb[1], value=sr)
        VarProb.addVar('Range', 'c', lower=Rb[0], upper=Rb[1], value=rr)
        VarProb.addVar('Nugget', 'c', lower=Nb[0], upper=Nb[1], value=nr)
        VarProb.addVar('Exponent (a)', 'c', lower=ab[0], upper=ab[1], value=ar)
        VarProb.addVar('Rank (v)', 'c', lower=vb[0], upper=vb[1], value=vr)

        args = (SVExp, j, VarFunArr, Var, Res, Mdl)
        optmz = ALHSO()
        optmz(VarProb)

        print VarProb.solution(0)
        print ''

    # Get position of best semivariogram
    k = numpy.argmin(Res)
    xopt = Var[k]
    ModOpt = Mdl[k]
    del Var
    del Res
    del Mdl

    print 'Theoretical variogram fit - Done!'
    print ''
    return xopt, ModOpt, VarFunArr
def main():
    ###########################################
    # Define some values
    ###########################################
    n_blades = 2
    n_elements = 10
    radius = unit_conversion.in2m(9.6) / 2
    root_cutout = 0.1 * radius
    dy = float(radius - root_cutout) / n_elements
    dr = float(1) / n_elements
    y = root_cutout + dy * np.arange(1, n_elements + 1)
    r = y / radius
    pitch = 0.0
    airfoils = (('SDA1075_494p', 0.0, 1.0), )
    allowable_Re = [
        1000000., 500000., 250000., 100000., 90000., 80000., 70000., 60000.,
        50000., 40000., 30000., 20000., 10000.
    ]
    vehicle_weight = 12.455
    max_chord = 0.3
    max_chord_tip = 5.
    alt = 0
    tip_loss = True
    mach_corr = False

    # Forward flight parameters
    v_inf = 4.  # m/s
    alpha0 = 0.0454  # Starting guess for trimmed alpha in radians
    n_azi_elements = 5

    # Mission times
    time_in_hover = 300.  # Time in seconds
    time_in_ff = 500.
    mission_time = [time_in_hover, time_in_ff]

    Cl_tables = {}
    Cd_tables = {}
    Clmax = {}
    # Get lookup tables
    if any(airfoil[0] != 'simple' for airfoil in airfoils):
        for airfoil in airfoils:
            Cl_table, Cd_table, Clmax = aero_coeffs.create_Cl_Cd_table(
                airfoil[0])

            Cl_tables[airfoil[0]] = Cl_table
            Cd_tables[airfoil[0]] = Cd_table
            Clmax[airfoil[0]] = Clmax

    # Create list of Cl functions. One for each Reynolds number. Cl_tables (and Cd_tables) will be empty for the
    # 'simple' case, therefore this will be skipped for the simple case. For the full table lookup case this will be
    # skipped because allowable_Re will be empty.
    Cl_funs = {}
    Cd_funs = {}
    lift_curve_info_dict = {}
    if Cl_tables and allowable_Re:
        Cl_funs = dict(
            zip(allowable_Re, [
                aero_coeffs.get_Cl_fun(Re, Cl_tables[airfoils[0][0]],
                                       Clmax[airfoils[0][0]][Re])
                for Re in allowable_Re
            ]))
        Cd_funs = dict(
            zip(allowable_Re, [
                aero_coeffs.get_Cd_fun(Re, Cd_tables[airfoils[0][0]])
                for Re in allowable_Re
            ]))
        lift_curve_info_dict = aero_coeffs.create_liftCurveInfoDict(
            allowable_Re, Cl_tables[airfoils[0][0]])

    ###########################################
    # Set design variable bounds
    ###########################################
    # Hover opt 500 gen, 1000 pop, 12.455 N weight, 9.6 in prop
    chord = np.array([
        0.11923604, 0.2168746, 0.31540216, 0.39822882, 0.42919, 0.35039799,
        0.3457828, 0.28567224, 0.23418368, 0.13502483
    ])
    twist = np.array([
        0.45316866, 0.38457724, 0.38225075, 0.34671967, 0.33151445, 0.28719111,
        0.25679667, 0.25099005, 0.19400679, 0.10926302
    ])
    omega = 3811.03596674 * 2 * np.pi / 60
    original = (omega, chord, twist)

    dtwist = np.array(
        [twist[i + 1] - twist[i] for i in xrange(len(twist) - 1)])
    dchord = np.array(
        [chord[i + 1] - chord[i] for i in xrange(len(chord) - 1)])
    twist0 = twist[0]
    chord0 = chord[0]

    omega_start = omega

    dtwist_start = dtwist
    dchord_start = dchord
    twist0_start = twist0
    chord0_start = chord0

    omega_lower = 2000 * 2 * np.pi / 60
    omega_upper = 8000.0 * 2 * np.pi / 60

    twist0_lower = 0. * 2 * np.pi / 360
    twist0_upper = 60. * 2 * np.pi / 360

    chord0_upper = 0.1198
    chord0_lower = 0.05

    dtwist_lower = -10.0 * 2 * np.pi / 360
    dtwist_upper = 10.0 * 2 * np.pi / 360
    dchord_lower = -0.1
    dchord_upper = 0.1

    opt_prob = Optimization('Mission Simulator', objfun)
    opt_prob.addVar('omega_h',
                    'c',
                    value=omega_start,
                    lower=omega_lower,
                    upper=omega_upper)
    opt_prob.addVar('twist0',
                    'c',
                    value=twist0_start,
                    lower=twist0_lower,
                    upper=twist0_upper)
    opt_prob.addVar('chord0',
                    'c',
                    value=chord0_start,
                    lower=chord0_lower,
                    upper=chord0_upper)
    opt_prob.addVarGroup('dtwist',
                         n_elements - 1,
                         'c',
                         value=dtwist_start,
                         lower=dtwist_lower,
                         upper=dtwist_upper)
    opt_prob.addVarGroup('dchord',
                         n_elements - 1,
                         'c',
                         value=dchord_start,
                         lower=dchord_lower,
                         upper=dchord_upper)
    opt_prob.addObj('f')
    opt_prob.addCon('thrust', 'i')
    opt_prob.addCon('c_tip', 'i')
    opt_prob.addConGroup('c_lower', n_elements, 'i')
    opt_prob.addConGroup('c_upper', n_elements, 'i')
    print opt_prob

    slsqp = SLSQP()
    slsqp.setOption('IPRINT', 1)
    slsqp.setOption('MAXIT', 1000)
    slsqp.setOption('ACC', 1e-8)
    fstr, xstr, inform = slsqp(opt_prob,
                               sens_type='FD',
                               n_blades=n_blades,
                               radius=radius,
                               dy=dy,
                               dr=dr,
                               y=y,
                               r=r,
                               pitch=pitch,
                               airfoils=airfoils,
                               vehicle_weight=vehicle_weight,
                               max_chord=max_chord,
                               tip_loss=tip_loss,
                               mach_corr=mach_corr,
                               Cl_funs=Cl_funs,
                               Cd_funs=Cd_funs,
                               Cl_tables=Cl_tables,
                               Cd_tables=Cd_tables,
                               allowable_Re=allowable_Re,
                               alt=alt,
                               v_inf=v_inf,
                               alpha0=alpha0,
                               mission_time=mission_time,
                               n_azi_elements=n_azi_elements,
                               lift_curve_info_dict=lift_curve_info_dict,
                               max_chord_tip=max_chord_tip)
    print opt_prob.solution(0)

    # pop_size = 300
    # max_gen = 500
    # opt_method = 'nograd'
    # nsga2 = NSGA2()
    # nsga2.setOption('PrintOut', 2)
    # nsga2.setOption('PopSize', pop_size)
    # nsga2.setOption('maxGen', max_gen)
    # nsga2.setOption('pCross_real', 0.85)
    # nsga2.setOption('xinit', 1)
    # fstr, xstr, inform = nsga2(opt_prob, n_blades=n_blades, radius=radius, dy=dy, dr=dr, y=y, r=r, pitch=pitch,
    #                            airfoils=airfoils, vehicle_weight=vehicle_weight, max_chord=max_chord, tip_loss=tip_loss,
    #                            mach_corr=mach_corr, Cl_funs=Cl_funs, Cd_funs=Cd_funs, Cl_tables=Cl_tables,
    #                            Cd_tables=Cd_tables, allowable_Re=allowable_Re, opt_method=opt_method, alt=alt,
    #                            v_inf=v_inf, alpha0=alpha0, mission_time=mission_time, n_azi_elements=n_azi_elements,
    #                            pop_size=pop_size, max_gen=max_gen, lift_curve_info_dict=lift_curve_info_dict,
    #                            max_chord_tip=max_chord_tip)
    # print opt_prob.solution(0)

    # opt_method = 'nograd'
    # xstart_alpso = np.concatenate((np.array([omega_start, twist0_start, chord0_start]), dtwist_start, dchord_start))
    # alpso = ALPSO()
    # alpso.setOption('xinit', 0)
    # alpso.setOption('SwarmSize', 200)
    # alpso.setOption('maxOuterIter', 100)
    # alpso.setOption('stopCriteria', 0)
    # fstr, xstr, inform = alpso(opt_prob, xstart=xstart_alpso,  n_blades=n_blades, n_elements=n_elements,
    #                            root_cutout=root_cutout, radius=radius, dy=dy, dr=dr, y=y, r=r, pitch=pitch,
    #                            airfoils=airfoils, thrust=thrust, max_chord=max_chord, tip_loss=tip_loss,
    #                            mach_corr=mach_corr, Cl_funs=Cl_funs, Cd_funs=Cd_funs, Cl_tables=Cl_tables,
    #                            Cd_tables=Cd_tables, allowable_Re=allowable_Re, opt_method=opt_method)
    # print opt_prob.solution(0)

    def get_performance(o, c, t):
        chord_meters = c * radius
        prop = propeller.Propeller(t,
                                   chord_meters,
                                   radius,
                                   n_blades,
                                   r,
                                   y,
                                   dr,
                                   dy,
                                   airfoils=airfoils,
                                   Cl_tables=Cl_tables,
                                   Cd_tables=Cd_tables)
        quad = quadrotor.Quadrotor(prop, vehicle_weight)

        ff_kwargs = {
            'propeller': prop,
            'pitch': pitch,
            'n_azi_elements': n_azi_elements,
            'allowable_Re': allowable_Re,
            'Cl_funs': Cl_funs,
            'Cd_funs': Cd_funs,
            'tip_loss': tip_loss,
            'mach_corr': mach_corr,
            'alt': alt,
            'lift_curve_info_dict': lift_curve_info_dict
        }
        trim0 = np.array([alpha0, o])
        alpha_trim, omega_trim, converged = trim.trim(quad, v_inf, trim0,
                                                      ff_kwargs)
        T_ff, H_ff, P_ff = bemt.bemt_forward_flight(
            quad,
            pitch,
            omega_trim,
            alpha_trim,
            v_inf,
            n_azi_elements,
            alt=alt,
            tip_loss=tip_loss,
            mach_corr=mach_corr,
            allowable_Re=allowable_Re,
            Cl_funs=Cl_funs,
            Cd_funs=Cd_funs,
            lift_curve_info_dict=lift_curve_info_dict)

        dT_h, P_h = bemt.bemt_axial(prop,
                                    pitch,
                                    o,
                                    allowable_Re=allowable_Re,
                                    Cl_funs=Cl_funs,
                                    Cd_funs=Cd_funs,
                                    tip_loss=tip_loss,
                                    mach_corr=mach_corr,
                                    alt=alt)
        return sum(dT_h), P_h, T_ff, P_ff, alpha_trim, omega_trim

    omega = xstr[0]
    twist0 = xstr[1]
    chord0 = xstr[2]
    dtwist = xstr[3:3 + len(r) - 1]
    dchord = xstr[3 + len(r) - 1:]

    twist = calc_twist_dist(twist0, dtwist)
    chord = calc_chord_dist(chord0, dchord)

    print "chord = " + repr(chord)
    print "twist = " + repr(twist)

    # twist_base = calc_twist_dist(twist0_base, dtwist_base)
    # chord_base = calc_chord_dist(chord0_base, dchord_base)

    perf_opt = get_performance(omega, chord, twist)
    perf_orig = get_performance(original[0], original[1], original[2])

    print "omega_orig = " + str(original[0])
    print "Hover Thrust of original = " + str(perf_orig[0])
    print "Hover Power of original = " + str(perf_orig[1])
    print "FF Thrust of original = " + str(perf_orig[2])
    print "FF Power of original = " + str(perf_orig[3])
    print "Trim original (alpha, omega) = (%f, %f)" % (perf_orig[4],
                                                       perf_orig[5])

    print "omega = " + str(omega * 60 / 2 / np.pi)
    print "Hover Thrust of optimized = " + str(perf_opt[0])
    print "Hover Power of optimized = " + str(perf_opt[1])
    print "FF Thrust of optimized = " + str(perf_opt[2])
    print "FF Power of optimized = " + str(perf_opt[3])
    print "Trim optimized (alpha, omega) = (%f, %f)" % (perf_opt[4],
                                                        perf_opt[5])
    # print "Omega base = " + str(omega_start*60/2/np.pi)
    # print "Thrust of base = " + str(sum(perf_base[0]))
    # print "Power of base = " + str(sum(perf_base[1]))
    #
    plt.figure(1)
    plt.plot(r, original[1], '-b')
    plt.plot(r, chord, '-r')
    plt.xlabel('radial location')
    plt.ylabel('c/R')
    plt.legend(['start', 'opt'])

    plt.figure(2)
    plt.plot(r, original[2] * 180 / np.pi, '-b')
    plt.plot(r, twist * 180 / np.pi, '-r')
    plt.xlabel('radial location')
    plt.ylabel('twist')
    plt.legend(['start', 'opt'])

    plt.show()
Exemple #34
0
    g[0] = x[0]**2 - x[1] + 1
    g[1] = 1 - x[0] + (x[1]-4)**2
    
    time.sleep(0.01)
    
    fail = 0
    return f,g, fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('G08 Global Constrained Problem',objfunc)
opt_prob.addVar('x1','c',lower=5.0,upper=1e-6,value=10.0)
opt_prob.addVar('x2','c',lower=5.0,upper=1e-6,value=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
opt_prob.addCon('g2','i')

# Solve Problem (No-Parallelization)
alpso_none = ALPSO()
alpso_none.setOption('fileout',0)
alpso_none(opt_prob)
if myrank == 0:
    print opt_prob.solution(0)
#end

# Solve Problem (SPM-Parallelization)
alpso_spm = ALPSO(pll_type='SPM')
#==============================================================================
eng = matlab.engine.start_matlab()
#Go to directory where matlab file is
eng.cd('..')
eng.cd('SMA_temperature_strain_driven')

# =============================================================================
# 
# =============================================================================
chord = 1.
x_hinge = 0.75
safety = 0.005*chord

opt_prob = Optimization('Static model optimization',objfunc)
#xs_n
opt_prob.addVar('x1', 'c', lower = x_hinge/2. , upper = x_hinge - safety, value = 6.817445e-001)
#ys_n
opt_prob.addVar('x2', 'c', lower = -.9, upper = -0., value = -5.216475e-001)
#xs_p
opt_prob.addVar('x3', 'c', lower = x_hinge + safety, upper = chord - safety, value = 9.029895e-001)
#ys_p
opt_prob.addVar('x4', 'c', lower = 0., upper = .9, value = 8.726738e-001)
#xl_n
opt_prob.addVar('x5', 'c',  lower = x_hinge/2., upper = x_hinge - safety, value = 6.958111e-001)
#yl_n
opt_prob.addVar('x6', 'c', lower = -.9, upper = 0.9, value = -4.593744e-001)
#xl_p
opt_prob.addVar('x7', 'c', lower = x_hinge + safety, upper = chord - safety, value =  8.187166e-001)
#yl_p
opt_prob.addVar('x8', 'c', lower = -.9, upper = 0., value = -5.719241e-001)
Exemple #36
0
	g = [0.0]*2
	g[0] = 3 - x[0]
	g[1] = 2 - x[1]
	
	fail = 0
	
	return f,g,fail
	

# =============================================================================
# 
# =============================================================================

# Instanciate Optimization Problem 
opt_prob = Optimization('TOY Constraint Problem',objfunc)
opt_prob.addVar('x1','c',value=1.0,lower=0.0,upper=10.0)
opt_prob.addVar('x2','c',value=1.0,lower=0.0,upper=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
opt_prob.addCon('g2','i')
print opt_prob

# Instanciate Optimizer (ALPSO) & Solve Problem Storing History
slsqp = SLSQP()
slsqp.setOption('IFILE','slsqp1.out')
slsqp(opt_prob,store_hst=True)
print opt_prob.solution(0)

# Solve Problem Using Stored History (Warm Start)
slsqp.setOption('IFILE','slsqp2.out')
slsqp(opt_prob, store_hst=True, hot_start='slsqp1')
        fail=1

    os.chdir('../..')
    
    CASECOUNT+=1
        
    return f,g,fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('Minimize Drag',objfunc)
opt_prob.addVar('x1','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x2','c',lower=1.,upper=30.,value=15.0)
opt_prob.addVar('x3','c',lower=1.,upper=30.,value=15.0)
opt_prob.addVar('x4','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x5','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x6','c',lower=1.,upper=13.,value=6.0)
opt_prob.addObj('f')
#opt_prob.addCon('g','i')
print opt_prob

mkdirCommand='mkdir -p workDir'
subprocess.call(mkdirCommand,shell=True)

# Instantiate Optimizer (NSGA2) & Solve Problem
nsga2 = NSGA2()
nsga2.setOption('PopSize',8)
def RunCalibration(ConceptualModel,
                   Paths,
                   Basic_inputs,
                   SpatialVarFun,
                   SpatialVarArgs,
                   OF,
                   OF_args,
                   Q_obs,
                   OptimizationArgs,
                   printError=None):
    """
    =======================================================================
        RunCalibration(Paths, p2, Q_obs, UB, LB, SpatialVarFun, lumpedParNo, lumpedParPos, objective_function, printError=None, *args):
    =======================================================================
    this function runs the conceptual distributed hydrological model
    
    Inputs:
    ----------
        1-Paths:
            1-PrecPath:
                [String] path to the Folder contains precipitation rasters
            2-Evap_Path:
                [String] path to the Folder contains Evapotranspiration rasters
            3-TempPath:
                [String] path to the Folder contains Temperature rasters
            4-FlowAccPath:
                [String] path to the Flow Accumulation raster of the catchment (it should
                include the raster name and extension)
            5-FlowDPath:
                [String] path to the Flow Direction raster of the catchment (it should
                include the raster name and extension)
        
        2-Basic_inputs:
            1-p2:
                [List] list of unoptimized parameters
                p2[0] = tfac, 1 for hourly, 0.25 for 15 min time step and 24 for daily time step
                p2[1] = catchment area in km2
            2-init_st:
                [list] initial values for the state variables [sp,sm,uz,lz,wc] in mm
            3-UB:
                [Numeric] upper bound of the values of the parameters
            4-LB:
                [Numeric] Lower bound of the values of the parameters
        3-Q_obs:
            [Numeric] Observed values of discharge 
        
        6-lumpedParNo:
            [int] nomber of lumped parameters, you have to enter the value of 
            the lumped parameter at the end of the list, default is 0 (no lumped parameters)
        7-lumpedParPos:
            [List] list of order or position of the lumped parameter among all
            the parameters of the lumped model (order starts from 0 to the length 
            of the model parameters), default is [] (empty), the following order
            of parameters is used for the lumped HBV model used
            [ltt, utt, rfcf, sfcf, ttm, cfmax, cwh, cfr, fc, beta, e_corr, etf, lp,
            c_flux, k, k1, alpha, perc, pcorr, Kmuskingum, Xmuskingum]
        8-objective_function:
            [function] objective function to calculate the performance of the model
            and to be used in the calibration
        9-*args:
            other arguments needed on the objective function
            
    Outputs:
    ----------
        1- st:
            [4D array] state variables
        2- q_out:
            [1D array] calculated Discharge at the outlet of the catchment
        3- q_uz:
            [3D array] Distributed discharge for each cell
    
    Example:
    ----------
        PrecPath = prec_path="meteodata/4000/calib/prec"
        Evap_Path = evap_path="meteodata/4000/calib/evap"
        TempPath = temp_path="meteodata/4000/calib/temp"
        FlowAccPath = "GIS/4000/acc4000.tif"
        FlowDPath = "GIS/4000/fd4000.tif"
        ParPath = "meteodata/4000/"+"parameters.txt"
        p2=[1, 227.31]
        st, q_out, q_uz_routed = RunModel(PrecPath,Evap_Path,TempPath,DemPath,
                                          FlowAccPath,FlowDPath,ParPath,p2)
    """
    ### inputs validation
    # data type

    assert len(Paths) == 5, "Paths should include 5 folder pathes " + str(
        len(Paths)) + " paths are only provided"

    PrecPath = Paths[0]
    Evap_Path = Paths[1]
    TempPath = Paths[2]
    #    DemPath=Paths[3]
    FlowAccPath = Paths[3]
    FlowDPath = Paths[4]

    assert type(PrecPath) == str, "PrecPath input should be string type"
    assert type(Evap_Path) == str, "Evap_Path input should be string type"
    assert type(TempPath) == str, "TempPath input should be string type"
    #    assert type(DemPath)== str, "DemPath input should be string type"
    assert type(FlowAccPath) == str, "FlowAccPath input should be string type"
    assert type(FlowDPath) == str, "FlowDPath input should be string type"

    # input values
    #    dem_ext=DemPath[-4:]
    #    assert dem_ext == ".tif", "please add the extension at the end of the DEM raster path input"
    acc_ext = FlowAccPath[-4:]
    assert acc_ext == ".tif", "please add the extension at the end of the Flow accumulation raster path input"
    fd_ext = FlowDPath[-4:]
    assert fd_ext == ".tif", "please add the extension at the end of the Flow Direction path input"

    # check wether the path exists or not
    assert os.path.exists(
        PrecPath), PrecPath + " you have provided does not exist"
    assert os.path.exists(
        Evap_Path), Evap_Path + " path you have provided does not exist"
    assert os.path.exists(
        TempPath), TempPath + " path you have provided does not exist"
    #    assert os.path.exists(DemPath), DemPath+ " you have provided does not exist"
    assert os.path.exists(
        FlowAccPath), FlowAccPath + " you have provided does not exist"
    assert os.path.exists(
        FlowDPath), FlowDPath + " you have provided does not exist"

    # check wether the folder has the rasters or not
    assert len(os.listdir(
        PrecPath)) > 0, PrecPath + " folder you have provided is empty"
    assert len(os.listdir(
        Evap_Path)) > 0, Evap_Path + " folder you have provided is empty"
    assert len(os.listdir(
        TempPath)) > 0, TempPath + " folder you have provided is empty"

    # basic inputs
    # check if all inputs are included
    assert all(
        ["p2", "init_st", "UB", "LB", "snow "][i] in Basic_inputs.keys()
        for i in range(
            4)), "Basic_inputs should contain ['p2','init_st','UB','LB'] "

    p2 = Basic_inputs['p2']
    init_st = Basic_inputs["init_st"]
    UB = Basic_inputs['UB']
    LB = Basic_inputs['LB']
    snow = Basic_inputs['snow']

    assert len(UB) == len(LB), "length of UB should be the same like LB"

    # check objective_function
    assert callable(OF), "second argument should be a function"

    if OF_args == None:
        OF_args = []

    # read data
    ### meteorological data
    prec = GIS.ReadRastersFolder(PrecPath)
    evap = GIS.ReadRastersFolder(Evap_Path)
    temp = GIS.ReadRastersFolder(TempPath)
    print("meteorological data are read successfully")
    #### GIS data
    #    dem= gdal.Open(DemPath)
    acc = gdal.Open(FlowAccPath)
    fd = gdal.Open(FlowDPath)
    print("GIS data are read successfully")

    ### optimization

    # get arguments
    store_history = OptimizationArgs[0]
    history_fname = OptimizationArgs[1]
    # check optimization arguement
    assert store_history != 0 or store_history != 1, "store_history should be 0 or 1"
    assert type(
        history_fname) == str, "history_fname should be of type string "
    assert history_fname[
        -4:] == ".txt", "history_fname should be txt file please change extension or add .txt ad the end of the history_fname"

    print('Calibration starts')

    ### calculate the objective function
    def opt_fun(par):
        try:
            # parameters
            klb = float(par[-2])
            kub = float(par[-1])
            par = par[:-2]

            par_dist = SpatialVarFun(par, *SpatialVarArgs, kub=kub, klb=klb)

            #run the model
            _, q_out, q_uz_routed, q_lz_trans = Wrapper.Dist_model(
                ConceptualModel, acc, fd, prec, evap, temp, par_dist, p2, snow,
                init_st)

            # calculate performance of the model
            try:
                error = OF(Q_obs, q_out, q_uz_routed, q_lz_trans, *OF_args)
            except TypeError:  # if no of inputs less than what the function needs
                assert 1 == 5, "the objective function you have entered needs more inputs please enter then in a list as *args"

            # print error
            if printError != 0:
                print(error)
                print(par)

            fail = 0
        except:
            error = np.nan
            fail = 1

        return error, [], fail

    ### define the optimization components
    opt_prob = Optimization('HBV Calibration', opt_fun)
    for i in range(len(LB)):
        opt_prob.addVar('x{0}'.format(i), type='c', lower=LB[i], upper=UB[i])

    print(opt_prob)

    opt_engine = ALHSO(etol=0.0001,
                       atol=0.0001,
                       rtol=0.0001,
                       stopiters=10,
                       hmcr=0.5,
                       par=0.5)  #,filename='mostafa.out'

    Optimizer.__init__(
        opt_engine,
        def_options={
            'hms': [int, 9],  # Memory Size [1,50]
            'hmcr': [float, 0.95
                     ],  # Probability rate of choosing from memory [0.7,0.99]
            'par': [float, 0.99],  # Pitch adjustment rate [0.1,0.99]
            'dbw': [int, 2000],  # Variable Bandwidth Quantization
            'maxoutiter':
            [int, 2e3
             ],  # Maximum Number of Outer Loop Iterations (Major Iterations)
            'maxinniter':
            [int, 2e2
             ],  # Maximum Number of Inner Loop Iterations (Minor Iterations)
            'stopcriteria': [int, 1],  # Stopping Criteria Flag
            'stopiters': [
                int, 20
            ],  # Consecutively Number of Outer Iterations for which the Stopping Criteria must be Satisfied
            'etol': [float,
                     0.0001],  # Absolute Tolerance for Equality constraints
            'itol': [float,
                     0.0001],  # Absolute Tolerance for Inequality constraints 
            'atol': [float,
                     0.0001],  # Absolute Tolerance for Objective Function 1e-6
            'rtol': [float,
                     0.0001],  # Relative Tolerance for Objective Function
            'prtoutiter':
            [int,
             0],  # Number of Iterations Before Print Outer Loop Information
            'prtinniter':
            [int,
             0],  # Number of Iterations Before Print Inner Loop Information
            'xinit':
            [int,
             0],  # Initial Position Flag (0 - no position, 1 - position given)
            'rinit': [float, 1.0],  # Initial Penalty Factor
            'fileout': [int,
                        store_history],  # Flag to Turn On Output to filename
            'filename': [
                str, 'parameters.txt'
            ],  # We could probably remove fileout flag if filename or fileinstance is given
            'seed':
            [float,
             0.5],  # Random Number Seed (0 - Auto-Seed based on time clock)
            'scaling': [
                int, 1
            ],  # Design Variables Scaling Flag (0 - no scaling, 1 - scaling between [-1,1]) 
        })

    res = opt_engine(opt_prob)

    return res
    f = a1 * (x[1] - x[0]**2.)**2. + (a2 - x[0])**2.
    g = [0.0] * 2
    g[0] = x[0]**2. + x[1]**2.0 - a3

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('Rosenbrock Constrained Problem', objfunc)
opt_prob.addVar('x1', 'c', lower=0.0, upper=1.0, value=0.5)
opt_prob.addVar('x2', 'c', lower=0.0, upper=1.0, value=0.5)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'i')
print opt_prob

# Arguments to pass into objfunc
a1 = 100.0
a2 = 1.0
a3 = 1.0

# Instantiate Optimizer (SLSQP) & Solve Problem
slsqp = SLSQP()
slsqp.setOption('IPRINT', -1)
slsqp(opt_prob, sens_type='FD', a12=[a1, a2], a3=a3)
print opt_prob.solution(0)
Exemple #40
0
    g[0] = x[0] + 2.*x[1] + 2.*x[2] - 72.0
    g[1] = -x[0] - 2.*x[1] - 2.*x[2]
    
    time.sleep(0.5)
    
    fail = 0
    return f,g, fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('TP37 Constrained Problem',objfunc)
opt_prob.addVar('x1','c',lower=0.0,upper=42.0,value=10.0)
opt_prob.addVar('x2','c',lower=0.0,upper=42.0,value=10.0)
opt_prob.addVar('x3','c',lower=0.0,upper=42.0,value=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1','i')
opt_prob.addCon('g2','i')

# Solve Problem (No-Parallelization)
nlpqlp_none = NLPQLP()
nlpqlp_none.setOption('IPRINT',0)
nlpqlp_none(opt_prob)
if myrank == 0:
    print(opt_prob.solution(0))
#end

# Solve Problem (Parallel Gradient)
Exemple #41
0
     mymodelstruct = comm.bcast(mymodelstruct, root=0)
     isdrude = comm.bcast(isdrude, root=0)
     n = comm.bcast(n, root=0)
     myinputdata = comm.bcast(myinputdata, root=0) 
     z = comm.bcast(z, root=0)
     pathwithoutsample = comm.bcast(pathwithoutsample, root=0)
     pathwithsample = comm.bcast(pathwithsample, root=0)
 except:
     print("No parallelization")
 
 ## Optimization dans le cas PyOpt swarm particle ALPSO without parallelization (also works with parallelization)
 if algo>1:
     interm2=0  ## Intermediate variable with a function similar to interm
     opt_prob = Optimization('Dielectric modeling based on TDS pulse fitting',objfunc)
     if zvariable==1:
         opt_prob.addVar('thickness','c',lower=lb[0],upper=up[0],value=drudeinput[0])
         interm2=interm2+1
     if mymodelstruct==2:       #in case of TDCMT
         opt_prob.addVar('w0 tdcmt','c',lower=lb[0+interm2],upper=up[0+interm2],value=drudeinput[0+interm2])
         opt_prob.addVar('tau0','c',lower=lb[1+interm2],upper=up[1+interm2],value=drudeinput[1+interm2])
         opt_prob.addVar('tau1','c',lower=lb[2+interm2],upper=up[2+interm2],value=drudeinput[2+interm2])
         opt_prob.addVar('tau2','c',lower=lb[3+interm2],upper=up[3+interm2],value=drudeinput[3+interm2])
         opt_prob.addVar('delta theta','c',lower=lb[4+interm2],upper=up[4+interm2],value=drudeinput[4+interm2])
         interm2=interm2+5
 
 
     opt_prob.addVar('eps inf','c',lower=lb[0+interm2],upper=up[0+interm2],value=drudeinput[0+interm2])
     if isdrude==1:
         opt_prob.addVar('omega p','c',lower=lb[1+interm2],upper=up[1+interm2],value=drudeinput[1+interm2])
         opt_prob.addVar('gamma','c',lower=lb[2+interm2],upper=up[2+interm2],value=drudeinput[2+interm2])
         interm2=interm2+2
Exemple #42
0
def optimize_twist(**k):

    omega = k['omega']
    omega_lower = k['omega_lower']
    omega_upper = k['omega_upper']
    twist0 = k['twist0']
    twist0_lower = k['twist0_lower']
    twist0_upper = k['twist0_upper']
    n_elements = k['n_elements']
    dtwist = k['dtwist']
    dtwist_lower = k['dtwist_lower']
    dtwist_upper = k['dtwist_upper']

    opt_prob_fc = Optimization('Rotor in Hover w/ Fixed Chord',
                               objfun_optimize_twist)
    opt_prob_fc.addVar('omega',
                       'c',
                       value=omega,
                       lower=omega_lower,
                       upper=omega_upper)
    opt_prob_fc.addVar('twist0',
                       'c',
                       value=twist0,
                       lower=twist0_lower,
                       upper=twist0_upper)
    opt_prob_fc.addVarGroup('dtwist',
                            n_elements - 1,
                            'c',
                            value=dtwist,
                            lower=dtwist_lower,
                            upper=dtwist_upper)
    opt_prob_fc.addObj('f')
    opt_prob_fc.addCon('thrust', 'i')

    n_blades = k['n_blades']
    root_cutout = k['root_cutout']
    radius = k['radius']
    dy = k['dy']
    dr = k['dr']
    y = k['y']
    r = k['r']
    pitch = k['pitch']
    airfoils = k['airfoils']
    thrust = k['thrust']
    chord = k['chord']
    allowable_Re = k['allowable_Re']
    Cl_tables = k['Cl_tables']
    Cd_tables = k['Cd_tables']
    Cl_funs = k['Cl_funs']
    Cd_funs = k['Cd_funs']
    tip_loss = k['tip_loss']
    mach_corr = k['mach_corr']
    alt = k['alt']

    # Routine for optimizing twist with a constant chord
    slsqp2 = SLSQP()
    slsqp2.setOption('IPRINT', 1)
    slsqp2.setOption('MAXIT', 200)
    slsqp2.setOption('ACC', 1e-7)
    fstr, xstr, inform = slsqp2(opt_prob_fc,
                                sens_type='FD',
                                n_blades=n_blades,
                                n_elements=n_elements,
                                root_cutout=root_cutout,
                                radius=radius,
                                dy=dy,
                                dr=dr,
                                y=y,
                                r=r,
                                pitch=pitch,
                                airfoils=airfoils,
                                thrust=thrust,
                                tip_loss=tip_loss,
                                mach_corr=mach_corr,
                                omega=omega,
                                chord=chord,
                                allowable_Re=allowable_Re,
                                Cl_tables=Cl_tables,
                                Cd_tables=Cd_tables,
                                Cl_funs=Cl_funs,
                                Cd_funs=Cd_funs,
                                alt=alt)

    return fstr, xstr
Exemple #43
0
    g = [0.0] * 2
    g[0] = x[0] + 2. * x[1] + 2. * x[2] - 72.0
    g[1] = -x[0] - 2. * x[1] - 2. * x[2]

    time.sleep(0.5)

    fail = 0
    return f, g, fail

# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('TP37 Constrained Problem', objfunc)
opt_prob.addVar('x1', 'c', lower=0.0, upper=42.0, value=10.0)
opt_prob.addVar('x2', 'c', lower=0.0, upper=42.0, value=10.0)
opt_prob.addVar('x3', 'c', lower=0.0, upper=42.0, value=10.0)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'i')
opt_prob.addCon('g2', 'i')

# Instantiate Optimizer (SLSQP)
slsqp = SLSQP()
slsqp.setOption('IPRINT', -1)

# Solve Problem (Without Parallel Gradient)
slsqp(opt_prob, sens_type='CS')

# end
Exemple #44
0
        fail=1

    os.chdir('../..')
    
    CASECOUNT+=1
        
    return f,g,fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('Minimize Drag',objfunc)
opt_prob.addVar('x1','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x2','c',lower=1.,upper=30.,value=15.0)
opt_prob.addVar('x3','c',lower=1.,upper=30.,value=15.0)
opt_prob.addVar('x4','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x5','c',lower=1.,upper=25.,value=12.0)
opt_prob.addVar('x6','c',lower=1.,upper=13.,value=6.0)
opt_prob.addObj('f')
#opt_prob.addCon('g','i')
print opt_prob

mkdirCommand='mkdir -p workDir'
subprocess.call(mkdirCommand,shell=True)

# Instantiate Optimizer (NSGA2) & Solve Problem
nsga2 = NSGA2()
nsga2.setOption('PopSize',8)
Exemple #45
0
                                                          (x[1] - b[i])**2)))
    #end

    g = [0.0] * 1
    g[0] = 20.04895 - (x[0] + 2.0)**2 - (x[1] + 1.0)**2

    fail = 0

    return f, g, fail


# =============================================================================
#
# =============================================================================
opt_prob = Optimization('Langermann Function 11', objfunc)
opt_prob.addVar('x1', 'c', lower=-2.0, upper=10.0, value=8.0)
opt_prob.addVar('x2', 'c', lower=-2.0, upper=10.0, value=8.0)
opt_prob.addObj('f')
opt_prob.addCon('g', 'i')
print(opt_prob)

# Global Optimization
nsga2 = NSGA2()
nsga2(opt_prob)
print(opt_prob.solution(0))

# Local Optimization Refinement
slsqp = SLSQP()
slsqp(opt_prob.solution(0))
print(opt_prob.solution(0).solution(0))
    g[1] = 1.333333333 - x[1]
    g[2] = 2.666666666 - x[2]

    time.sleep(0.005)

    fail = 0
    return f, g, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization('MIDACO Toy Problem', objfunc)
opt_prob.addVar('x1', 'c', lower=1.0, upper=4.0, value=1.0)
opt_prob.addVar('x2', 'c', lower=1.0, upper=4.0, value=1.0)
opt_prob.addVar('x3', 'c', lower=1.0, upper=4.0, value=1.0)
opt_prob.addVar('x4', 'c', lower=1.0, upper=4.0, value=1.0)
opt_prob.addObj('f')
opt_prob.addCon('g1', 'e')
opt_prob.addCon('g2', 'i')
opt_prob.addCon('g3', 'i')

# Solve Problem (No-Parallelization)
midaco_none = MIDACO()
midaco_none.setOption('IPRINT', -1)
midaco_none.setOption('MAXEVAL', 50000)
midaco_none(opt_prob)
if myrank == 0:
    print opt_prob.solution(0)
Exemple #47
0
    g[1] = 1.333333333 - x[1]
    g[2] = 2.666666666 - x[2]
    
    time.sleep(0.005)
    
    fail = 0
    return f,g, fail
    

# =============================================================================
# 
# =============================================================================

# Instantiate Optimization Problem 
opt_prob = Optimization('MIDACO Toy Problem',objfunc)
opt_prob.addVar('x1','c',lower=1.0,upper=4.0,value=1.0)
opt_prob.addVar('x2','c',lower=1.0,upper=4.0,value=1.0)
opt_prob.addVar('x3','c',lower=1.0,upper=4.0,value=1.0)
opt_prob.addVar('x4','c',lower=1.0,upper=4.0,value=1.0)
opt_prob.addObj('f')
opt_prob.addCon('g1','e')
opt_prob.addCon('g2','i')
opt_prob.addCon('g3','i')

# Solve Problem (No-Parallelization)
midaco_none = MIDACO()
midaco_none.setOption('IPRINT',-1)
midaco_none.setOption('MAXEVAL',50000)
midaco_none(opt_prob)
if myrank == 0:
    print(opt_prob.solution(0))
Exemple #48
0
design_problem = PyOptOptimization(dp.comm,
                                   dp.eval_objcon,
                                   dp.eval_objcon_grad,
                                   number_of_steps=3)

opt_prob = Optimization('crm_togw', design_problem.eval_obj_con)

opt_prob.addObj('TOGW')
opt_prob.addCon('cruise_lift', type='e')
opt_prob.addCon('maneuver_lift', type='e')
opt_prob.addCon('area', type='e')
opt_prob.addCon('ksfailure', type='i')

for i in range(187 - 3):
    opt_prob.addCon('Smoothness %i a' % i, type='i')
    opt_prob.addCon('Smoothness %i b' % i, type='i')

variables = dp.model.get_variables()

for i, var in enumerate(variables):
    print('i', i)
    opt_prob.addVar(var.name,
                    type='c',
                    value=var.value / dp.var_scale[i],
                    lower=var.lower / dp.var_scale[i],
                    upper=var.upper / dp.var_scale[i])

opt = SLSQP(pll_type='POA')
opt.setOption('MAXIT', 999)
opt(opt_prob, sens_type=design_problem.eval_obj_con_grad, disp_opts=True)
        for i in range(len(DM_php)):
            num = num + DM_php[i] * float(NUTRIENTS_php[j - 2][i]) * x[i]
        g[g_index +
          1] = -(num - divisor * mult_const * float(CONS_LHS_MIN_2_php[j - 1]))

    #time.sleep(0.5)
    fail = 0
    return f, g, fail

opt_prob = Optimization('TP37 Constrained Problem', objfunc)

for i in range(1, len(CONS_LHS_MIN_1_php) + 1):
    x_value = 'x' + str(i)
    opt_prob.addVar(x_value,
                    'c',
                    lower=float(CONS_LHS_MIN_1_php[i - 1]),
                    upper=float(CONS_RHS_MAX_1_php[i - 1]),
                    value=1)
opt_prob.addObj('f')

for i in range(1, len(NUTRIENTS_php) * 2 + 1):
    g_value = 'g' + str(i)
    opt_prob.addCon(g_value, 'i')

# Instantiate Optimizer (SLSQP)
slsqp = SLSQP()
slsqp.setOption('IPRINT', 2)

# Solve Problem (Without Parallel Gradient)
[fstr, xstr, inform] = slsqp(opt_prob, sens_type='CS')
if myrank == 0:
Exemple #50
0
        f += -(c[i]*exp(-(1/pi)*((x[0]-a[i])**2 + (x[1]-b[i])**2))*cos(pi*((x[0]-a[i])**2 + (x[1]-b[i])**2)))
    #end
    
    g = [0.0]*1
    g[0] = 20.04895 - (x[0]+2.0)**2 - (x[1]+1.0)**2
    
    fail = 0
    
    return f,g,fail
    

# =============================================================================
# 
# =============================================================================
opt_prob = Optimization('Langermann Function 11',objfunc)
opt_prob.addVar('x1','c',lower=-2.0,upper=10.0,value=8.0)
opt_prob.addVar('x2','c',lower=-2.0,upper=10.0,value=8.0)
opt_prob.addObj('f')
opt_prob.addCon('g','i')
print opt_prob

# Global Optimization
nsga2 = NSGA2()
nsga2(opt_prob)
print opt_prob.solution(0)

# Local Optimization Refinement
slsqp = SLSQP()
slsqp(opt_prob.solution(0))
print opt_prob.solution(0).solution(0)
    ys = 36260.0  # psi
    fs = 1.5
    dtruss = TwoBarTruss(rho, L, P, E, ys, fs)

    # Optimization Problem
    optproblem = TwoBarTrussOpt(MPI.COMM_WORLD, dtruss)
    opt_prob = Optimization(args.logfile, optproblem.evalObjCon)

    # Add functions
    opt_prob.addObj('weight')
    opt_prob.addCon('buckling-bar1', type='i')
    opt_prob.addCon('failure-bar1', type='i')
    opt_prob.addCon('failure-bar2', type='i')

    # Add variables
    opt_prob.addVar('area-1', type='c', value=1.0, lower=1.0e-3, upper=2.0)
    opt_prob.addVar('area-2', type='c', value=1.0, lower=1.0e-3, upper=2.0)
    opt_prob.addVar('height', type='c', value=4.0, lower=4.0, upper=10.0)

    # Optimization algorithm
    if args.algorithm == 'ALGENCAN':
        opt = ALGENCAN()
        opt.setOption('iprint', 2)
        opt.setOption('epsfeas', 1e-6)
        opt.setOption('epsopt', 1e-6)
    else:
        opt = SLSQP(pll_type='POA')
        opt.setOption('MAXIT', 999)

    opt(opt_prob,
        sens_type=optproblem.evalObjConGradient,
Exemple #52
0
    g_con[2][1] = 2.0 * x[1] - 1
    g_con[2][2] = 2.0 * x[2]
    g_con[2][3] = -1.0

    fail = 0

    return g_obj, g_con, fail


# =============================================================================
#
# =============================================================================

# Instantiate Optimization Problem
opt_prob = Optimization("Constrained Rosen-Suzuki", objfunc)
opt_prob.addVar("x1", "c", value=1.5)
opt_prob.addVar("x2", "c", value=1.5)
opt_prob.addVar("x3", "c", value=1.5)
opt_prob.addVar("x4", "c", value=1.5)
opt_prob.addObj("f")
opt_prob.addCon("g1", "i")
opt_prob.addCon("g2", "i")
opt_prob.addCon("g3", "i")
print opt_prob

# Instantiate Optimizer (CONMIN)
conmin = CONMIN()

# Solve Problem with Optimizer Using Finite Differences
conmin(opt_prob, sens_type="FD")
print opt_prob.solution(0)