Changeset 1089

Show
Ignore:
Timestamp:
07/02/08 02:53:18 (2 months ago)
Author:
dmitrey.kroshko
Message:

some changes

Files:

Legend:

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

    r1049 r1089  
    11__docformat__ = "restructuredtext en" 
    2 from numpy import atleast_1d,  all, asarray, ndarray 
     2from numpy import atleast_1d,  all, asarray, ndarray, copy 
    33 
    44class BaseAlg: 
     
    5353        if not fArg: 
    5454            p.Fk = p.F(p.xk) 
     55            p.fk = copy(p.Fk) 
    5556        else: 
    5657            if asarray(p.fk).size >1: 
  • trunk/openopt/scikits/openopt/Kernel/BaseProblem.py

    r1040 r1089  
    5656    def __init__(self): 
    5757        self.isObjFunValueASingleNumber = True 
    58         self.prev = autocreate() # used for already obtained values store 
     58        #self.prev = autocreate() # used for already obtained values store 
    5959        self.iterfcn = lambda *args: ooIter(self, *args)# this parameter is only for OpenOpt developers, not common users 
    6060        self.norm = linalg.norm 
     
    289289            if type(v) != type(()): setattr(self.args, j, (v,)) 
    290290 
     291    def inspire(self, newProb): 
     292        # fills some fields of new prob with old prob values 
     293 
     294        #TODO: hold it in single place 
     295        for key in ['lb', 'ub', 'A', 'Aeq', 'b', 'beq', 'contol', 'xtol', 'ftol', 'gradtol', 'iprint', 'plot', 'maxIter', 'maxTime', 'maxCPUTime','fEnough', 'goal', 'color', 'debug'] : 
     296            if hasattr(self, key): setattr(newProb, key, getattr(self, key)) 
  • trunk/openopt/scikits/openopt/Kernel/QP.py

    r1040 r1089  
    77from ooMisc import assignScript 
    88from BaseProblem import BaseProblem 
    9 from numpy import asarray, ones, inf, dot 
     9from numpy import asfarray, ones, inf, dot, asfarray, nan, zeros 
    1010 
    1111 
     
    2222 
    2323    def objFunc(self, x): 
    24         return asfarray(0.5*dot(x, dot(p.H, x)) + dot(p.f, x).sum()).flatten() 
     24        return asfarray(0.5*dot(x, dot(self.H, x)) + dot(self.f, x).sum()).flatten() 
    2525 
    2626 
     
    3232    for fn in ('H', 'f'): 
    3333        if kwargs.has_key(fn): 
    34             kwargs[fn] = asarray(kwargs[fn], float) # TODO: handle the case in runProbSolver() 
     34            kwargs[fn] = asfarray(kwargs[fn], float) # TODO: handle the case in runProbSolver() 
    3535 
    3636 
    3737 
    3838    p.n = kwargs['H'].shape[0] 
     39    if p.x0 is nan: p.x0 = zeros(p.n) 
    3940    p.lb = -inf * ones(p.n) 
    4041    p.ub =  inf * ones(p.n) 
  • trunk/openopt/scikits/openopt/Kernel/Residuals.py

    r1065 r1089  
    11__docformat__ = "restructuredtext en" 
    2 from numpy import concatenate, asfarray, array, where, argmax, zeros, isfinite 
     2from numpy import concatenate, asfarray, array, where, argmax, zeros, isfinite, copy 
     3from copy import deepcopy 
    34empty_arr = asfarray([]) 
    45 
     
    3132 
    3233    def __getResiduals__(self, x): 
    33         if hasattr(self.prev, 'residualsX') and all(x == self.prev.residualsX): 
    34             return self.prev.residualsVal 
     34#        if self.prevVal['r'].has_key('x') and all(x == self.prevVal['r']['x']): 
     35#            return self.prevVal['r']['Val'] 
    3536        # TODO: add quadratic constraints 
    3637        r = EmptyClass() 
     
    4142        r.lb = self.__getLbResiduals__(x) 
    4243        r.ub = self.__getUbResiduals__(x) 
    43         self.prev.residualsVal = r 
     44#        self.prevVal['r']['Val'] = deepcopy(r) 
     45#        self.prevVal['r']['x'] = copy(x) 
    4446        return r 
    4547 
  • trunk/openopt/scikits/openopt/Kernel/ooGraphics.py

    r1068 r1089  
    7575            self.nTrajectories = 0 
    7676            self.ghandlers = [] 
    77             self.solverNames = [] 
     77            #self.solverNames = [] 
    7878 
    7979            #TODO: the condition should be handled somewhere other place, not here. 
     
    243243                p2 = pylab.plot([xx[0]], [yy2[0]], color = color, marker = self.specifierStart,  markersize = self.markerSize) 
    244244                p3 = pylab.plot([xx[0], xx[0]+1e-50], [yy2[0], yy2[0]], color = color, markersize = self.markerSize) 
    245                 if p.legend == '': pylab.legend([p3[0]], [p.solverName], shadow = True) 
     245                if p.legend == '': pylab.legend([p3[0]], [p.solver.__name__], shadow = True) 
    246246                elif type(p.legend) in (tuple, list): pylab.legend([p3[0]], p.legend, shadow = True) 
    247247                else: pylab.legend([p3[0]], [p.legend], shadow = True) 
  • trunk/openopt/scikits/openopt/Kernel/ooIter.py

    r1004 r1089  
    44from numpy import asfarray, atleast_1d,  isreal,  all,  ndarray 
    55from ooMisc import isSolved 
     6NoneType = type(None) 
    67 
    78def ooIter(p, *args,  **kwargs): 
     
    2223        p.lastDrawIter = 0 
    2324 
    24  
    2525    p.solver.__decodeIterFcnArgs__(p,  *args,  **kwargs) 
    26     p.iterPrint() 
    27  
    2826    if p.graphics.xlabel == 'nf': p.iterValues.nf.append(p.nEvals['f']) 
    2927 
     
    3331            if type(attr) == list: 
    3432                attr.pop(-1) 
    35             elif type(attr) == ndarray
    36                 p.warn('Found ndarray in p.iterValues (Python list expected), it can lead to error(s)!') 
     33            elif type(attr) not in [str, NoneType]
     34                p.warn('Found incorrect type ' + str(type(attr)) +' in p.iterValues (Python list expected), it can lead to error(s)!') 
    3735        #TODO: handle case x0 = x1 = x2 = ... 
    3836        return 
    3937 
    40  
     38    p.iterPrint() 
    4139 
    4240    p.iterCPUTime.append(clock() - p.cpuTimeStart) 
     
    6866            p.userStop = True 
    6967 
    70     if p.istop and not p.solver.__iterfcnConnected__ and not p.isFinished and p.solverName != 'ipopt': 
     68    if p.istop and not p.solver.__iterfcnConnected__ and not p.isFinished and p.solver.__name__ != 'ipopt': 
    7169        raise isSolved 
    7270 
  • trunk/openopt/scikits/openopt/Kernel/runProbSolver.py

    r1065 r1089  
    77import os, string 
    88from ooMisc import isSolved 
    9 from string import capitalize 
     9from string import capitalize, lower 
    1010from BaseProblem import ProbDefaults 
    1111from scikits.openopt.Kernel.ooMisc import __solverPaths__ 
     
    3131    else: p.was_involved = True 
    3232 
     33    if ':' in solver_str: 
     34        probTypeToConvert,  solverName = solver_str.split(':', 1) 
     35        converterName = lower(p.probType)+'2'+probTypeToConvert 
     36        converter = getattr(p, converterName) 
     37        return converter(solverName, *args, **kwargs) 
     38 
    3339    if kwargs.has_key('debug'): 
    3440       p.debug =  kwargs['debug'] 
     
    4349 
    4450    p.solver = solverClass() 
    45     p.solverName = p.solver.__name__ 
    46     setattr(p, p.solverName, EmptyClass()) 
    47     p.solverLicense = p.solver.__license__ 
     51#    p.solverName = p.solver.__name__ 
     52#    setattr(p, p.solverName, EmptyClass()) 
    4853    solver = p.solver.__solver__ 
    4954 
     
    152157 
    153158    if hasattr(p, 'delayedConnectIterFcn'): 
    154         if p.solver.__iterfcnConnected__: p.warn('solver ' + p.solverName + ' has native iterfcn, user-defined connection via p.connectIterFcn will be ignored') 
     159        if p.solver.__iterfcnConnected__: p.warn('solver ' + p.solver.__name__ + ' has native iterfcn, user-defined connection via p.connectIterFcn will be ignored') 
    155160        else: 
    156161            if p.delayedConnectIterFcn == 'df': p.warn('iterfcn now connects to df automatically by default, you can either use other funcs like d2f to suppress the warning or ommit user-defined connecting to df at all') 
     
    173178    p.cpuTimeStart = clock() 
    174179 
     180 
    175181    ############################ 
    176182    # Start solving problem: 
     183 
    177184    if p.iprint >= 0: 
    178185        print '-----------------------------------------------------' 
    179         s = 'solver: ' +  p.solverName +  '   problem: ' + p.name 
     186        s = 'solver: ' +  p.solver.__name__ +  '   problem: ' + p.name 
    180187        if p.showGoal: s += '   goal: ' + p.goal 
    181188        print s 
     189 
     190    p.iterfcn(p.x0) 
     191 
    182192    try: 
    183193        solver(p) 
  • trunk/openopt/scikits/openopt/solvers/UkrOpt/ralg_oo.py

    r1061 r1089  
    4545        # Shor r-alg engine 
    4646        ############################################# 
    47  
    48         startPoint = p.point(p.x0) 
    4947        x = x0.copy() 
    5048        xPrevIter = x0.copy() 
    51         #p.xk = x0.copy() 
    52         #f = startPoint.f() 
    53         #p.fk = f 
     49        startPoint = p.point(x) 
     50        PrevIterPoint = p.point(x) 
    5451 
    5552        g = self.__getRalgDirection__(startPoint) 
    56         p._df = copy(g) 
    57  
    58         p.iterfcn(startPoint) 
    59         if p.istop: 
    60             p.xf = x 
    61             p.ff = f 
    62             #r.advanced.ralg.hs = hs; 
    63             return 
     53 
     54#        p.iterfcn(startPoint) 
     55#        if p.istop: 
     56#            p.xf = x 
     57#            p.ff = f 
     58#            #r.advanced.ralg.hs = hs; 
     59#            return 
    6460 
    6561        g2 = copy(g) 
    66         if p.rk <= p.contol
     62        if p.isFeas(x)
    6763            constrGradPrevIter = zeros(p.n) 
    6864            dfPrevIter = g2.copy() 
  • trunk/openopt/scikits/openopt/solvers/scipy_optim/lapack_dgelss_oo.py

    r1008 r1089  
    1212    def __init__(self):pass 
    1313    def __solver__(self, p): 
     14        p.iterfcn(p.x0) 
    1415 
    1516        v,x,s,rank,info = dgelss(p.C, p.d) 
  • trunk/openopt/scikits/openopt/solvers/scipy_optim/lapack_sgelss_oo.py

    r1008 r1089  
    1212    def __init__(self):pass 
    1313    def __solver__(self, p): 
     14        p.iterfcn(p.x0) 
    1415        v,x,s,rank,info = sgelss(p.C, p.d) 
    1516        xf = x[:p.C.shape[1]] 
  • trunk/openopt/scikits/openopt/solvers/scipy_optim/scipy_cobyla_oo.py

    r934 r1089  
    66from numpy import inf, array, copy 
    77 
    8 class EmptyClass: pass     
    9      
     8class EmptyClass: pass 
     9 
    1010class scipy_cobyla(BaseAlg): 
    1111    __name__ = 'scipy_cobyla' 
    1212    __license__ = "BSD" 
    1313    __authors__ = """undefined""" 
    14     __alg__ = "Constrained Optimization BY Linear Approximation"   
    15     __info__ = 'constrained NLP solver, no user-defined derivatives are handled'#TODO: add '__info__' field to other solvers     
     14    __alg__ = "Constrained Optimization BY Linear Approximation" 
     15    __info__ = 'constrained NLP solver, no user-defined derivatives are handled'#TODO: add '__info__' field to other solvers 
    1616    __constraintsThatCannotBeHandled__ = [] # empty list means the solver can handle all constraints 
    17      
     17 
    1818    def __init__(self): pass 
    1919    def __solver__(self, p): 
     
    2424        if p.userProvided.h: p.cobyla.nh = p.h(p.x0).size 
    2525        else: p.cobyla.nh = 0 
    26              
     26 
    2727        det_arr = cumsum(array((p.cobyla.nc, p.cobyla.nh, p.b.size, p.beq.size, p.cobyla.nh, p.beq.size))) 
    28          
     28 
    2929        cons = [] 
    3030        for i in xrange(det_arr[-1]): 
    31             if i < det_arr[0]:  
     31            if i < det_arr[0]: 
    3232                c = lambda x, i=i: - p.c(x)[i] # cobyla requires positive constraints! 
    33             elif det_arr[0] <= i < det_arr[1]:  
     33            elif det_arr[0] <= i < det_arr[1]: 
    3434                j = i - det_arr[0] 
    3535                c = lambda x, i=i: p.h(x)[j] 
    36             elif det_arr[1] <= i < det_arr[2]:  
     36            elif det_arr[1] <= i < det_arr[2]: 
    3737                j = i - det_arr[1] 
    3838                #assert 0<= j <p.cobyla.nb 
     
    4242                #assert 0<= j <p.cobyla.nbeq 
    4343                c = lambda x, j=j: p.dotmult(p.Aeq[j], x).sum() - p.beq[j] 
    44             elif det_arr[3] <= i < det_arr[4]:  
     44            elif det_arr[3] <= i < det_arr[4]: 
    4545                j = i - det_arr[3] 
    46                 c = lambda x, j=j: - p.h(x)[j]                    
     46                c = lambda x, j=j: - p.h(x)[j] 
    4747            elif det_arr[4] <= i < det_arr[5]: 
    4848                j = i - det_arr[4] 
    4949                #assert 0<= j <p.cobyla.nbeq 
    5050                c = lambda x, j=j: p.dotmult(p.Aeq[j], x).sum() - p.beq[j] 
    51             else:  
     51            else: 
    5252                p.err('error in connection cobyla to openopt') 
    5353            cons.append(c) 
     
    5858##            c3 = p.matmult(p.Aeq, x) - p.beq 
    5959##            return hstack((c0, c1, -c1, c2, c3, -c3)) 
    60          
    61          
    62         p.xk = p.x0.copy() 
    63         p.fk = p.f(p.x0) 
    64          
    65         p.iterfcn() 
    66         if p.istop: 
    67             p.xf = p.xk 
    68             p.ff = p.fk 
    69             return  
    70          
    71          
     60 
     61 
     62#        p.xk = p.x0.copy() 
     63#        p.fk = p.f(p.x0) 
     64
     65#        p.iterfcn() 
     66#        if p.istop: 
     67#            p.xf = p.xk 
     68#            p.ff = p.fk 
     69#            return 
     70 
     71 
    7272        xf = fmin_cobyla(p.f, p.x0, cons = tuple(cons), iprint = 0, maxfun = p.maxFunEvals, rhoend = p.xtol ) 
    73          
     73 
    7474        p.xk = xf 
    7575        p.fk = p.f(xf) 
    7676        p.istop = 1000 
    77         p.iterfcn() 
    78         p.xf = xf 
    79         p.ff = p.fk 
    80            
    81              
    82              
     77#        p.iterfcn() 
     78#        p.xf = xf 
     79#        p.ff = p.fk 
     80 
     81 
     82