Changeset 1509
- Timestamp:
- 09/28/08 16:09:16 (2 months ago)
- Files:
-
- trunk/openopt/scikits/openopt/Kernel/BaseProblem.py (modified) (5 diffs)
- trunk/openopt/scikits/openopt/Kernel/LLAVP.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/LLSP.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/LP.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/LSP.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/Kernel/NLSP.py (modified) (5 diffs)
- trunk/openopt/scikits/openopt/Kernel/QP.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/nonOptMisc.py (added)
- trunk/openopt/scikits/openopt/Kernel/objFunRelated.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/Kernel/ooGraphics.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/Kernel/ooIter.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/ooMisc.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/Kernel/runProbSolver.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/scikits/openopt/Kernel/BaseProblem.py
r1456 r1509 10 10 from ooCheckGradient import ooCheckGradient 11 11 from ooIterPrint import ooTextOutput 12 from ooMisc import setNonLinFincsNumber 12 13 13 14 ProbDefaults = {'diffInt': 1e-7, 'xtol': 1e-6, 'noise': 0} … … 49 50 50 51 self.graphics = Graphics() 52 self.xlabel = 'time' 51 53 self.user = user() 52 54 … … 226 228 self.err('OpenOpt error: this function should be overdetermined by child class') 227 229 228 def inspire(self, newProb ):230 def inspire(self, newProb, sameConstraints=True): 229 231 # fills some fields of new prob with old prob values 230 232 newProb.castFrom = self.probType 233 231 234 #TODO: hold it in single place 232 for key in ['lb', 'ub', 'A', 'Aeq', 'b', 'beq', 'contol', 'xtol', 'ftol', 'gtol', 'iprint', 'plot', 'maxIter', 'maxTime', 'maxCPUTime','fEnough', 'goal', 'color', 'debug', 'maxFunEvals'] : 235 236 fieldsToAssert = ['userProvided', 'contol', 'xtol', 'ftol', 'gtol', 'iprint', 'plot', 'maxIter', 'maxTime', 'maxCPUTime','fEnough', 'goal', 'color', 'debug', 'maxFunEvals', 'xlabel'] 237 if sameConstraints: fieldsToAssert+= ['lb', 'ub', 'A', 'Aeq', 'b', 'beq'] 238 239 for key in ['userProvided', 'lb', 'ub', 'A', 'Aeq', 'b', 'beq', 'contol', 'xtol', 'ftol', 'gtol', 'iprint', 'plot', 'maxIter', 'maxTime', 'maxCPUTime','fEnough', 'goal', 'color', 'debug', 'maxFunEvals', 'xlabel'] : 233 240 if hasattr(self, key): setattr(newProb, key, getattr(self, key)) 241 242 # note: because of 'userProvided' from prev line 243 #self self.userProvided is same to newProb.userProvided 244 if sameConstraints: 245 for key in ['c','dc','h','dh','d2c','d2h']: 246 if hasattr(self.userProvided, key): 247 if getattr(self.userProvided, key): 248 setattr(newProb, key, getattr(self, key)) 249 else: 250 setattr(newProb, key, None) 251 234 252 235 253 … … 319 337 self.x0 = ravel(self.x0) 320 338 self.__makeCorrectArgs__() 339 #self.nEvals = {'f':0} 321 340 for s in ('f', 'df', 'd2f', 'c', 'dc', 'd2c', 'h', 'dh', 'd2h'): 322 341 derivativeOrder = len(s)-1 … … 342 361 343 362 #initialization, getting nf, nc, nh etc: 344 for s in ['c', 'h' ]:345 if getattr(self.userProvided, s):346 tmp = getattr(self, s)(self.x0) # I add ymp for debug363 for s in ['c', 'h', 'f']: 364 if not getattr(self.userProvided, s): 365 setattr(self, 'n'+s, 0) 347 366 else: 348 set attr(self, 'n'+s, 0)367 setNonLinFincsNumber(self, s) 349 368 350 369 if hasattr(self, 'delayedConnectIterFcn'): trunk/openopt/scikits/openopt/Kernel/LLAVP.py
r1147 r1509 22 22 return r 23 23 24 def llavp2nsp(self, solver , **kwargs):24 def llavp2nsp(self, solver): 25 25 if hasattr(self,'x0'): p = NSP.NSP(ff, self.x0, df=dff) 26 26 else: p = NSP.NSP(ff, zeros(self.n), df=dff) 27 27 p.args.f = self # DO NOT USE p.args = self IN PROB ASSIGNMENT! 28 28 self.inspire(p) 29 self.iprint = -1 29 30 #p.checkdf() 30 r = p.solve(solver, **kwargs) 31 #p.solver.__optionalDataThatCanBeHandled__ += ['damp', 'X', 'c'] 32 r = p.solve(solver) 33 self.xf, self.ff, self.rf = r.xf, r.ff, r.rf 31 34 return r 32 35 trunk/openopt/scikits/openopt/Kernel/LLSP.py
r1408 r1509 27 27 p.args.f = self # DO NOT USE p.args = self IN PROB ASSIGNMENT! 28 28 self.inspire(p) 29 self.iprint = -1 29 30 #p.checkdf() 30 r = p.solve(solver, **kwargs) 31 r = p.solve(solver, show = False) 32 self.xf, self.ff, self.rf = r.xf, r.ff, r.rf 31 33 return r 32 34 trunk/openopt/scikits/openopt/Kernel/LP.py
r1417 r1509 24 24 else: p = NLP.NLP(ff, zeros(self.n), df=dff) 25 25 self.inspire(p) 26 r = p.solve(solver, **kwargs) 26 self.iprint = -1 27 r = p.solve(solver, show=False) 28 self.xf, self.ff, self.rf = r.xf, r.ff, r.rf 27 29 return r 30 28 31 29 32 def lp_init(prob, kwargs): trunk/openopt/scikits/openopt/Kernel/LSP.py
r1421 r1509 25 25 return (fv ** 2).sum() 26 26 27 def lsp2nlp(self, solver, **kwargs): 27 # def lsp2nlp(self, solver, **kwargs): 28 # ff = lambda x: sum(asfarray(self.f(x))**2) 29 # if hasattr(self, 'df'): 30 # dff = lambda x: dot(2*asfarray(self.f(x)), asfarray(self.df(x))) 31 # p = NLP.NLP(ff, self.x0, df=dff) 32 # else: 33 # p = NLP.NLP(ff, self.x0) 34 # self.inspire(p) 35 # r = p.solve(solver, **kwargs) 36 # return r 37 def lsp2nlp(self, solver): 38 #self.solver = getSolverFromStringName(self, solver) 39 #self.__prepare__() 40 # FF = oofun(self.f) 41 # if hasattr(self, 'df') and self.df is not None: #TODO: replace by userSupplied 42 # FF.d = self.df 28 43 ff = lambda x: sum(asfarray(self.f(x))**2) 29 44 if hasattr(self, 'df'): … … 32 47 else: 33 48 p = NLP.NLP(ff, self.x0) 34 self.inspire(p) 35 r = p.solve(solver, **kwargs) 49 #p = NLP.NLP(FF, self.x0) 50 self.inspire(p, sameConstraints=True) 51 52 53 def lsp_iterfcn(*args, **kwargs): 54 p.primalIterFcn(*args, **kwargs) 55 # if len(args) != 0 and type(args[0]) != ndarray: # hence Point 56 # p.primalIterFcn(args[0].x, max(abs(self.f(args[0].x))), args[0].mr(), **kwargs) 57 # # TODO: add nNaNs 58 # elif len(args) > 1: 59 # p.primalIterFcn(args[0], max(abs(self.f(args[0]))), *args[2:], **kwargs) 60 # elif kwargs.has_key('fk'): 61 # kwargs['fk'] = max(abs(self.f(args[0]))) 62 # p.primalIterFcn(*args, **kwargs) 63 # else: 64 # p.primalIterFcn(*args, **kwargs) 65 p.xk = self.xk 66 p.fk = p.f(p.xk) 67 p.rk = self.rk 68 # TODO: add nNaNs 69 70 # self.xk = p.xk.copy() 71 # self.fk = max(abs(asfarray(self.f(self.xk)))) 72 # self.rk = p.rk 73 74 # self.istop = p.istop 75 76 # cond1 = self.iprint>0 and self.iter>0 and self.iter % self.iprint == 0 77 # 78 # cond2 = (self.iter == 0 or (self.istop and (p.rk <= p.contol ))) \ 79 # and self.iprint>=0 and not self.lastIterTextOutputWasInvolved 80 p.istop = self.istop 81 82 # 83 # 84 # def nlsp_callback(nlsp): 85 # # nlsp = self 86 # if all(abs(asfarray(self.f(nlsp.xk))) < self.ftol) and self.getMaxResidual(nlsp.xk) < self.contol: 87 # if nlsp.isUC: msg_contol = '' #TODO: make available self.isUC instead of p.isUC 88 # else: msg_contol = 'and contol ' 89 # self.msg = 'solution with required ftol ' + msg_contol+ 'has been reached' 90 # return (15, self.msg) 91 # else: 92 # return False 93 94 #self.callback = [nlsp_callback] 95 #self.kernelIterFuncs.pop(SMALL_DELTA_F) 96 p.primalIterFcn, p.iterfcn = self.iterfcn, lsp_iterfcn 97 p.goal = 'min' 98 99 p.iprint = -1 100 101 r = p.solve(solver, show=False) 102 #r.ff = ff(r.xf) 103 36 104 return r trunk/openopt/scikits/openopt/Kernel/NLSP.py
r1504 r1509 2 2 from NLP import nlp_init 3 3 from numpy.linalg import norm 4 from numpy import inf, asfarray, atleast_1d, dot 5 from setDefaultIterFuncs import FVAL_IS_ENOUGH 4 from numpy import inf, asfarray, atleast_1d, dot, abs, ndarray 5 from setDefaultIterFuncs import FVAL_IS_ENOUGH, SMALL_DELTA_F 6 from nonOptMisc import getSolverFromStringName 6 7 import NLP 7 8 #from Function import oofun … … 25 26 self.showGoal = False 26 27 27 self.kernelIterFuncs.pop(FVAL_IS_ENOUGH) #= lambda *args: False#TODO: remove it at all28 #self.kernelIterFuncs.pop(FVAL_IS_ENOUGH) #= lambda *args: False#TODO: remove it at all 28 29 #return 29 30 … … 32 33 return norm(atleast_1d(asfarray(fv)), inf) 33 34 34 def nlsp2nlp(self, solver, **kwargs): 35 def nlsp2nlp(self, solver): 36 #self.solver = getSolverFromStringName(self, solver) 37 #self.__prepare__() 35 38 # FF = oofun(self.f) 36 39 # if hasattr(self, 'df') and self.df is not None: #TODO: replace by userSupplied … … 43 46 p = NLP.NLP(ff, self.x0) 44 47 #p = NLP.NLP(FF, self.x0) 45 self.inspire(p )48 self.inspire(p, sameConstraints=True) 46 49 47 def nlsp_iterfcn(p): 48 if all(abs(asfarray(self.f(p.xk)))) < p.ftol and self.getMaxResidual(p.xk) < p.contol: 49 if self.isUC: msg_contol = '' 50 51 def nlsp_iterfcn(*args, **kwargs): 52 if len(args) != 0 and type(args[0]) != ndarray: # hence Point 53 p.primalIterFcn(args[0].x, max(abs(self.f(args[0].x))), args[0].mr(), **kwargs) 54 # TODO: add nNaNs 55 elif len(args) > 1: 56 p.primalIterFcn(args[0], max(abs(self.f(args[0]))), *args[2:], **kwargs) 57 elif kwargs.has_key('fk'): 58 kwargs['fk'] = max(abs(self.f(args[0]))) 59 p.primalIterFcn(*args, **kwargs) 60 else: 61 p.primalIterFcn(*args, **kwargs) 62 p.xk = self.xk 63 p.fk = p.f(p.xk) 64 p.rk = self.rk 65 # TODO: add nNaNs 66 67 # self.xk = p.xk.copy() 68 # self.fk = max(abs(asfarray(self.f(self.xk)))) 69 # self.rk = p.rk 70 71 # self.istop = p.istop 72 73 # cond1 = self.iprint>0 and self.iter>0 and self.iter % self.iprint == 0 74 # 75 # cond2 = (self.iter == 0 or (self.istop and (p.rk <= p.contol ))) \ 76 # and self.iprint>=0 and not self.lastIterTextOutputWasInvolved 77 p.istop = self.istop 78 79 ftol_init = self.ftol 80 contol_init = self.contol 81 # 82 # 83 def nlsp_callback(nlsp): 84 # nlsp = self 85 if all(abs(asfarray(self.f(nlsp.xk))) < ftol_init) and self.getMaxResidual(nlsp.xk) < contol_init: 86 if nlsp.isUC: msg_contol = '' #TODO: make available self.isUC instead of p.isUC 50 87 else: msg_contol = 'and contol ' 51 88 self.msg = 'solution with required ftol ' + msg_contol+ 'has been reached' … … 54 91 return False 55 92 56 p.callback = nlsp_iterfcn 93 self.callback = [nlsp_callback] 94 self.kernelIterFuncs.pop(SMALL_DELTA_F) 95 p.primalIterFcn, p.iterfcn = self.iterfcn, nlsp_iterfcn 57 96 p.goal = 'min' 58 r = p.solve(solver, **kwargs) 97 #self.fEnough = self.ftol 98 99 p.iprint=-5 100 101 Multiplier = 1e16 102 103 #self.ftol /= Multiplier 104 self.xtol /= Multiplier 105 self.gtol /= Multiplier 106 107 r = p.solve(solver, show=False) 108 109 #self.ftol *= Multiplier 110 self.xtol *= Multiplier 111 self.gtol *= Multiplier 112 113 if self.istop == FVAL_IS_ENOUGH: 114 self.msg = 'solution with required ftol ' + msg_contol+ 'has been reached' 115 self.istop = 15 116 117 #self.iterfcn(xk = r.xk, fk = r.fk, rk = r.rk) 118 #self.show = show 119 120 # TODO: fix it! 121 #r.iterValues.f = self.iterValues.f 122 123 #r.ff = max(abs(asfarray(self.f(r.xf)))) 59 124 return r trunk/openopt/scikits/openopt/Kernel/QP.py
r1408 r1509 25 25 return asfarray(0.5*dot(x, dot(self.H, x)) + dot(self.f, x).sum()).flatten() 26 26 27 def qp2nlp(self, solver , **kwargs):27 def qp2nlp(self, solver): 28 28 if hasattr(self,'x0'): p = NLP.NLP(ff, self.x0, df=dff, d2f=d2ff) 29 29 else: p = NLP.NLP(ff, zeros(self.n), df=dff, d2f=d2ff) 30 30 p.args.f = self # DO NOT USE p.args = self IN PROB ASSIGNMENT! 31 31 self.inspire(p) 32 self.iprint = -1 32 33 #p.checkdf() 33 r = p.solve(solver, **kwargs) 34 r = p.solve(solver, show=False) 35 self.xf, self.ff, self.rf = r.xf, r.ff, r.rf 34 36 return r 35 37 trunk/openopt/scikits/openopt/Kernel/objFunRelated.py
r1482 r1509 2 2 from numpy import * 3 3 from setDefaultIterFuncs import USER_DEMAND_EXIT 4 from ooMisc import killThread 4 from ooMisc import killThread, setNonLinFincsNumber 5 5 6 6 none_type = type(None) … … 59 59 60 60 #if p.iter == 0: 61 if not hasattr(p, 'n'+userFunctionType): 62 fv = funcs#getattr(p, userFunctionType) 63 if len(fv) == 1: p.functype[userFunctionType] = 'single func' 64 if fv is None or (type(fv) in [list, tuple] and fv[0] is None): 65 setattr(p, 'n'+userFunctionType, 0) 66 elif type(fv) in [list, tuple] and len(fv)>1: 67 # TODO: handle problems w/o x0, like GLP 68 number = 0 69 arr = [] 70 for func in fv: 71 # if func.__module__ == 'scikits.openopt.Kernel.Function': 72 # func.x = p.x0 73 number += asarray(func(*(p.x0,) + args)).size 74 arr.append(number) 75 if len(arr) < number: p.functype[userFunctionType] = 'block' 76 elif len(arr) > 1: p.functype[userFunctionType] = 'some funcs' 77 else: assert p.functype[userFunctionType] == 'single func' 78 setattr(p, 'n' + userFunctionType, number) 79 if p.functype[userFunctionType] == 'block': 80 setattr(p, 'arr_of_indexes_' + userFunctionType, array(arr)-1) 81 elif p.x0 is not None: 82 FV = fv 83 if not (type(FV) in [list, tuple]): 84 FV = [FV] 85 setattr(p, 'n'+userFunctionType, asfarray(FV[0](*(p.x0, ) + args)).size) 86 else: 87 FV = fv 88 if not (type(FV) in [list, tuple]): 89 FV = [FV] 90 setattr(p, 'n'+userFunctionType, asfarray(FV[0](*(0.5*(p.lb+p.ub), ) + args)).size) 91 p.prevVal[userFunctionType]['val'] = zeros(getattr(p, 'n'+userFunctionType)) 61 if not hasattr(p, 'n'+userFunctionType): setNonLinFincsNumber(p, userFunctionType) 62 p.prevVal[userFunctionType]['val'] = zeros(getattr(p, 'n'+userFunctionType)) 92 63 93 64 if ind is None: trunk/openopt/scikits/openopt/Kernel/ooGraphics.py
r1437 r1509 36 36 self.drawingInOneWindow = True#some solvers for the same problem 37 37 #what do you want on label x? 38 self.xlabel = 'time'#case-unsensitive38 #self.xlabel = 'time'#case-unsensitive 39 39 #other values: CPUTime, iter 40 40 #ignores time, spent on figure updatings … … 116 116 117 117 #setting xlabel, ylabel, title etc 118 tx = lower( self.xlabel)118 tx = lower(p.xlabel) 119 119 if isNewTrajectory: 120 120 trunk/openopt/scikits/openopt/Kernel/ooIter.py
r1482 r1509 35 35 p.lastDrawIter = 0 36 36 37 if not p.isFinished or p.objFuncMultiple2Single(p.fk) != p.iterValues.f[-1]: p.solver.__decodeIterFcnArgs__(p, *args, **kwargs)37 if not p.isFinished or len(p.iterValues.f) == 0 or p.objFuncMultiple2Single(p.fk) != p.iterValues.f[-1]: p.solver.__decodeIterFcnArgs__(p, *args, **kwargs) 38 38 if p.graphics.xlabel == 'nf': p.iterValues.nf.append(p.nEvals['f']) 39 39 trunk/openopt/scikits/openopt/Kernel/ooMisc.py
r1437 r1509 1 from numpy import zeros, ones, copy, isfinite, where, asarray, inf, array 1 from numpy import zeros, ones, copy, isfinite, where, asarray, inf, array, asfarray 2 2 __docformat__ = "restructuredtext en" 3 3 … … 133 133 p.err("Error in assignment or this feature isn't implemented yet") 134 134 135 def setNonLinFincsNumber(p, userFunctionType): 136 # userFunctionType should be 'f', 'c' or 'h' 137 args = getattr(p.args, userFunctionType) 138 fv = getattr(p.user, userFunctionType) 139 140 if len(fv) == 1: p.functype[userFunctionType] = 'single func' 141 if fv is None or (type(fv) in [list, tuple] and fv[0] is None): 142 setattr(p, 'n'+userFunctionType, 0) 143 elif type(fv) in [list, tuple] and len(fv)>1: 144 # TODO: handle problems w/o x0, like GLP 145 number = 0 146 arr = [] 147 for func in fv: 148 # if func.__module__ == 'scikits.openopt.Kernel.Function': 149 # func.x = p.x0 150 number += asarray(func(*(p.x0,) + args)).size 151 arr.append(number) 152 if len(arr) < number: p.functype[userFunctionType] = 'block' 153 elif len(arr) > 1: p.functype[userFunctionType] = 'some funcs' 154 else: assert p.functype[userFunctionType] == 'single func' 155 setattr(p, 'n' + userFunctionType, number) 156 if p.functype[userFunctionType] == 'block': 157 setattr(p, 'arr_of_indexes_' + userFunctionType, array(arr)-1) 158 elif p.x0 is not None: 159 FV = fv 160 if not (type(FV) in [list, tuple]): 161 FV = [FV] 162 setattr(p, 'n'+userFunctionType, asfarray(FV[0](*(p.x0, ) + args)).size) 163 else: 164 FV = fv 165 if not (type(FV) in [list, tuple]): 166 FV = [FV] 167 setattr(p, 'n'+userFunctionType, asfarray(FV[0](*(0.5*(p.lb+p.ub), ) + args)).size) 168 169 170 135 171 class isSolved: 136 172 def __init__(self): pass 137 173 class killThread: 138 174 def __init__(self): pass 175 176 trunk/openopt/scikits/openopt/Kernel/runProbSolver.py
r1456 r1509 9 9 from string import capitalize, lower 10 10 from BaseProblem import ProbDefaults 11 from nonOptMisc import getSolverFromStringName 11 12 #from scikits.openopt.Kernel.ooMisc import __solverPaths__ 12 13 ConTolMultiplier = 0.8 … … 42 43 43 44 if ':' in solver_str: 45 isConverter = True 44 46 probTypeToConvert, solverName = solver_str.split(':', 1) 45 47 converterName = lower(p.probType)+'2'+probTypeToConvert 46 48 converter = getattr(p, converterName) 47 return converter(solverName, *args, **kwargs) 49 p.solver = getSolverFromStringName(p, solverName) 50 #return converter(solverName, *args, **kwargs) 51 else: 52 isConverter = False 53 p.solver = getSolverFromStringName(p, solver_str) 48 54 49 55 if kwargs.has_key('debug'): 50 56 p.debug = kwargs['debug'] 51 57 52 if p.debug: 53 solverClass = getattr(my_import(solverPaths[solver_str]), solver_str) 54 else: 55 try: 56 solverClass = getattr(my_import(solverPaths[solver_str]), solver_str) 57 except: 58 p.err('incorrect solver is called, maybe the solver "' + solver_str +'" is not installed. Maybe setting p.debug=1 could specify the matter more precisely') 59 60 p.solver = solverClass() 58 59 #p.solver = solverClass() 61 60 # p.solverName = p.solver.__name__ 62 61 # setattr(p, p.solverName, EmptyClass()) … … 143 142 if hasattr(p, s): setattr(p, 'n'+s, len(getattr(p, s))) 144 143 145 if p.probType not in ['LP', 'QP', 'MILP', 'LLSP']: p.objFunc(p.x0)144 #if p.probType not in ['LP', 'QP', 'MILP', 'LLSP']: p.objFunc(p.x0) 146 145 147 146 p.isUC = p.__isUnconstrained__() … … 149 148 assert p.data4TextOutput[-1] == 'log10(maxResidual)' 150 149 p.data4TextOutput = p.data4TextOutput[:-1] 151 152 nErr = ooCheck(p)153 if nErr: p.err("prob check results: " +str(nErr) + "ERRORS!")#however, I guess this line will be never reached.154 150 155 151 if not p.solver.__iterfcnConnected__: … … 176 172 print s 177 173 178 p.iterfcn(p.x0) 174 179 175 180 176 try: 181 solver(p) 177 if isConverter: 178 # TODO: will R be somewhere used? 179 R = converter(solverName) 180 else: 181 nErr = ooCheck(p) 182 if nErr: p.err("prob check results: " +str(nErr) + "ERRORS!")#however, I guess this line will be never reached. 183 184 p.iterfcn(p.x0) 185 solver(p) 182 186 # except killThread: 183 187 # if p.plot: … … 194 198 # return None 195 199 except isSolved: 196 p.fk = p.f(p.xk)197 p.xf = p.xk198 p.ff = p.objFuncMultiple2Single(p.fk)200 # p.fk = p.f(p.xk) 201 # p.xf = p.xk 202 # p.ff = p.objFuncMultiple2Single(p.fk) 199 203 200 204 if p.istop == 0: p.istop = 1000 … … 205 209 p.isFinished = True 206 210 if hasattr(p, 'xf') and (not hasattr(p, 'xk') or array_equiv(p.xk, p.x0)): p.xk = p.xf 207 if hasattr(p, 'xk'): p.fk = p.objFunc(p.xk)208 211 if not hasattr(p, 'xf') or all(p.xf==nan): p.xf = p.xk 212 213 p.fk = p.objFunc(p.xk) 209 214 if not hasattr(p, 'ff') or any(p.ff==nan): p.ff = p.objFunc(p.xf) 210 211 215 212 216 if not hasattr(p, 'fk'): p.fk = p.ff 213 217 if p.invertObjFunc: p.fk, p.ff = -p.fk, -p.ff 218 219 if asfarray(p.ff).size > 1: p.ff = p.objFuncMultiple2Single(p.fk) 214 220 215 221 #p.ff = p.objFuncMultiple2Single(p.ff) … … 300 306 pylab.show() 301 307 302 ##################################################################303 def my_import(name):304 mod = __import__(name)305 components = name.split('.')306 for comp in components[1:]:307 mod = getattr(mod, comp)308 return mod309 310 308 class EmptyClass: pass 311 309 class OpenOptResult: pass
