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])