Hola a todos, Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra lo que quiero hacer. Desafortunadamente usando la funcion lp.transport en "lpSolve" puedo incorporar todas las restricciones, excepto las que llamo "restricciones adicionales". Alguna sugerencia sobre como estimar los valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? Muchisimas gracias, Jorge.- # 1. Matriz de costos definida por "costos" # 2. totales filas <- c(50, 30, 40) columnas <- c(30, 20, 30, 40) # funcion objetivo # x_{i,j}: corresponde al total de recursos que van del lugar i al j min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 con c_{i,j} la ij-esima entrada de la matriz costos definida previamente # recursos por filas x11 + x12 + x13 + x14 <= 50 x21 + x22 + x23 + x24 <= 30 x31 + x32 + x33 + x34 <= 40 # recursos por columna x11 + x21 + x31 <= 20 x21 + x22 + x32 <= 10 x13 + x23 + x33 <= 30 x14 + x24 + x34 <= 30 # las variables deben ser mayores o iguales a cero x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 # restricciones adicionales # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) # y k es conocido w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k [[alternative HTML version deleted]]
Estimado Jorge Velez Creo que hay algunos ejemplos, el creo es la palabra apropiada porque no estoy seguro si responde su pregunta, en BLUP o Animal Model, donde hay información de parientes de acuerdo a la descendencia, estos le colocan un "peso", es decir, si algo vale 10, al analizar la información esta es 10 para el animal, pero de estos 0,5 pasan al hijo. Cuándo usted escribe x_{i,j} entiendo que se da esto (bueno, en palabras técnicas estoy cometiendo errores), también hay pesos económicos a la información cuándo se construye el índice genético. Yo tengo material en R sobre eso, con su explicación de matrices, álgebra, etc., pero impreso es casi un bibliorato, podría buscar y enviarle en privado un "megacorreo", pero por el otro lado posiblemente para ahorrar tiempo, hay en R algunos trabajos ya realizados, estos resumirían mucho el tiempo de lectura. El paquete MCMCglmm tiene una documentación buena, posiblemente si lee esta en una forma muy rápida (tutorial, ...) seguramente entenderá cuál fue mi idea o interpretación a su correo y si algo de eso le sirve. Javier Marcuzzi El 13 de noviembre de 2012 22:09, Jorge I Velez <jorgeivanvelez@gmail.com>escribió:> Hola a todos, > > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra lo > que quiero hacer. Desafortunadamente usando la funcion lp.transport en > "lpSolve" puedo incorporar todas las restricciones, excepto las que llamo > "restricciones adicionales". Alguna sugerencia sobre como estimar los > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? > > Muchisimas gracias, > Jorge.- > > > # 1. Matriz de costos definida por "costos" > > # 2. totales > filas <- c(50, 30, 40) > columnas <- c(30, 20, 30, 40) > > # funcion objetivo > # x_{i,j}: corresponde al total de recursos que van del lugar i al j > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 > con c_{i,j} la ij-esima entrada de la matriz costos definida > previamente > > # recursos por filas > x11 + x12 + x13 + x14 <= 50 > x21 + x22 + x23 + x24 <= 30 > x31 + x32 + x33 + x34 <= 40 > > # recursos por columna > x11 + x21 + x31 <= 20 > x21 + x22 + x32 <= 10 > x13 + x23 + x33 <= 30 > x14 + x24 + x34 <= 30 > > # las variables deben ser mayores o iguales a cero > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 > > # restricciones adicionales > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) > # y k es conocido > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Jorge, deberías utilizar más bien la función lp(), que creo abarca tu modelo de programación lineal. Si C es la matriz de coeficientes de tus primeras restricciones y W la matriz de coeficientes de tus restricciones adicionales, entonces la matriz de coeficientes de la función lp denotada const.mat debería simplemente ser igual a const.mat=rbind(C,W) Un saludo. Olivier> Hola a todos, > > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra lo > que quiero hacer. Desafortunadamente usando la funcion lp.transport en > "lpSolve" puedo incorporar todas las restricciones, excepto las que llamo > "restricciones adicionales". Alguna sugerencia sobre como estimar los > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? > > Muchisimas gracias, > Jorge.- > > > # 1. Matriz de costos definida por "costos" > > # 2. totales > filas <- c(50, 30, 40) > columnas <- c(30, 20, 30, 40) > > # funcion objetivo > # x_{i,j}: corresponde al total de recursos que van del lugar i al j > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 > con c_{i,j} la ij-esima entrada de la matriz costos definida > previamente > > # recursos por filas > x11 + x12 + x13 + x14 <= 50 > x21 + x22 + x23 + x24 <= 30 > x31 + x32 + x33 + x34 <= 40 > > # recursos por columna > x11 + x21 + x31 <= 20 > x21 + x22 + x32 <= 10 > x13 + x23 + x33 <= 30 > x14 + x24 + x34 <= 30 > > # las variables deben ser mayores o iguales a cero > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 > > # restricciones adicionales > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) > # y k es conocido > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- ____________________________________ Olivier G. Nuñez Email: onunez en unex.es http://kolmogorov.unex.es/~onunez Tel : +34 663 03 69 09 Departamento de Matemáticas Universidad de Extremadura
Hola Jorge, Tenía apuntada esta referencia ya de hace un tiempo, pero creo que te puede ayudar: http://fishyoperations.com/r/linear-programming-in-r-an-lpsolveapi-example/?utm_source=rss&utm_medium=rss&utm_campaign=linear-programming-in-r-an-lpsolveapi-example Saludos, Carlos Ortega www.qualityexcellence.es El 14 de noviembre de 2012 02:09, Jorge I Velez <jorgeivanvelez@gmail.com>escribió:> Hola a todos, > > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra lo > que quiero hacer. Desafortunadamente usando la funcion lp.transport en > "lpSolve" puedo incorporar todas las restricciones, excepto las que llamo > "restricciones adicionales". Alguna sugerencia sobre como estimar los > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? > > Muchisimas gracias, > Jorge.- > > > # 1. Matriz de costos definida por "costos" > > # 2. totales > filas <- c(50, 30, 40) > columnas <- c(30, 20, 30, 40) > > # funcion objetivo > # x_{i,j}: corresponde al total de recursos que van del lugar i al j > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 > con c_{i,j} la ij-esima entrada de la matriz costos definida > previamente > > # recursos por filas > x11 + x12 + x13 + x14 <= 50 > x21 + x22 + x23 + x24 <= 30 > x31 + x32 + x33 + x34 <= 40 > > # recursos por columna > x11 + x21 + x31 <= 20 > x21 + x22 + x32 <= 10 > x13 + x23 + x33 <= 30 > x14 + x24 + x34 <= 30 > > # las variables deben ser mayores o iguales a cero > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 > > # restricciones adicionales > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) > # y k es conocido > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola Jorge, como bien dice Olivier, lp.transport resuelve solo un caso particular de programación lineal, al igual que lp.assign, la función general para ese tipo de problemas es lp(), tienes que especificar el vector de los coeficientes de coste de la función objetivo objective.in<-c(), el vector de disponibilidad de recursos const.rhs<-c(), la matriz de los coeficientes de las restricciones const.mat<-matrix() y el vector de direcciones de las restricciones const.dir<-c() Por cierto en tu problema has puesto todas las restricciones del tipo menor o igual para un problema de minimización y eso te da solución 0 si los coeficientes son positivos, con lp() puedes poner cualquier signo en las desigualdades. Un saludo El 14 de noviembre de 2012 09:57, "Olivier Nuñez" <onunez@unex.es> escribió:> Jorge, > > deberías utilizar más bien la función lp(), > que creo abarca tu modelo de programación lineal. > Si C es la matriz de coeficientes de tus primeras restricciones y W la > matriz de > coeficientes de tus restricciones adicionales, entonces la matriz de > coeficientes de > la función lp denotada const.mat debería simplemente ser igual a > > const.mat=rbind(C,W) > > Un saludo. Olivier > > > Hola a todos, > > > > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra lo > > que quiero hacer. Desafortunadamente usando la funcion lp.transport en > > "lpSolve" puedo incorporar todas las restricciones, excepto las que llamo > > "restricciones adicionales". Alguna sugerencia sobre como estimar los > > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? > > > > Muchisimas gracias, > > Jorge.- > > > > > > # 1. Matriz de costos definida por "costos" > > > > # 2. totales > > filas <- c(50, 30, 40) > > columnas <- c(30, 20, 30, 40) > > > > # funcion objetivo > > # x_{i,j}: corresponde al total de recursos que van del lugar i al j > > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 > > con c_{i,j} la ij-esima entrada de la matriz costos definida > > previamente > > > > # recursos por filas > > x11 + x12 + x13 + x14 <= 50 > > x21 + x22 + x23 + x24 <= 30 > > x31 + x32 + x33 + x34 <= 40 > > > > # recursos por columna > > x11 + x21 + x31 <= 20 > > x21 + x22 + x32 <= 10 > > x13 + x23 + x33 <= 30 > > x14 + x24 + x34 <= 30 > > > > # las variables deben ser mayores o iguales a cero > > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 > > > > # restricciones adicionales > > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 > > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) > > # y k es conocido > > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k > > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k > > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k > > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > ____________________________________ > > > Olivier G. Nuñez > Email: onunez@unex.es > http://kolmogorov.unex.es/~onunez > Tel : +34 663 03 69 09 > Departamento de Matemáticas > Universidad de Extremadura > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Luis Mariano Esteban Escaño Escuela Universitaria Politécnica de La Almunia Tlfno. 976600883 Ext.121 C/ Mayor s/n 50100 La Almunia de Doña Godina Universidad de Zaragoza [[alternative HTML version deleted]]
Luis, Olivier y Carlos, Muchas gracias por sus respuestas. He intentado, sin exito, trabajar con lp() en "lpSolve". Este es un ejemplo: require(lpSolve) set.seed(123) (C <- matrix(trunc(runif(12, 2, 20)), ncol = 3, byrow = TRUE)) (W <- matrix(runif(12), ncol = 3, byrow = TRUE)) (k <- 7.1*pi) (filas <- c(30, 20, 30, 40)) (columnas <- c(50, 30, 40)) # restricciones (f.obj <- c(C)) f.dir <- rep("==", NROW(C) + NROW(W)) f.rhs <- c(filas, rep(k, NROW(W))) res <- lp("min", f.obj, f.con, f.dir, f.rhs) matrix(res$solution, ncol = ncol(C), byrow = TRUE) Las preguntas que tengo son: 1. por que obtengo un warning() y 2. como incluir la restriccion de las columnas. De antemano agradezco nuevamente su ayuda. Saludos, Jorge.- 2012/11/14 Luis Mariano Esteban <>> Hola Jorge, > como bien dice Olivier, lp.transport resuelve solo un caso particular de > programación lineal, al igual que lp.assign, la función general para ese > tipo de problemas es lp(), tienes que especificar el vector de los > coeficientes de coste de la función objetivo objective.in<-c(), el vector > de disponibilidad de recursos const.rhs<-c(), la matriz de los coeficientes > de las restricciones const.mat<-matrix() y el vector de direcciones de las > restricciones const.dir<-c() > > Por cierto en tu problema has puesto todas las restricciones del tipo > menor o igual para un problema de minimización y eso te da solución 0 si > los coeficientes son positivos, con lp() puedes poner cualquier signo en > las desigualdades. > > Un saludo > > > El 14 de noviembre de 2012 09:57, "Olivier Nuñez" <> escribió: > > Jorge, >> >> deberías utilizar más bien la función lp(), >> que creo abarca tu modelo de programación lineal. >> Si C es la matriz de coeficientes de tus primeras restricciones y W la >> matriz de >> coeficientes de tus restricciones adicionales, entonces la matriz de >> coeficientes de >> la función lp denotada const.mat debería simplemente ser igual a >> >> const.mat=rbind(C,W) >> >> Un saludo. Olivier >> >> > Hola a todos, >> > >> > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra >> lo >> > que quiero hacer. Desafortunadamente usando la funcion lp.transport en >> > "lpSolve" puedo incorporar todas las restricciones, excepto las que >> llamo >> > "restricciones adicionales". Alguna sugerencia sobre como estimar los >> > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? >> > >> > Muchisimas gracias, >> > Jorge.- >> > >> > >> > # 1. Matriz de costos definida por "costos" >> > >> > # 2. totales >> > filas <- c(50, 30, 40) >> > columnas <- c(30, 20, 30, 40) >> > >> > # funcion objetivo >> > # x_{i,j}: corresponde al total de recursos que van del lugar i al j >> > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 >> > con c_{i,j} la ij-esima entrada de la matriz costos definida >> > previamente >> > >> > # recursos por filas >> > x11 + x12 + x13 + x14 <= 50 >> > x21 + x22 + x23 + x24 <= 30 >> > x31 + x32 + x33 + x34 <= 40 >> > >> > # recursos por columna >> > x11 + x21 + x31 <= 20 >> > x21 + x22 + x32 <= 10 >> > x13 + x23 + x33 <= 30 >> > x14 + x24 + x34 <= 30 >> > >> > # las variables deben ser mayores o iguales a cero >> > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 >> > >> > # restricciones adicionales >> > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 >> > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) >> > # y k es conocido >> > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k >> > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k >> > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k >> > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k >> > >> > [[alternative HTML version deleted]] >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es@r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> >> >> -- >> ____________________________________ >> >> >> Olivier G. Nuñez >> Email: onunez@unex.es >> http://kolmogorov.unex.es/~onunez >> Tel : +34 663 03 69 09 >> Departamento de Matemáticas >> Universidad de Extremadura >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Luis Mariano Esteban Escaño > Escuela Universitaria Politécnica de La Almunia > Tlfno. 976600883 Ext.121 > C/ Mayor s/n 50100 La Almunia de Doña Godina > Universidad de Zaragoza > >[[alternative HTML version deleted]]
Hola Jorge, en el ejemplo estas planteando un problema donde la función objetivo tiene 12 coeficientes de costo, cuando definas las restricciones del problema, la matriz tiene que tener 12 columnas que corresponden a cada una de las variables del problema. Para las restricciones sobre las filas, por ejemplo, en la primera fila (7,16,9,0,0,0,0,0,0,0,0,0) y asi sucesivamente cada una de las restricciones sobre las filas, en las restricciones sobre las columnas también hay que escribirlas respetando el orden de las variables, para la primera columna será (7,0,0,17,0,0,11,0,0,10,0,0). No se cuál es el warning que te aparece, pero no has definido la matriz de costes f.con en el ejemplo que nos has pasado. Un saludo Luis El 14 de noviembre de 2012 12:52, Jorge I Velez <jorgeivanvelez@gmail.com>escribió:> Luis, Olivier y Carlos, > > Muchas gracias por sus respuestas. > > He intentado, sin exito, trabajar con lp() en "lpSolve". Este es un > ejemplo: > > require(lpSolve) > set.seed(123) > (C <- matrix(trunc(runif(12, 2, 20)), ncol = 3, byrow = TRUE)) > (W <- matrix(runif(12), ncol = 3, byrow = TRUE)) > (k <- 7.1*pi) > (filas <- c(30, 20, 30, 40)) > (columnas <- c(50, 30, 40)) > > # restricciones > (f.obj <- c(C)) > f.dir <- rep("==", NROW(C) + NROW(W)) > f.rhs <- c(filas, rep(k, NROW(W))) > res <- lp("min", f.obj, f.con, f.dir, f.rhs) > matrix(res$solution, ncol = ncol(C), byrow = TRUE) > > > Las preguntas que tengo son: 1. por que obtengo un warning() y 2. como > incluir la restriccion de las columnas. De antemano agradezco nuevamente > su ayuda. > > Saludos, > Jorge.- > > > 2012/11/14 Luis Mariano Esteban <> > >> Hola Jorge, >> como bien dice Olivier, lp.transport resuelve solo un caso particular de >> programación lineal, al igual que lp.assign, la función general para ese >> tipo de problemas es lp(), tienes que especificar el vector de los >> coeficientes de coste de la función objetivo objective.in<-c(), el >> vector de disponibilidad de recursos const.rhs<-c(), la matriz de los >> coeficientes de las restricciones const.mat<-matrix() y el vector de >> direcciones de las restricciones const.dir<-c() >> >> Por cierto en tu problema has puesto todas las restricciones del tipo >> menor o igual para un problema de minimización y eso te da solución 0 si >> los coeficientes son positivos, con lp() puedes poner cualquier signo en >> las desigualdades. >> >> Un saludo >> >> >> El 14 de noviembre de 2012 09:57, "Olivier Nuñez" <> escribió: >> >> Jorge, >>> >>> deberías utilizar más bien la función lp(), >>> que creo abarca tu modelo de programación lineal. >>> Si C es la matriz de coeficientes de tus primeras restricciones y W la >>> matriz de >>> coeficientes de tus restricciones adicionales, entonces la matriz de >>> coeficientes de >>> la función lp denotada const.mat debería simplemente ser igual a >>> >>> const.mat=rbind(C,W) >>> >>> Un saludo. Olivier >>> >>> > Hola a todos, >>> > >>> > Estoy trabajando con programacion lineal; el siguiente ejemplo ilustra >>> lo >>> > que quiero hacer. Desafortunadamente usando la funcion lp.transport en >>> > "lpSolve" puedo incorporar todas las restricciones, excepto las que >>> llamo >>> > "restricciones adicionales". Alguna sugerencia sobre como estimar los >>> > valores de x11, x12, ... x44 en R incluyendo *todas* las restricciones? >>> > >>> > Muchisimas gracias, >>> > Jorge.- >>> > >>> > >>> > # 1. Matriz de costos definida por "costos" >>> > >>> > # 2. totales >>> > filas <- c(50, 30, 40) >>> > columnas <- c(30, 20, 30, 40) >>> > >>> > # funcion objetivo >>> > # x_{i,j}: corresponde al total de recursos que van del lugar i al j >>> > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 >>> > con c_{i,j} la ij-esima entrada de la matriz costos definida >>> > previamente >>> > >>> > # recursos por filas >>> > x11 + x12 + x13 + x14 <= 50 >>> > x21 + x22 + x23 + x24 <= 30 >>> > x31 + x32 + x33 + x34 <= 40 >>> > >>> > # recursos por columna >>> > x11 + x21 + x31 <= 20 >>> > x21 + x22 + x32 <= 10 >>> > x13 + x23 + x33 <= 30 >>> > x14 + x24 + x34 <= 30 >>> > >>> > # las variables deben ser mayores o iguales a cero >>> > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 >>> > >>> > # restricciones adicionales >>> > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 >>> > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) >>> > # y k es conocido >>> > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k >>> > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k >>> > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k >>> > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > _______________________________________________ >>> > R-help-es mailing list >>> > R-help-es@r-project.org >>> > https://stat.ethz.ch/mailman/listinfo/r-help-es >>> > >>> >>> >>> -- >>> ____________________________________ >>> >>> >>> Olivier G. Nuñez >>> Email: onunez@unex.es >>> http://kolmogorov.unex.es/~onunez >>> Tel : +34 663 03 69 09 >>> Departamento de Matemáticas >>> Universidad de Extremadura >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> >> >> -- >> Luis Mariano Esteban Escaño >> Escuela Universitaria Politécnica de La Almunia >> Tlfno. 976600883 Ext.121 >> C/ Mayor s/n 50100 La Almunia de Doña Godina >> Universidad de Zaragoza >> >> >-- Luis Mariano Esteban Escaño Escuela Universitaria Politécnica de La Almunia Tlfno. 976600883 Ext.121 C/ Mayor s/n 50100 La Almunia de Doña Godina Universidad de Zaragoza [[alternative HTML version deleted]]
Jorge, a la hora de modelizar tu problema, es posible que te resultó más natural escribir tus variables con el formato de una matriz (x_ij ). Sin embargo, la formalización estándar para implementar el modelo de programación lineal es considerar el conjunto de variables como un vector. De ahí, el origen de tu problema y las pautas que vienen en el mensaje de Luis, solucionan tu problema de traducción de un formato al otro. Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez@unex.es http://kolmogorov.unex.es/~onunez Tel : +34 663 03 69 09 Departamento de Matemáticas Universidad de Extremadura ____________________________________ El 14/11/2012, a las 12:52, Jorge I Velez escribió:> Luis, Olivier y Carlos, > > Muchas gracias por sus respuestas. > > He intentado, sin exito, trabajar con lp() en "lpSolve". Este es > un ejemplo: > > require(lpSolve) > set.seed(123) > (C <- matrix(trunc(runif(12, 2, 20)), ncol = 3, byrow = TRUE)) > (W <- matrix(runif(12), ncol = 3, byrow = TRUE)) > (k <- 7.1*pi) > (filas <- c(30, 20, 30, 40)) > (columnas <- c(50, 30, 40)) > > # restricciones > (f.obj <- c(C)) > f.dir <- rep("==", NROW(C) + NROW(W)) > f.rhs <- c(filas, rep(k, NROW(W))) > res <- lp("min", f.obj, f.con, f.dir, f.rhs) > matrix(res$solution, ncol = ncol(C), byrow = TRUE) > > > Las preguntas que tengo son: 1. por que obtengo un warning() y 2. > como incluir la restriccion de las columnas. De antemano agradezco > nuevamente su ayuda. > > Saludos, > Jorge.- > > > 2012/11/14 Luis Mariano Esteban <> > Hola Jorge, > como bien dice Olivier, lp.transport resuelve solo un caso > particular de programación lineal, al igual que lp.assign, la > función general para ese tipo de problemas es lp(), tienes que > especificar el vector de los coeficientes de coste de la función > objetivo objective.in<-c(), el vector de disponibilidad de recursos > const.rhs<-c(), la matriz de los coeficientes de las restricciones > const.mat<-matrix() y el vector de direcciones de las restricciones > const.dir<-c() > > Por cierto en tu problema has puesto todas las restricciones del > tipo menor o igual para un problema de minimización y eso te da > solución 0 si los coeficientes son positivos, con lp() puedes poner > cualquier signo en las desigualdades. > > Un saludo > > > El 14 de noviembre de 2012 09:57, "Olivier Nuñez" <> escribió: > > Jorge, > > deberías utilizar más bien la función lp(), > que creo abarca tu modelo de programación lineal. > Si C es la matriz de coeficientes de tus primeras restricciones y W > la matriz de > coeficientes de tus restricciones adicionales, entonces la matriz > de coeficientes de > la función lp denotada const.mat debería simplemente ser igual a > > const.mat=rbind(C,W) > > Un saludo. Olivier > > > Hola a todos, > > > > Estoy trabajando con programacion lineal; el siguiente ejemplo > ilustra lo > > que quiero hacer. Desafortunadamente usando la funcion > lp.transport en > > "lpSolve" puedo incorporar todas las restricciones, excepto las > que llamo > > "restricciones adicionales". Alguna sugerencia sobre como estimar > los > > valores de x11, x12, ... x44 en R incluyendo *todas* las > restricciones? > > > > Muchisimas gracias, > > Jorge.- > > > > > > # 1. Matriz de costos definida por "costos" > > > > # 2. totales > > filas <- c(50, 30, 40) > > columnas <- c(30, 20, 30, 40) > > > > # funcion objetivo > > # x_{i,j}: corresponde al total de recursos que van del lugar i > al j > > min c11*x11 + c12*x12 + c13*x13 + ... + c44*x44 > > con c_{i,j} la ij-esima entrada de la matriz costos definida > > previamente > > > > # recursos por filas > > x11 + x12 + x13 + x14 <= 50 > > x21 + x22 + x23 + x24 <= 30 > > x31 + x32 + x33 + x34 <= 40 > > > > # recursos por columna > > x11 + x21 + x31 <= 20 > > x21 + x22 + x32 <= 10 > > x13 + x23 + x33 <= 30 > > x14 + x24 + x34 <= 30 > > > > # las variables deben ser mayores o iguales a cero > > x_{i,j} >= 0, i = 1, 2, 3, 4 and j = 1, 2, 3 > > > > # restricciones adicionales > > # 1. El numero de x_{i,j} por columna con valores debe ser mayor a 1 > > # 2. si w_{i,j} es una constante, i.e., W <- matrix(runif(12), 4, 3) > > # y k es conocido > > w11*x11 + w12*x12 + w13*x13 + w14*x14 <= k > > w21*x21 + w22*x22 + w23*x23 + w24*x24 <= k > > w31*x31 + w32*x32 + w33*x33 + w34*x34 <= k > > w41*x41 + w42*x42 + w43*x43 + w44*x44 <= k > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > ____________________________________ > > > Olivier G. Nuñez > Email: onunez@unex.es > http://kolmogorov.unex.es/~onunez > Tel : +34 663 03 69 09 > Departamento de Matemáticas > Universidad de Extremadura > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Luis Mariano Esteban Escaño > Escuela Universitaria Politécnica de La Almunia > Tlfno. 976600883 Ext.121 > C/ Mayor s/n 50100 La Almunia de Doña Godina > Universidad de Zaragoza > >[[alternative HTML version deleted]]