2011-10-11 55 views
11

Todavía soy muy nuevo en Python, después de años y años de Matlab. Estoy tratando de usar Pulp para configurar un programa lineal entero.Python Pulp usando Matrices

Teniendo en cuenta una serie de números:

{P[i]:i=1...N} 

que desean maximizar:

sum(x_i P_i) 

sujeto a las limitaciones

A x <= b 
A_eq x = b_eq 

y con los límites (cotas de vectores basados)

LB <= x <= UB 

En la pulpa, sin embargo, no veo cómo hacer declaraciones de vectores correctamente. Yo estaba usando:

RANGE = range(numpy.size(P)) 
x = pulp.LpVariable.dicts("x", LB_ind, UB_ind, "Integer") 

donde solo puedo ingresar límites individuales (por lo tanto, solo 1 número).

prob = pulp.LpProblem("Test", pulp.LpMaximize) 
prob += pulp.lpSum([Prices[i]*Dispatch[i] for i in RANGE]) 

y las limitaciones, ¿realmente tengo que hacer esta línea por línea? Parece que me estoy perdiendo algo. Agradecería algo de ayuda. La documentación discute un breve ejemplo. El número de variables en mi caso es de unos miles.

+0

Como recuerdo en PuLP, debe agregar cada restricción individualmente (línea por línea). – arboc7

+0

Tengo la misma pregunta. Sé que esto es viejo. ¡Agradecería enormemente una respuesta satisfactoria! –

Respuesta

2

Puede establecer las variables lowBound y upBound después de la inicialización. Puede crear una matriz de variables con

LB[i] <= x[i] <= UB[i] 

con el código siguiente.

x = pulp.LpVariable.dicts("x", RANGE, cat="Integer") 
for i in x.viewkeys(): 
    x[i].lowBound = LB_ind[i] 
    x[i].upBound = UB_ind[i] 

El segundo parámetro a LpVariable.dict es el conjunto de índices de las variables de decisión, no sus límites inferiores.

Cuestiones relacionadas