Está en la página 1de 4

Estadstica y programacin lineal Una de las principales bazas del lenguaje de programacin R es el formalismo que posee para tratar

grandes volmenes de datos, como si de un nico objeto se tratara. Es este artculo, vamos a explorar como se puede utilizar dic a caractersticas para generar modelar problemas de programacin lineal. Optimizando en base a muestras En un problema real, nuestro trabajo no comienza con una definicin del problema en forma de ecuaciones, sino con un conjunto de datos de relevamientos que a! que procesar en forma estadstica. Resolvamos por ejemplo, un problema de mezcla apelando a la funcin "lp#. $upongamos que tenemos todos nuestros relevamientos en un arc ivo en formato delimitado por comas denominado "problema%ezcla%uestras.csv#&' (on read.csv() lo leo ! lo guardo en un data frame'
misMuestras <- read.csv("problemaMezcla-Muestras.csv")

(on View() ! str() puedo analizarlo'


str(misMuestras)
'data.frame': $ prop omp! : $ prop omp( : $ prop omp : $ prop omp+ : $ prop,esiduo!: $ prop,esiduo(: $ prop,esiduo : $ prop,esiduo+: $ prop,esiduo-: $ prop.roducto: 106 obs. of 10 variables: "um 0.#11$ 0.1%%% 0.$6&& 0.06#% 0.%0' ... "um 0.06)6 0.$&1& 0.$)*1 0.$)01 0.$1&) ... "um 0.$)11 0.$&*# 0.$0&# 0.$%6 0.0'0% ... "um 0.#*$ 0.$&6 0.$66 0.%% 0.$&$ ... "um 0.1) 0.1*% 0.1) 0.$0$ 0.1% ... "um 0.16$1 0.1#$1 0.1#&' 0.0&06 0.1'** ... "um 0.1%& 0.1#* 0.1&' 0.1)) 0.$1# ... "um 0.1*# 0.$#* 0.$) 0.$)# 0.$#$ ... "um 0.0'&* 0.0*6 0.0&&' 0.06)' 0.0)'% ... "um 0.$6& 0.$%% 0.1&$ 0.$%% 0.1)& ...

/ie0(misMuestras)

(ada muestra indica la proporcin usada de cada componente, ! las proporciones obtenidas de producto ! residuos. )os campos "prop(omp*#, "prop(omp+#, "prop(omp(# ! "prop(omp,# acen referencia a los componentes, con la proporcin indicada como un nmero comprendido entre - ! &, tal que la suma de todos los componentes sea &.
&

$e puede descargar de ttp'..///.modelizandosistemas.com.ar.p.optimizacion0con0r. tml, ! se debe grabar en el directorio de trabajo actual.

"propResiduo*#, "propResiduo*#, "propResiduo*#, "propResiduo*#, "propResiduo*# indican la proporcin de cada uno de los cinco tipos de residuos en la mezcla resultante, ! "prop1roducto# la del producto. 2antos las proporciones de los residuos como del producto est3n comprendidas entre - ! &, ! la suma de estas seis proporciones debe ser igual a &. 2omemos a ora el arc ivo "problema%ezcla0Restricciones.csv45 en el cual tengo tabuladas mis restricciones, las cuales acen referencia a la cantidad m3xima de residuos admisibles.
mis,estriccio"es <- read.csv("problemaMezcla-,estriccio"es.csv") str(mis,estriccio"es)
'data.frame': $ ca"tMa1,es!: $ ca"tMa1,es(: $ ca"tMa1,es : $ ca"tMa1,es+: $ ca"tMa1,es-: 1 obs. of 0.$) 0.# 0.# 0.1 0.1) ) variables:

"um "um "um "um "um

/ie0(mis,estriccio"es)

6(omo se convierte todo esto en un problema de programacin lineal7 . )o primero que se debe acer es estimar la relacin del mix de componentes con el producto ! cada residuo'
lm.prop,esiduo! <- lm (prop,esiduo! 2 0 3 prop omp! 3 prop omp( 3 prop omp prop omp+4 data 5 misMuestras) lm.prop,esiduo( <- lm (prop,esiduo( 2 0 3 prop omp! 3 prop omp( 3 prop omp prop omp+4 data 5 misMuestras) lm.prop,esiduo <- lm (prop,esiduo prop omp+4 data 5 misMuestras) 2 0 3 prop omp! 3 prop omp( 3 prop omp 3 3 3 3 3 3

lm.prop,esiduo+ <- lm (prop,esiduo+ 2 0 3 prop omp! 3 prop omp( 3 prop omp prop omp+4 data 5 misMuestras) lm.prop,esiduo- <- lm (prop,esiduo- 2 0 3 prop omp! 3 prop omp( 3 prop omp prop omp+4 data 5 misMuestras) lm.prop.roducto <- lm (prop.roducto 2 0 3 prop omp! 3 prop omp( 3 prop omp prop omp+4 data 5 misMuestras)

)a funcin "lm# calcula el modelo de regresin lineal de una variable dependiente respecto de una o mas variables independientes. (on los ceros al inicio de la lista de variables independientes nos aseguramos de no incluir el t8rmino independiente. $i quisi8ramos ver los ajustes que realiz "lm#'
summar6(lm.prop,esiduo!)
5

$e puede descargar de ttp'..///.modelizandosistemas.com.ar.p.optimizacion0con0r. tml, ! se debe grabar en el directorio de trabajo actual.

summar6(lm.prop,esiduo() summar6(lm.prop,esiduo ) summar6(lm.prop,esiduo+) summar6(lm.prop,esiduo-) summar6(lm.prop.roducto)

* ora usemos la funcin "lp# del paquete "lp$olve# para construir ! resolver el modelo de programacin lineal sub!acente. *rmemos nuestro vector de coeficientes de la funcin objetivo'
coef7u"cio"8b9etivo <- lm.prop.roducto$coefficie"ts:1:%; coef7u"cio"8b9etivo
prop omp! prop omp( 0.1%*006'% -0.0$*0$0'$ prop omp 0.$61'66#% prop omp+ 0.#'%'1)0#

)as restricciones son todas del tipo 9, as que armamos la matriz de coeficientes, el vector de sentidos ! el de t8rminos independientes'
au1<coeficie"tes <c(lm.prop,esiduo!$coefficie"ts:1:%;4lm.prop,esiduo($coefficie"ts:1:%; ) au1<coeficie"tes <c(au1<coeficie"tes4lm.prop,esiduo $coefficie"ts:1:%;4lm.prop,esiduo+$coefficie"ts :1:%; ) au1<coeficie"tes <- c(au1<coeficie"tes4lm.prop,esiduo-$coefficie"ts:1:%; ) restriccio"es <- matri1(au1<coeficie"tes4 )4%4 b6ro05=,>-) restriccio"es
:14; :$4; :#4; :%4; :)4; :41; 0.0601$1$$ 0.##&#011# 0.$*&'*%'6 0.116'%0*& 0.0)&6)%'6 :4$; 0.1%6*%#60 0.0$6)'1$* 0.$&1)$))) 0.)#1)&161 0.0%0)*&'0 :4#; 0.1)00'&61 0.1%&$&1%$ 0.0611%'** 0.$#0'&&1% 0.1%*)1)*$ :4%; 0.$**&#01) 0.0*%0))&& 0.0*#$##'* 0.0'0)*)*' 0.0&'#&'1*

se"tido <- rep(?<@4 times5))

termA"depb <- as."umeric(c(mis,estriccio"es:14;)) termA"depb


:1; 0.$) 0.#0 0.#0 0.10 0.1)

:jo, tengo una restriccin del tipo ;, para asegurarme que las proporciones de los componentes sumen &.'
restriccio"es <- rbi"d(restriccio"es4 c(1414141)) se"tido <- c(se"tido4 ?5@) termA"depb <- c(termA"depb4 1)

< a ora ejecuto "lp:


m6lp <- lp(?ma1@4 coef7u"cio"8b9etivo4 restriccio"es4 se"tido4 termA"depb1) m6lp