def lp_solve_stdgrb(c, A=None, b=None, Aeq=None, beq=None, lb=None, ub=None, verbose=False, log=False, method='default', crossover=-1, **kwargs): if not stdgrb: raise ImportError("stdgrb not installed") c, A, b, Aeq, beq, lb, ub = lp_init_mat(c, A, b, Aeq, beq, lb, ub) method_to_int = { 'default': -1, 'primal-simplex': 0, 'dual-simplex': 1, 'barrier': 2, 'concurrent': 3, 'deterministic-concurrent': 4, 'deterministic-concurrent-simplex': 5 } if method in method_to_int: method = method_to_int[method] # add equality as two inequality (stdgrb do not handle that well yet) A2 = np.concatenate((A, Aeq, -Aeq), 0) b2 = np.concatenate((b, beq, -beq)) lb = lb.astype(np.float64) ub = ub.astype(np.float64) sol, val = stdgrb.lp_solve(c, A2, b2, lb=lb, ub=ub, method=method, logtoconsole=verbose, crossover=crossover) res = {'x': sol, 'fun': val, 'success': val is not None} if log: return sol, val, res else: return sol, val
n = 5000 d = 1000 np.random.seed(0) c = -np.random.rand(d) A = np.random.rand(n, d) b = np.random.rand(n) lb = np.zeros(d) ub = np.ones(d) #%% print('Default method') tic() x1, v1 = stdgrb.lp_solve(c, A, b, lb, ub, logtoconsole=0) toc() print(x1) As = sp.sparse.csr_matrix(A) tic() x2, v2 = stdgrb.lp_solve_sparse(c, As, b, lb, ub, logtoconsole=0) toc() print(x2) print('err=', np.sum(np.square(x1 - x2))) #%%
d = 2 np.random.seed(0) c = np.array([0.0, -1.0]) A = np.array([[-1.0, 1], [3, 2], [2, 3]]) b = np.array([1.0, 12, 12]) lb = np.zeros(d) ub = 4 * np.ones(d) #%% print('Continuous LP ') tic() x1, v1 = stdgrb.lp_solve(c, A, b, lb, ub, logtoconsole=0) toc() print(x1) print('Binary variables !') tic() x1, v1 = stdgrb.lp_solve(c, A, b, lb, ub, typevar=1, logtoconsole=0) toc() print(x1) print('Integer variables !') tic() x1, v1 = stdgrb.lp_solve(c, A, b, lb, ub, typevar=2, logtoconsole=0) toc()
tic() sol=scipy.optimize.linprog(c,A,b) x0=sol.x v0=sol.fun toc() print('Scipy interior point solver') tic() sol=scipy.optimize.linprog(c,A,b,method='interior-point') x00=sol.x v00=sol.fun toc() print('Default method') tic() x1,v1=stdgrb.lp_solve(c,A,b,lb,ub,logtoconsole=0) toc() print('Simplex method') tic() x2,v2=stdgrb.lp_solve(c,A,b,lb,ub,method=1,logtoconsole=0) toc() print('Interior point method') tic() x3,v3=stdgrb.lp_solve(c,A,b,lb,ub,method=2,logtoconsole=0,crossover=0) toc() #%%