Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
(PROC LP)
Se trata de encontrar valores x1, x2... xn que optimicen la función objetivo z= c1x1+c2x2+...+cnxn y que
satisfagan las restricciones lineales ai1x1+...+ainxn ∝bi para i= 1,2,...,m, donde ∝ puede ser ≤,≥ o =.
Frecuentemente también se imponen las condiciones xj≥0 ∀j =1,2,...,n.
SAS.
MAXIMIZAR X2
sujeto a:
2x1-x2≥ -2
x1+2x2≤8
data uno;
input _ID_ $ x1 x2 _TYPE_ $ _RHS_;
datalines;
z 0 1 max .
r1 2 -1 ge -2
r2 1 2 le 8
;
proc lp data=uno tableauprint;
run;
Variable Summary Current Tableau
INV(B)*R r1 r2
Col Variable Status Type Price Activity Reduced
Name Cost R_COSTS . -0.2 -0.4
1 x1 BASIC NON- 0 0.8 0 x2 3.6 0.2 0.4
NEG
x1 0.8 -0.4 0.2
2 x2 BASIC NON- 1 3.6 0
NEG PHASE_1_ 0 0 0
4 r2 SLACK 0 0 -0.4
Constraint Summary
1 Z OBJECTVE . 0 3.6 .
2 r1 GE 3 -2 -2 -0.2
3 r2 LE 4 8 8 0.4
El máximo de esta función se alcanza en 3,6; y las variables x1 y x2 toman los valores de 0,8 y 3,6
respectivamente.
- "_TYPE_" --> indica el tipo de de desigualdad.
- "_ID_" --> nombre de las restricciones.
- "_RHS_" --> recoge los términos del lado derecho de las restricciones.
- PROC LP opciones --> "TABLEAUPRINT" = muestra la tabla final del simplex.
- LE = menor o igual que
- GE = mayor o igual que
- EQ = igual que
SAS.
Minimizar f = -2x1-2x2-2x3+( x1^2+ x2^2+ x3^2)
sujeto a:
x1+ x2+ x3 ≤ 1
12x1+6x2 ≤ 7
xj ≥ 0
proc nlp;
min f;
decvar x1 x2 x3;
nlincon y1<=1, y2<=7;
y1=x1+x2+x3;
y2=12*x1+6*x2;
lincon x1>=0;
lincon x2>=0;
lincon x3>=0;
f = -2*x1-2*x2-2*x3+(x1**2+x2**2+x3**2);
run;
Optimization Results
Parameter Estimates
N Parameter Estimate Gradient Gradient
Objective Lagrange
Function Function
1 x1 0.333333 -1.333333 -2.22045E-16
2 x2 0.333333 -1.333333 -2.22045E-16
3 x3 0.333333 -1.333333 0
Value of Objective Function = -1.666666667
El valor objetivo de la función es -1.666666667cuando todos los valores estimados son 0.3333.
NOTA: si el valor objetivo es cero o alguna restricción no se cumple al realizar el problema, una posible
solución es añadir después del PROC NLP la sentencia "TECHNIQUE=QUANEW".
- DECVAR --> funciones (variables de decisión en procesos interactivos.
- LINCON --> restricciones lineales.
- NLINCON --> restricciones no lineales.
Problema del transporte. (PROC TRANS)
El problema del transporte es un tipo particular del problema de programación lineal.
En el problema del transporte existe solución factible si y solo si la oferta no es inferior a la demanda.
SAS.
La empresa XXX tiene tres fábricas donde manufactura su producto P, con capacidades de producción
de 25,25 y 10. Debe surtir a 4 almacenes con demandas de 20, 15,20 y 5. Los costos de enviar desde
cualquier fábrica a cualquier almacén se pueden ver en la tabla de abajo.
Costo de Transporte
1 _DEMAND_ . 20 15 20 5 .
2 fabrica1 25 0 5 20 0 -3
3 fabrica2 25 20 0 0 5 0
4 fabrica3 10 0 10 0 0 -1
5 _DUAL_ . 5 5 3 3 .
Para que el costo sea mínimo en cuanto al transporte, la fábrica 1 debe mandar 5 unidades al almacén 2
y 20 unidades al almacén 3; la fábrica 2 debe mandar 20 unidades al almacén 1 y 5 unidades al almacén
4; y por último, la fábrica 3 debe mandar 10 unidades al almacén 2.
PROC TRANS opciones (CAPACITY --> conjunto de datos conteniendo las capacidades de los arcos,
MINFLOW --> conjunto de datos conteniendo los flujos mínimos de los arcos, NOTHRUKEY --> descarta
un exceso de oferta o demanda)
HEADNONE variables (variables de destino, cabecera de la tabla)
SUPPLY variables (variable de oferta)
TAILNOIDE variable (variable origen)
/*ejercicio1 -->programacion lineal*/
data e1pl;
input _ID_ $ x11-x14 x21-x24 x31-x34 _TYPE_
$ _RHS_; SolutionSummary
datalines;
z 2 2 0 4 5 9 8 3 6 4 3 2 min .
r1 1 1 1 1 0 0 0 0 0 0 0 0 le 25 Terminated Successfully
r2 0 0 0 0 1 1 1 1 0 0 0 0 le 25 ObjectiveValue 165
r3 0 0 0 0 0 0 0 0 1 1 1 1 le 10
r4 1 0 0 0 1 0 0 0 1 0 0 0 ge 20
r5 0 1 0 0 0 1 0 0 0 1 0 0 ge 15
Phase 1 Iterations 7
r6 0 0 1 0 0 0 1 0 0 0 1 0 ge 20
r7 0 0 0 1 0 0 0 1 0 0 0 1 ge 5 Phase 2 Iterations 3
;
proclp data = e1pl tableauprint; Phase 3 Iterations 0
run;
IntegerIterations 0
Col Variable Name Status Type Price Activity ReducedCost Initial Basic Feasible Variables 9
11 x33 NON-NEG 3 0 1
13 r1 SLACK 0 0 3
14 r2 DEGEN SLACK 0 0 0
15 r3 SLACK 0 0 1
16 r4 SURPLUS 0 0 5
17 r5 SURPLUS 0 0 5
18 r6 SURPLUS 0 0 3
19 r7 SURPLUS 0 0 3
El mínimo se alcanza en 165 (valor objetivo); y las variables toman los siguientes valores:
MÉTODO HUNGARO.
Existen cuatro operarios que se pueden asignar al trabajo con tres máquinas. Un estudio de tiempos y
movimientos ha arrojado los siguientes tiempos por operario para las tres máquinas. Indicar qué
operario debe trabajar en qué máquina y cuál de ellos no será asignado a ninguna.
Encontrar la asignación de operarios a máquinas que minimice el tiempo total.
SAS.
/*ejercicio3 -->asignacion*/
data ejercicio3;
input operario $ maquina1-maquina3;
datalines;
operario1 10 7 9
operario2 7 5 8
operario3 9 8 10
operario4 8 9 7
;
procassign data=ejercicio3 out=salida22;
cost maquina1-maquina3;
id operario;
run;
procprintdata=salida22;
run;
Obs operario maquina1 maquina2 maquina3 _ASSIGN_ _FCOST_ Para que la asignación sea óptima, al
1 Operario1 10 7 9 maquina2 7 operario 1 se le debe de asignar la
segunda máquina; al operario 2 se le
2 Operario2 7 5 8 maquina1 7 debe de asignar la primera máquina;
3 Operario3 9 8 10 0 al operario 4 se le debe de asignar la
tercera máquina; y por último, al
4 Operario4 8 9 7 maquina3 7
operario 3 no se le asigna ninguna
/*ejercicio3--> transporte*/ máquina, por lo que queda ocioso.
data e3trans;
input o $ oferta maquina1-maquina3;
datalines;
. . 1 1 1
o1 1 10 7 9
o2 1 7 5 8
o3 1 9 8 10
o4 1 8 9 7
;
run;
proctrans COST=e3trans out=salida9 nothrunet;
tailnode o;
headnose maquina1-maquina3;
supplyoferta;
run;
procprintdata= salida9;
run;
2 o1 1 0 0 0 0
3 o2 1 0 1 0 -2
4 o3 1 1 0 0 0
5 o4 1 0 0 1 -1
6 _DUAL_ . 9 7 8 .
Según el problema de transporte, al operario 1 no se le debe de asigna ninguna máquina (por lo que
queda ocioso); al operario 2 se le debe de asignar la segunda máquina (ya que el operario 2 oferta una
unidad y ésta se “manda” a la maquina 2); al operario 3 se le debe de asignar la primera máquina (ya
que el operario 3 oferta una unidad y ésta se “manda” a la máquina 1); y por último, al operario 4 se le
debe de asignar la tercera máquina(ya que el operario 3 oferta una unidad y ésta se “manda” a la
máquina 3).
Como podemos observar, esta solución no coincide con el método de asignación, pero más tarde
veremos al realizar el método húngaro que existen dos soluciones óptimas para asignar las máquinas a
cada operario.
Terminación correcta
Valor objetivo 21
Iteraciones de fase 1 0
Iteraciones de fase 2 4
Iteraciones de fase 3 0
Iteraciones de enteros 0
Soluciones de enteros 0
Número de inversiones 3
Epsilon 1E-8
Infinito 1.797693E308