Changeset 904

Show
Ignore:
Timestamp:
03/15/08 03:09:13 (9 months ago)
Author:
dmitrey.kroshko
Message:

some changes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openopt/scikits/openopt/Kernel/BaseProblem.py

    r884 r904  
    88from Residuals import Residuals 
    99from ooIter import ooIter 
    10  
     10from ooCheckGradient import ooCheckGradient 
    1111ProbDefaults = {'diffInt': 1e-7,  'xtol': 1e-6,  'noise': 0} 
    1212 
     
    254254        self.err('OpenOpt error: this function should be overdetermined by child class') 
    255255     
    256  
    257          
    258          
    259          
    260          
    261          
    262  
     256    def checkdf(self, x=None): 
     257        return ooCheckGradient(self, 'df', x) 
     258         
     259    def checkdc(self, x=None): 
     260        return ooCheckGradient(self, 'dc', x) 
     261     
     262    def checkdh(self, x=None): 
     263        return ooCheckGradient(self, 'dh', x) 
     264     
     265    def __makeCorrectArgs__(self): 
     266        argslist = dir(self.args) 
     267        if not ('f' in argslist and 'c' in argslist and 'h' in argslist): 
     268            tmp, self.args = self.args, autocreate() 
     269            self.args.f = self.args.c = self.args.h = tmp 
     270        for j in ('f', 'c', 'h'): 
     271            v = getattr(self.args, j) 
     272            if type(v) != type(()): setattr(self.args, j, (v,)) 
     273 
  • trunk/openopt/scikits/openopt/Kernel/ooCheck.py

    r701 r904  
    1515                    p.err('the solver ' + p.solverName + ' cannot handle ' + "'" + fn + "' constraints") 
    1616 
    17     separator='========================' 
    18      
    1917    for fn in ('df', 'dc', 'dh'): 
    20         nothing2checkMsg = 'you must provide gradient for check or turn option prob.check.' + fn + ' off' 
    21         isSomething2Check = 0 
    2218        if getattr(p.check, fn): 
    23             if hasattr(p.user, fn): 
    24                 for j in getattr(p.user, fn): 
    25                    if callable(j): isSomething2Check = 1 
    26             if isSomething2Check:  ooCheckGradient(p, fn) 
    27             else: p.warn(nothing2checkMsg) 
     19            p.info('the option p.check.'+fn+' is obsolete, use p.check'+fn+'() or p.check'+fn+'(x) instead') 
     20 
     21#    separator='========================' 
     22#     
     23#    for fn in ('df', 'dc', 'dh'): 
     24#        nothing2checkMsg = 'you must provide gradient for check or turn option prob.check.' + fn + ' off' 
     25#        isSomething2Check = 0 
     26#        if getattr(p.check, fn): 
     27#            if hasattr(p.user, fn): 
     28#                for j in getattr(p.user, fn): 
     29#                   if callable(j): isSomething2Check = 1 
     30#            if isSomething2Check:  ooCheckGradient(p, fn) 
     31#            else: p.warn(nothing2checkMsg) 
    2832 
    2933    return nErrors 
  • trunk/openopt/scikits/openopt/Kernel/ooCheckGradient.py

    r806 r904  
    1 from numpy import hstack, ceil, floor, log10, inf, tile, argmax, abs 
     1from numpy import hstack, ceil, floor, log10, inf, tile, argmax, abs, array 
    22from string import rjust, ljust 
    3 #from objFunRelated import objFunRelated 
     3class autocreate: 
     4    def __init__(self):pass 
     5 
     6 
    47def ooCheckGradient(p, fun_, xCheck=None, separator='========================'): 
    58    """ 
     
    1114    else: singleColumn, doubleColumn = [], ['df', 'dc', 'dh'] 
    1215     
     16    x0 = p.x0 
     17    p.x0 = array(p.x0, float) 
    1318    if xCheck is None: xCheck = p.x0 
     19         
    1420    nskiplines = 0 
    1521     
    16     if not getattr(p.userProvided,  fun_): 
    17         p.err("check gradient for complex user-gradient func isn't implemented yet") 
     22    if not getattr(p,  fun_): 
     23        p.warn('you must provide gradient for check ' + fn+'. Turning the option off') 
     24        return 
     25     
     26    genericUserFunc1 = getattr(p, fun_) # df, dc, dh 
     27    genericUserFunc2 = getattr(p, fun_[1:]) # f, c, h 
     28     
     29    setattr(p, 'nEvals', autocreate()) 
     30    setattr(p.nEvals, fun_[1:], 0) 
     31    setattr(p.nEvals, fun_, 0) 
     32     
     33    #for genericUserFunc in [genericUserFunc1, genericUserFunc2]: 
     34    for fn in [fun_[1:], fun_]: 
     35        genericUserFunc = getattr(p, fn) 
     36        if type(genericUserFunc) in [list, tuple]: 
     37            setattr(p.user, fn, genericUserFunc) 
     38        else: 
     39            setattr(p.user, fn, [genericUserFunc]) 
     40        setattr(p, fn, getattr(p, 'user_' + fn)) 
     41     
     42    diffInt = p.diffInt 
     43    if type(p.diffInt) not in [list, tuple]: 
     44        p.diffInt = [p.diffInt] 
     45     
     46    p.__makeCorrectArgs__() 
    1847     
    1948    setattr(p.userProvided, fun_, False) 
     
    72101     
    73102    print(separator) 
     103     
     104    delattr(p.user, fun_) 
     105    delattr(p.user, fun_[1:]) 
     106    setattr(p, fun_, genericUserFunc1) # df, dc, dh 
     107    setattr(p, fun_[1:], genericUserFunc2) # f, c, h 
     108    p.diffInt = diffInt 
     109    p.x0 = x0 
     110 
    74111    return counter 
    75112 
  • trunk/openopt/scikits/openopt/Kernel/runProbSolver.py

    r900 r904  
    6262    if p.graphics.xlabel == 'nf': p.iterValues.nf = [] # iter ObjFunc evaluation number 
    6363     
    64     argslist = dir(p.args) 
    65     if not ('f' in argslist and 'c' in argslist and 'h' in argslist): 
    66         tmp, p.args = p.args, EmptyClass() 
    67         p.args.f = p.args.c = p.args.h = tmp 
    68     for j in ('f', 'c', 'h'): 
    69         v = getattr(p.args, j) 
    70         if type(v) != type(()): setattr(p.args, j, (v,)) 
     64    p.__makeCorrectArgs__() 
    7165     
    7266    if p.probType in ('LP', 'MILP', 'QP') and p.plot: 
     
    168162    #assert hasattr(p,  'xk') or hasattr(p,  'xf') 
    169163    if not hasattr(p,  'xf') or all(p.xf==nan): p.xf = p.xk 
    170     if not hasattr(p,  'ff') or p.ff==nan: p.ff = p.fk 
     164    if not hasattr(p,  'ff') or any(p.ff==nan): p.ff = p.fk 
    171165    if p.probType in ['NLP',  'NSP',  'GNLP']:#TODO:handle it more correctly 
    172166        if not hasattr(p,  'fk'): p.fk = p.f(p.xk) 
  • trunk/openopt/scikits/openopt/examples/checkDerivatives.py

    r613 r904  
    3434p.dh = dh 
    3535 
    36 p.check.df=1 
    37 p.check.dc=1 
    38 p.check.dh=1 
    39 #!! fmin_cobyla can't use user-supplied gradient  
    40 # but OpenOpt will do derivatives check anyway 
    41 r = p.solve('scipy_cobyla') 
     36p.checkdf() 
     37p.checkdc() 
     38p.checkdh() 
     39# you can use p.checkdF(x) for other point than x0 (F is f, c or h) 
    4240 
    4341# if you'll use solvers that use derivatives,  
    4442# they will hardly converge to feasible point  
    4543# because of the bugs in calculating derivatives made: 
    46 # r = p.solve('lincher') 
    47 # r = p.solve('ALGENCAN') 
     44# r = p.solve('ralg') 
    4845 
    4946""" 
     
    8279sum(abs(dh_user - dh_numerical)) = 15.0000144464 
    8380======================== 
    84 starting solver scipy_cobyla (BSD  license)  with problem  unnamed 
    85 solver scipy_cobyla has finished solving the problem unnamed 
    86 istop:  1000 
    87 Solver:   Time Elapsed = 1.01   CPU Time Elapsed = 0.94 
    88 objFunValue: 55.8770221887 (feasible, max constraint =  1.24892e-21) 
    8981""" 
  • trunk/openopt/scikits/openopt/examples/lsp_1.py

    r763 r904  
    4141 
    4242#optional: user-supplied gradient check: 
    43 p.check.df = 1 
     43p.checkdf() 
    4444 
    4545#optional: graphical output, requires matplotlib installed 
  • trunk/openopt/scikits/openopt/examples/nlp_1.py

    r771 r904  
    9595 
    9696#optional: user-supplied 1st derivatives check 
    97 p.check.df=1 
    98 p.check.dc=1 
    99 p.check.dh=1 
     97p.checkdf() 
     98p.checkdc() 
     99p.checkdh() 
     100 
    100101 
    101102p.maxIter = 10000 
     
    107108 
    108109#r = p.solve('ALGENCAN') 
    109 r = p.solve('ralg') 
     110#r = p.solve('ralg') 
     111r = p.solve('lincher') 
    110112##p.iprint = 1 
    111113##p.plot = 0 
  • trunk/openopt/scikits/openopt/examples/nlp_ALGENCAN.py

    r710 r904  
    9999 
    100100# optional: check of user-supplied derivatives  
    101 p.check.df = 1 
    102 p.check.dc = 1 
    103 p.check.dh = 1 
     101p.checkdf() 
     102p.checkdc() 
     103p.checkdh() 
    104104 
    105105# last but not least: 
  • trunk/openopt/scikits/openopt/solvers/Standalone/bvls_oo.py

    r899 r904  
    55    import bvls as BVLS 
    66except: 
    7     print 'You should have bvls.f compiled via f2py, see OO LLSP doc webpage for details' 
     7    from oologfcn import OpenOptException 
     8    raise OpenOptException('You should have bvls.f compiled via f2py, see OO LLSP doc webpage for details') 
    89 
    910class bvls(BaseAlg):