Changeset 950
- Timestamp:
- 04/29/08 10:47:33 (7 months ago)
- Files:
-
- trunk/openopt/README.txt (modified) (1 diff)
- trunk/openopt/scikits/openopt/COPYING.txt (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/BaseProblem.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/runProbSolver.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/Kernel/setDefaultIterFuncs.py (modified) (1 diff)
- trunk/openopt/scikits/openopt/examples/milp_1.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/solvers/CVXOPT/CVXOPT_LP_Solver.py (modified) (2 diffs)
- trunk/openopt/scikits/openopt/solvers/CVXOPT/glpk_oo.py (added)
- trunk/openopt/scikits/openopt/solvers/lp_solve/lpSolve_oo.py (modified) (1 diff)
- trunk/openopt/setup.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/README.txt
r919 r950 1 openopt livense: BSD 2 1 3 openopt usage: 2 4 trunk/openopt/scikits/openopt/COPYING.txt
r660 r950 1 1 (New BSD license) 2 2 ----------------------------------- 3 Copyright (c) 2007, Dmitrey Kroshko, Matthieu Brucher3 Copyright (c) 2007, Dmitrey Kroshko, www.icyb.kiev.ua optimization department 4 4 5 All rights reserved. 5 OpenOpt Kernal license is BSD (see text below) 6 7 GenericOpt rights (that currently is spread with OpenOpt, in terms of BSD license) belong to Matthieu Brucher 8 9 All connected solvers have their own licenses. 6 10 7 11 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS trunk/openopt/scikits/openopt/Kernel/BaseProblem.py
r948 r950 109 109 self.x0 = nan 110 110 self.intVars = [] # for problems like MILP 111 self.binVars = [] # for problems like MILP 111 112 112 113 self.noise = ProbDefaults['noise'] trunk/openopt/scikits/openopt/Kernel/runProbSolver.py
r948 r950 45 45 'galileo' : "scikits.openopt.solvers.Standalone.galileo_oo", 46 46 'toms587' : "scikits.openopt.solvers.Standalone.toms587_oo", 47 'glpk' : "scikits.openopt.solvers.CVXOPT.glpk_oo", 47 48 } 48 49 trunk/openopt/scikits/openopt/Kernel/setDefaultIterFuncs.py
r874 r950 8 8 FVAL_IS_ENOUGH = 10 9 9 SOLVED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON = 1000 10 11 UNDEFINED = 0 10 12 11 13 IS_NAN_IN_X = -4 trunk/openopt/scikits/openopt/examples/milp_1.py
r595 r950 5 5 6 6 f = [1, 2, 3, 4, 5, 4, 2, 1] 7 intVars = [5, 8] 8 lb = 1.5 * ones([8,1]) 7 8 # indexing starts from ZERO! 9 # while in native lpsolve-python wrapper from 1 10 # so if you used [5,8] for native lp_solve python binding 11 # you should use [4,7] instead 12 intVars = [4, 7] 13 14 lb = -1.5 * ones([8,1]) 15 ub = 15 * ones([8,1]) 9 16 A = zeros((5, 8)) 10 17 b = zeros(5) … … 14 21 b[i] = -150 + 80*sin(80*i) 15 22 16 p = MILP(f=f, intVars=intVars, lb=lb, A=A, b=b)23 p = MILP(f=f, lb=lb, ub=ub, A=A, b=b, intVars=intVars) 17 24 r = p.solve('lpSolve') 25 print 'f_opt:', r.ff # 25.801450769161505 26 print 'x_opt:', r.xf # [ 15. 10.15072538 -1.5 -1.5 -1. -1.5 -1.5 15.] 18 27 19 print 'f_opt:', r.ff # 55.05 20 print 'x_opt:' 21 print r.xf # [1.54923517 1.5 1.5 1.5 2. 1.5 1.5 21.] 28 """ 29 if you have installed glpk+cvxopt 1.0 or later 30 (with BUILD_GLPK=1 in setup.py file) 31 you can handle MILP problems with binary constraints 32 (coords x from p.binVars should be in {0, 1}): 33 34 p = MILP(f=f, lb=lb, ub=ub, A=A, b=b, intVars=intVars, binVars=[1]) 35 #intVars, binVars indexing from ZERO! 36 r = p.solve('glpk') 37 38 print 'f_opt:', r.ff # 26.566058805272387 39 print 'x_opt:', r.xf # [15. 1. -1.5 -1.5 -1. -1.5 8.0330294 15.] 40 """ trunk/openopt/scikits/openopt/solvers/CVXOPT/CVXOPT_LP_Solver.py
r934 r950 1 from numpy import asarray, ones, all, isfinite, copy, nan, concatenate 1 from numpy import asarray, ones, all, isfinite, copy, nan, concatenate, array 2 2 from scikits.openopt.Kernel.ooMisc import WholeRepr2LinConst, xBounds2Matrix 3 3 from cvxopt_misc import * 4 4 import cvxopt.solvers as cvxopt_solvers 5 from cvxopt.base import matrix 6 from scikits.openopt.Kernel.setDefaultIterFuncs import SOLVED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON, IS_MAX_ITER_REACHED, IS_MAX_TIME_REACHED, FAILED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON, UNDEFINED 5 7 6 8 def CVXOPT_LP_Solver(p, solverName): … … 20 22 # sol= cvxopt_solvers.solvers.lp(Matrix(p.f), Matrix(p.A), Matrix(p.b), Matrix(p.Aeq), Matrix(p.beq), solverName) 21 23 #else: 22 try: 24 25 if len(p.intVars)>0 and solverName == 'glpk': 26 from cvxopt.glpk import ilp 27 c = Matrix(p.f) 28 A, b = Matrix(p.Aeq), Matrix(p.beq) 29 G, h = Matrix(p.A), Matrix(p.b) 30 if A is None: 31 A = matrix(0.0, (0, p.n)) 32 b = matrix(0.0,(0,1)) 33 if G is None: 34 G = matrix(0.0, (0, p.n)) 35 h = matrix(0.0,(0,1)) 36 37 (status, x) = ilp(c, G, h, A, b, set(p.intVars), B=set(p.binVars)) 38 if status == 'optimal': p.istop = SOLVED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON 39 elif status == 'maxiters exceeded': p.istop = IS_MAX_ITER_REACHED 40 elif status == 'time limit exceeded': p.istop = IS_MAX_TIME_REACHED 41 elif status == 'unknown': p.istop = UNDEFINED 42 else: p.istop = FAILED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON 43 if x is None: 44 p.xf = nan*ones(p.n) 45 else: 46 p.xf = array(x).flatten()#w/o flatten it yields incorrect result in ff! 47 p.ff = sum(p.dotmult(p.f, p.xf)) 48 p.msg = status 49 else: 23 50 sol = cvxopt_solvers.lp(Matrix(p.f), Matrix(p.A), Matrix(p.b), Matrix(p.Aeq), Matrix(p.beq), solverName) 24 except: 25 msg_err = 'Error: YOU SHOULD INSTALL ' 26 if solverName is not None: msg_err += solverName + ' and ' 27 msg_err += 'CVXOPT' 28 print msg_err 29 p.istop, p.msg = -1, 'unknown' 30 return 31 32 p.msg = sol['status'] 33 if p.msg == 'optimal' : p.istop = 1000 34 else: p.istop = -100 35 36 37 if sol['x'] is not None: 38 p.xf = asarray(sol['x']).flatten() 39 p.ff = sum(p.dotmult(p.f, p.xf)) 40 p.duals = concatenate((asarray(sol['y']).flatten(), asarray(sol['z']).flatten())) 41 else: 42 p.ff = nan 43 p.xf = nan*ones([p.n,1]) 51 p.msg = sol['status'] 52 if p.msg == 'optimal' : p.istop = SOLVED_WITH_UNIMPLEMENTED_OR_UNKNOWN_REASON 53 else: p.istop = -100 54 if sol['x'] is not None: 55 p.xf = asarray(sol['x']).flatten() 56 p.ff = sum(p.dotmult(p.f, p.xf)) 57 p.duals = concatenate((asarray(sol['y']).flatten(), asarray(sol['z']).flatten())) 58 else: 59 p.ff = nan 60 p.xf = nan*ones([p.n,1]) trunk/openopt/scikits/openopt/solvers/lp_solve/lpSolve_oo.py
r935 r950 25 25 else: return x.tolist() 26 26 [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()), asarray(p.intVars).tolist())27 List(p.lb.flatten()), List(p.ub.flatten()), (1+asarray(p.intVars)).tolist()) 28 28 if obj != []: 29 29 p.ff = - obj # sign '-' because lp_solve by default searches for maximum, not minimum trunk/openopt/setup.py
r933 r950 14 14 DESCRIPTION = 'A python module for numerical optimization' 15 15 LONG_DESCRIPTION = descr 16 MAINTAINER = ' Dmitrey Kroshko,Matthieu Brucher',16 MAINTAINER = 'mainteiner of OpenOpt is Dmitrey Kroshko, mainteiner of GenericOpt is Matthieu Brucher', 17 17 MAINTAINER_EMAIL = 'dmitrey.kroshko@scipy.org', 18 18 URL = 'http://openopt.blogspot.com', … … 29 29 ##from scikits import openopt 30 30 ##from openopt.info import __version__ as openopt_version 31 openopt_version = 0.1 531 openopt_version = 0.17 32 32 from shutil import copytree, rmtree 33 33
