Changeset 1072
- Timestamp:
- 06/29/08 12:56:43 (2 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/scikits/openopt/solvers/lp_solve/lpSolve_oo.py
r951 r1072 3 3 from numpy import asarray, inf, ones, nan 4 4 5 6 5 from scikits.openopt.Kernel.ooMisc import LinConst2WholeRepr 7 6 7 def List(x): 8 if x == None or x.size == 0: return None 9 else: return x.tolist() 10 8 11 class lpSolve(BaseAlg): 9 __name__ = 'lp _solve'12 __name__ = 'lpSolve' 10 13 __license__ = "LGPL" 11 14 __authors__ = "Michel Berkelaar, michel@es.ele.tue.nl" 12 15 __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" 14 17 __constraintsThatCannotBeHandled__ = ['c', 'h', 'binVars'] # empty list means the solver can handle all constraints 15 18 def __init__(self): pass 16 19 def __solver__(self, p): 17 20 18 21 LinConst2WholeRepr(p) 19 22 #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 26 30 [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) 28 32 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 30 34 p.xf = asarray(x_opt).reshape((-1,1)) 31 35 p.duals = duals … … 37 41 p.istop = -1 38 42 39 40 41 42 ##if __name__ == '__main__':43 ## a = LPSolve()44 ## a.solver(1)
