示例#1
0
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
示例#2
0
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)))

#%%
示例#3
0
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()
示例#4
0
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()
#%%