Estimados compañeros, estoy intentando correr un problema de programaciòn lineal en R. Este problema ha sido corrido en el programa xpress, a continuaciòn se muestra el còdigo de este programa. Se cuenta con tres tablas e, a y b. e: "Producto" "Oficina" "Segmento" "Canal" "efectividad." "1" "COMPRA DE CARTERA" "18" "ALTO VALOR" "18" 0,15 "2" "COMPRA DE CARTERA" "18" "ALTO VALOR" "COMER" 4,519 a: Producto Oficina Segmento cantidad "TDC" "67" "BAJO VALOR" 119 "TDC" "94" "BAJO VALOR" 119 b: "Canal" "capacidad" "1" "18" 119 "2" "19" 358 Y se desea maximizar la efectividad. Alguien me puede dar una pista para lograr mi cometido de poder hacer este ejercicio en R.? Gracias por cualquier ayuda #-----------------------------------------------còdigo de xspress------------ declarations P: set of string !Conjunto de Productos O: set of string !Conjunto de Oficinas S: set of string !Conjunto de Segmentos C: set of string !Conjunto de canales de gestión e: dynamic array(P,O,S,C) of real !Efectividad de gestión de un cliente de determinado grupo en un canal de gestión a: array(P,O,S) of integer !Número de clientes en cada grupo b: array(C) of integer !Capaciad de gestión (# de clientes) por canal x: dynamic array(P,O,S,C) of mpvar !Asignación de un grupo de clientes a un canal end-declarations initializations from input a e b end-initializations ! Creación de las variables de decisión forall(i in P, j in O, k in S, l in C| exists(e(i,j,k,l)))do create(x(i,j,k,l)) x(i,j,k,l) is_binary end-do !Cada grupo de clientes se asigna a un solo canal de gestión forall(i in P, j in O, k in S) sum(l in C| exists (x(i,j,k,l)))x(i,j,k,l)=1 !No se viola la capacidad de cada canal de gestión forall(l in C) sum(i in P, j in O, k in S| exists (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=b(l) !Límite inferior para el Call forall(l in C| l="CALL") sum(i in P, j in O, k in S| exists (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=10000 !Límite superior para el Call forall(l in C| l="CALL") sum(i in P, j in O, k in S| exists (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=30000 !Límite inferior para la Comer forall(l in C| l="COMER") sum(i in P, j in O, k in S| exists (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=15000 !Función objetivo efectividad:=sum(i in P, j in O, k in S, l in C| exists (x(i,j,k,l)))a(i,j,k)*e(i,j,k,l)*x(i,j,k,l) maximize(efectividad) writeln("Efectividad Total= ", getobjval) writeln("") writeln("Decisiones:") forall(i in P, j in O, k in S, l in C| getsol(x(i,j,k,l))<>0) writeln(i, " ", j, " ", k, " ", l) writeln("") writeln("Envios:") forall(l in C) writeln(sum(i in P, j in O, k in S| exists (x(i,j,k,l)))getsol(x(i,j,k,l))*a(i,j,k)," clientes enviados al canal ", l) end-model -- Luis Alberto López González Analista de Riesgo Financiero Estadístico Universidad Nacional de Colombia celular 3132781143 Skype luis.alberto.lopez12 [[alternative HTML version deleted]]
Buenas noches Luis Alberto, Dale una mirada a http://www.oga-lab.net/RGM2/func.php?rd_id=limSolve:linp Alli hay varios ejemplos con programacion lineal. Seguramente alguno de ellos es similar al que estas tratando de resolver ;-) Un saludo, Jorge Ivan Velez 2011/7/27 Luis Alberto Lopez Gonzalez <>> Estimados compañeros, estoy intentando correr un problema de programaciòn > lineal en R. Este problema ha sido corrido en el programa xpress, a > continuaciòn se muestra el còdigo de este programa. > > > Se cuenta con tres tablas e, a y b. > > e: > > "Producto" "Oficina" "Segmento" "Canal" "efectividad." > "1" "COMPRA DE CARTERA" "18" "ALTO VALOR" "18" 0,15 > "2" "COMPRA DE CARTERA" "18" "ALTO VALOR" "COMER" 4,519 > > a: > > Producto Oficina Segmento cantidad > "TDC" "67" "BAJO VALOR" 119 > "TDC" "94" "BAJO VALOR" 119 > > b: > > "Canal" "capacidad" > "1" "18" 119 > "2" "19" 358 > > Y se desea maximizar la efectividad. > > Alguien me puede dar una pista para lograr mi cometido de poder hacer este > ejercicio en R.? > > Gracias por cualquier ayuda > > > > #-----------------------------------------------còdigo de > xspress------------ > > declarations > > > > P: set of string !Conjunto de Productos > > O: set of string !Conjunto de Oficinas > > S: set of string !Conjunto de Segmentos > > C: set of string !Conjunto de canales de gestión > > > > e: dynamic array(P,O,S,C) of real !Efectividad de gestión de > un cliente de determinado grupo en un canal de gestión > > a: array(P,O,S) of integer !Número de clientes en cada grupo > > > b: array(C) of integer !Capaciad de gestión (# de clientes) > por canal > > > > x: dynamic array(P,O,S,C) of mpvar !Asignación de un grupo > de clientes a un canal > > > > end-declarations > > > > initializations from input > > a e b > > end-initializations > > > > ! Creación de las variables de decisión > > forall(i in P, j in O, k in S, l in C| exists(e(i,j,k,l)))do > > create(x(i,j,k,l)) > > x(i,j,k,l) is_binary > > end-do > > > > !Cada grupo de clientes se asigna a un solo canal de gestión > > forall(i in P, j in O, k in S) > > sum(l in C| exists (x(i,j,k,l)))x(i,j,k,l)=1 > > > > !No se viola la capacidad de cada canal de gestión > > forall(l in C) > > sum(i in P, j in O, k in S| exists > (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=b(l) > > > > !Límite inferior para el Call > > forall(l in C| l="CALL") > > sum(i in P, j in O, k in S| exists > (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=10000 > > > > !Límite superior para el Call > > forall(l in C| l="CALL") > > sum(i in P, j in O, k in S| exists > (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=30000 > > > > !Límite inferior para la Comer > > forall(l in C| l="COMER") > > sum(i in P, j in O, k in S| exists > (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=15000 > > > > !Función objetivo > > efectividad:=sum(i in P, j in O, k in S, l in C| exists > (x(i,j,k,l)))a(i,j,k)*e(i,j,k,l)*x(i,j,k,l) > > > > maximize(efectividad) > > > > writeln("Efectividad Total= ", getobjval) > > writeln("") > > writeln("Decisiones:") > > forall(i in P, j in O, k in S, l in C| getsol(x(i,j,k,l))<>0) > > writeln(i, " ", j, " ", k, " ", l) > > writeln("") > > writeln("Envios:") > > forall(l in C) > > writeln(sum(i in P, j in O, k in S| exists > (x(i,j,k,l)))getsol(x(i,j,k,l))*a(i,j,k)," clientes enviados al canal ", l) > > > > end-model > > > -- > Luis Alberto López González > Analista de Riesgo Financiero > Estadístico Universidad Nacional de Colombia > celular 3132781143 > Skype luis.alberto.lopez12 > > [[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 muy buenos días me encuentro muy agradecido con tu mensaje. El lío realmente era la elaboraciòn de todas las restricciones porque con la librería que me sugieres es muy fácil. Buen día, hermano. El 26 de julio de 2011 23:13, Jorge Ivan Velez <jorgeivanvelez@gmail.com>escribió:> Buenas noches Luis Alberto, > Dale una mirada a http://www.oga-lab.net/RGM2/func.php?rd_id=limSolve:linp Alli hay varios ejemplos con programacion lineal. Seguramente alguno de > ellos es similar al que estas tratando de resolver ;-) > Un saludo, > Jorge Ivan Velez > > > 2011/7/27 Luis Alberto Lopez Gonzalez <> > >> Estimados compañeros, estoy intentando correr un problema de programaciòn >> lineal en R. Este problema ha sido corrido en el programa xpress, a >> continuaciòn se muestra el còdigo de este programa. >> >> >> Se cuenta con tres tablas e, a y b. >> >> e: >> >> "Producto" "Oficina" "Segmento" "Canal" "efectividad." >> "1" "COMPRA DE CARTERA" "18" "ALTO VALOR" "18" 0,15 >> "2" "COMPRA DE CARTERA" "18" "ALTO VALOR" "COMER" 4,519 >> >> a: >> >> Producto Oficina Segmento cantidad >> "TDC" "67" "BAJO VALOR" 119 >> "TDC" "94" "BAJO VALOR" 119 >> >> b: >> >> "Canal" "capacidad" >> "1" "18" 119 >> "2" "19" 358 >> >> Y se desea maximizar la efectividad. >> >> Alguien me puede dar una pista para lograr mi cometido de poder hacer este >> ejercicio en R.? >> >> Gracias por cualquier ayuda >> >> >> >> #-----------------------------------------------còdigo de >> xspress------------ >> >> declarations >> >> >> >> P: set of string !Conjunto de Productos >> >> O: set of string !Conjunto de Oficinas >> >> S: set of string !Conjunto de Segmentos >> >> C: set of string !Conjunto de canales de gestión >> >> >> >> e: dynamic array(P,O,S,C) of real !Efectividad de gestión >> de >> un cliente de determinado grupo en un canal de gestión >> >> a: array(P,O,S) of integer !Número de clientes en cada >> grupo >> >> >> b: array(C) of integer !Capaciad de gestión (# de clientes) >> por canal >> >> >> >> x: dynamic array(P,O,S,C) of mpvar !Asignación de un grupo >> de clientes a un canal >> >> >> >> end-declarations >> >> >> >> initializations from input >> >> a e b >> >> end-initializations >> >> >> >> ! Creación de las variables de decisión >> >> forall(i in P, j in O, k in S, l in C| exists(e(i,j,k,l)))do >> >> create(x(i,j,k,l)) >> >> x(i,j,k,l) is_binary >> >> end-do >> >> >> >> !Cada grupo de clientes se asigna a un solo canal de gestión >> >> forall(i in P, j in O, k in S) >> >> sum(l in C| exists (x(i,j,k,l)))x(i,j,k,l)=1 >> >> >> >> !No se viola la capacidad de cada canal de gestión >> >> forall(l in C) >> >> sum(i in P, j in O, k in S| exists >> (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=b(l) >> >> >> >> !Límite inferior para el Call >> >> forall(l in C| l="CALL") >> >> sum(i in P, j in O, k in S| exists >> (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=10000 >> >> >> >> !Límite superior para el Call >> >> forall(l in C| l="CALL") >> >> sum(i in P, j in O, k in S| exists >> (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)<=30000 >> >> >> >> !Límite inferior para la Comer >> >> forall(l in C| l="COMER") >> >> sum(i in P, j in O, k in S| exists >> (x(i,j,k,l)))x(i,j,k,l)*a(i,j,k)>=15000 >> >> >> >> !Función objetivo >> >> efectividad:=sum(i in P, j in O, k in S, l in C| exists >> (x(i,j,k,l)))a(i,j,k)*e(i,j,k,l)*x(i,j,k,l) >> >> >> >> maximize(efectividad) >> >> >> >> writeln("Efectividad Total= ", getobjval) >> >> writeln("") >> >> writeln("Decisiones:") >> >> forall(i in P, j in O, k in S, l in C| getsol(x(i,j,k,l))<>0) >> >> writeln(i, " ", j, " ", k, " ", l) >> >> writeln("") >> >> writeln("Envios:") >> >> forall(l in C) >> >> writeln(sum(i in P, j in O, k in S| exists >> (x(i,j,k,l)))getsol(x(i,j,k,l))*a(i,j,k)," clientes enviados al canal ", >> l) >> >> >> >> end-model >> >> >> -- >> Luis Alberto López González >> Analista de Riesgo Financiero >> Estadístico Universidad Nacional de Colombia >> celular 3132781143 >> Skype luis.alberto.lopez12 >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >-- Luis Alberto López González Analista de Riesgo Financiero Estadístico Universidad Nacional de Colombia celular 3132781143 Skype luis.alberto.lopez12 [[alternative HTML version deleted]]