Changeset 1519
- Timestamp:
- 10/02/08 03:17:16 (2 months ago)
- Files:
-
- trunk/openopt/scikits/openopt/Kernel/BaseProblem.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/Kernel/Function.py (modified) (5 diffs)
- trunk/openopt/scikits/openopt/Kernel/NLP.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/ooVar.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/scikits/openopt/Kernel/BaseProblem.py
r1509 r1519 11 11 from ooIterPrint import ooTextOutput 12 12 from ooMisc import setNonLinFincsNumber 13 from ooVar import oovar 14 from Function import oofun 13 15 14 16 ProbDefaults = {'diffInt': 1e-7, 'xtol': 1e-6, 'noise': 0} … … 334 336 if self.iprint >= -1: self.warn('some non-linear constraints are equal to NaN') 335 337 338 def __construct_x_from_ooVars__(self): 339 self.oovars = set([]) 340 for FuncType in ['f', 'c', 'h']: 341 Funcs = getattr(self, FuncType) 342 if Funcs is None: continue 343 if isinstance(Funcs, oofun): 344 Funcs.__connect_ooVars__(self) 345 else: 346 if type(Funcs) not in [tuple, list]: 347 self.err('when x0 is absent, oofuns (with oovars) are expected') 348 for fun in Funcs: 349 if type(Funcs) not in [tuple, list]: 350 self.err('when x0 is absent, oofuns (with oovars) are expected') 351 fun.__connect_ooVars__(self) 352 assert len(self.oovars) > 0 353 n = 0 354 for fn in ['x0', 'lb', 'ub']: 355 if not hasattr(self, fn): continue 356 val = getattr(self, fn) 357 if val is not None and any(isfinite(val)): 358 self.err('while using oovars providing x0, lb, ub for whole prob is forbidden, use for each oovar instead') 359 360 x0, lb, ub = [], [], [] 361 362 for var in self.oovars: 363 var.__initialize__(self) 364 var.dep = range(n, n+var.size) 365 n += var.size 366 x0.append(var.v0) 367 lb.append(var.lb) 368 ub.append(var.ub) 369 self.n = n 370 self.x0 = x0 371 self.lb = lb 372 self.ub = ub 373 336 374 def __prepare__(self): 375 # TODO: remove GLP, make other workaround 376 if (not hasattr(self, 'x0') or self.x0 is nan) and self.probType != 'GLP': 377 # hence oovar(s) are used 378 self.__construct_x_from_ooVars__() 379 337 380 self.x0 = ravel(self.x0) 338 381 self.__makeCorrectArgs__() trunk/openopt/scikits/openopt/Kernel/Function.py
r1482 r1519 2 2 # created by Dmitrey 3 3 #from numpy import copy, isnan, array, argmax, abs, zeros 4 from numpy import inf, asfarray, copy, all, any, empty, atleast_2d, zeros, dot, asarray, atleast_1d, empty, ones, ndarray, where, isfinite 4 from numpy import inf, asfarray, copy, all, any, empty, atleast_2d, zeros, dot, asarray, atleast_1d, empty, ones, ndarray, where, isfinite, array 5 5 from oologfcn import OpenOptException 6 6 from copy import deepcopy 7 from ooVar import oovar 7 8 8 9 class oofun: … … 38 39 self.inputTotalLength = 0 39 40 for item in self.input: 40 if not callable(item): r.append(item) 41 elif item.__module__ == 'scikits.openopt.Kernel.Function': 41 if isinstance(item, oofun): 42 42 item.x = self.x 43 43 r.append(item()) 44 elif isinstance(item, oovar): 45 r.append(self.x[item.dep]) 46 elif not callable(item): r.append(item) 44 47 else: r.append(item()) 45 48 self.inputTotalLength += r[-1].size … … 49 52 def __getDep__(self): 50 53 if hasattr(self, 'dep'): 51 pass54 return self.dep 52 55 elif self.input is None: 53 56 self.dep = None 54 57 else: 55 r = empty(self.x.size, bool)56 r.fill(False)58 r = set([]) 59 #r.fill(False) 57 60 if not type(self.input) in (list, tuple): 58 61 self.input = [self.input] 59 62 for oofunInstance in self.input: 60 if not hasattr(oofunInstance, 'x'):61 oofunInstance.x = self.x63 # if not hasattr(oofunInstance, 'x'): 64 # oofunInstance.x = self.x 62 65 tmp = oofunInstance.__getDep__() 63 66 if tmp is None: … … 65 68 break 66 69 else: 67 r[tmp] = True 70 if type(tmp) in (ndarray, list, tuple): 71 tmp = set(tmp) 72 elif type(tmp) == int: 73 tmp = set([tmp]) 74 elif type(tmp) != set: 75 raise OpenOptException('unknown type of oofun or oovar dependence') 76 r.update(tmp) 68 77 if r is not None: 69 self.dep = where(r)[0]78 self.dep = array(list(r)) 70 79 return self.dep 71 80 … … 204 213 return r 205 214 215 def __connect_ooVars__(self, p): 216 if self.input is None: p.err('got oofun w/o connection to oovar (empty input instead). Use x0 or connect oovars.') 217 if not type(self.input) in (list, tuple): 218 self.input = [self.input] 219 # p.oovars is set 220 221 for inp in self.input: 222 if isinstance(inp, oovar): 223 p.oovars.add(inp) 224 elif isinstance(inp, oofun): 225 inp.__connect_ooVars__(p) # recursive 226 else: p.err('incorrect input for oofun instance') 227 228 229 trunk/openopt/scikits/openopt/Kernel/NLP.py
r1128 r1519 24 24 def nlp_init(prob, kwargs): 25 25 26 prob.goal = 'minimum' 26 27 f = kwargs['f'] 27 x0 = array(kwargs['x0']) 28 29 30 31 prob.goal = 'minimum' 32 prob.x0 = asarray(x0, float).reshape((-1,1)) 33 34 prob.n = x0.size 35 prob.lb = -inf * ones([prob.n,1]) 36 prob.ub = inf * ones([prob.n,1]) 28 if kwargs.has_key('x0'): 29 x0 = array(kwargs['x0']) 30 prob.x0 = asarray(x0, float).reshape((-1,1)) 31 prob.n = x0.size 32 prob.lb = -inf * ones([prob.n,1]) 33 prob.ub = inf * ones([prob.n,1]) 37 34 38 35
