Changeset 1072

Show
Ignore:
Timestamp:
06/29/08 12:56:43 (2 months ago)
Author:
dmitrey.kroshko
Message:

add scaling parameter for lpsolve

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openopt/scikits/openopt/solvers/lp_solve/lpSolve_oo.py

    r951 r1072  
    33from numpy import asarray, inf, ones, nan 
    44 
    5  
    65from scikits.openopt.Kernel.ooMisc import LinConst2WholeRepr 
    76 
     7def List(x): 
     8    if x == None or x.size == 0: return None 
     9    else: return x.tolist() 
     10 
    811class lpSolve(BaseAlg): 
    9     __name__ = 'lp_solve' 
     12    __name__ = 'lpSolve' 
    1013    __license__ = "LGPL" 
    1114    __authors__ = "Michel Berkelaar, michel@es.ele.tue.nl" 
    1215    __homepage__ = 'http://sourceforge.net/projects/lpsolve, http://www.cs.sunysb.edu/~algorith/implement/lpsolve/implement.shtml, http://www.nabble.com/lp_solve-f14350i70.html' 
    13     __alg__ = "lpsolve"   
     16    __alg__ = "lpsolve" 
    1417    __constraintsThatCannotBeHandled__ = ['c', 'h', 'binVars'] # empty list means the solver can handle all constraints 
    1518    def __init__(self): pass 
    1619    def __solver__(self, p): 
    17          
     20 
    1821        LinConst2WholeRepr(p) 
    1922        #FIXME: if problem is search for MAXIMUM, not MINIMUM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    20         f = - asarray(p.f) # sign '-' because lp_solve by default searches for maximum, not minimum         
    21         #p.lb[p.lb == -inf] = -1.0e30 
    22         #p.ub[p.ub == inf] = 1.0e30 
    23         def List(x): 
    24             if x == None or x.size == 0: return None 
    25             else: return x.tolist() 
     23        f = - asarray(p.f) # sign '-' because lp_solve by default searches for maximum, not minimum 
     24        scalemode = False 
     25        if p.scale in [1, True]: 
     26            scalemode = True 
     27        elif not (p.scale in [None, 0, False]): 
     28            p.warn(self.__name__ + ' requires p.scale from [None, 0, False, 1, True], other value obtained, so scale = True will be used') 
     29            scalemode = True 
    2630        [obj, x_opt, duals] = lps(List(f.flatten()), List(p.Awhole), List(p.bwhole.flatten()), List(p.dwhole.flatten()), \ 
    27         List(p.lb.flatten()), List(p.ub.flatten()), (1+asarray(p.intVars)).tolist()
     31        List(p.lb.flatten()), List(p.ub.flatten()), (1+asarray(p.intVars)).tolist(), scalemode
    2832        if obj != []: 
    29             p.ff = - obj # sign '-' because lp_solve by default searches for maximum, not minimum         
     33            p.ff = - obj # sign '-' because lp_solve by default searches for maximum, not minimum 
    3034            p.xf = asarray(x_opt).reshape((-1,1)) 
    3135            p.duals = duals 
     
    3741            p.istop = -1 
    3842 
    39  
    40  
    41          
    42 ##if __name__ == '__main__': 
    43 ##    a = LPSolve() 
    44 ##    a.solver(1)