Exemple #1
0
    def __init__(self, nlpy_model, **kwargs):
        """
        :parameters:

            :nlpy_model: nonlinear problem from the NLPModel class or
                         from AmplModel class
        """

        if nlpy_model.__module__ == 'nlpy.model.amplpy':
            print 'AMPL model'
            print "AMPL isn't handling complex values"
            print "Choose 'FD' or 'opt_prob.grad_func' for sensitivity"

        # Initialize model.
        Optimization.__init__(self, nlpy_model.name, lambda x:
                                    (self.nlpy_model.obj(x),
                                     self.nlpy_model.cons(x).tolist(),0),
                                     var_set={}, obj_set={}, con_set={},
                                     use_groups=False, **kwargs)

        self.nlpy_model = nlpy_model

        self.addObj('f')

        # Assigning lower and upper bounds on variables
        for i in range(0,self.nlpy_model.n):

            if i in self.nlpy_model.lowerB:
                self.addVar("x"+ "%d"%(i+1), lower=self.nlpy_model.Lvar[i],
                        upper=numpy.inf, value=self.nlpy_model.x0[i])
            elif i in self.nlpy_model.upperB:
                self.addVar("x"+ "%d"%(i+1), lower=-numpy.inf,
                        upper=self.nlpy_model.Uvar[i], value=self.nlpy_model.x0[i])
            elif i in self.nlpy_model.rangeB:
                self.addVar("x"+ "%d"%(i+1), lower=self.nlpy_model.Lvar[i],
                        upper=self.nlpy_model.Uvar[i], value=self.nlpy_model.x0[i])
            elif i in self.nlpy_model.freeB:
                self.addVar("x"+ "%d"%(i+1), value=self.nlpy_model.x0[i],
                            lower=-numpy.inf, upper=numpy.inf)

        # Assigning lower and upper bounds on constraints
        for i in range(0,nlpy_model.m):

            if i in nlpy_model.lowerC:
                self.addCon("g"+"%d"%(i+1), 'i', lower=nlpy_model.Lcon[i],
                            upper=numpy.inf)
            elif i in nlpy_model.upperC:
                self.addCon("g"+"%d"%(i+1), 'i', lower=-numpy.inf,
                            upper=nlpy_model.Ucon[i])
            elif i in nlpy_model.rangeC:
                self.addCon("g"+"%d"%(i+1), 'i', lower=nlpy_model.Lcon[i],
                            upper=nlpy_model.Ucon[i])
            elif i in nlpy_model.equalC:
                self.addCon("g"+"%d"%(i+1), 'e', equal=nlpy_model.Lcon[i])