jueves, 14 de febrero de 2013

 Reporte de Investigación
 2007-09
 

 
Optimización de Funciones Lineales con

 
Restricciones en MATLABTM:

 
 Teoría y Ejemplos
 
 
 
 
 Responsables: William Marchena

 
                  Carlos Ornelas
 
 Supervisor: Francisco M. González-Longatt









 

 Línea de Investigación:

 
Fuentes Alternas de Energía 
 

Descripción: Test.jpg                                  Generación Distribuida

 

 
 
 
 
 
 
 
 

                                          27-Feb-2007
 
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 2



  Optimización en  MATLABTM

  La caja de herramientas de optimización o denominado Toolbox extiende la capacidad de MATLAB®,
  acercándolo a un ambiente numérico computacional.
Toolbox incluye rutinas de muchos tipos, incluyendo
  la optimización [1]:

    − Minimización no lineal sin restricciones.
    − Minimización no lineal con restricciones, problemas de minimizar y maximizar, y problemas de
          minimización semi-infinitos.
    − Programación cuadrática y lineal.
    − No lineal, mínimos cuadrados y curvas adecuadas.
    − Solución de ecuaciones de sistemas no lineales.
    − Restricciones lineales de mínimos cuadrados.
    − Problemas de larga escala. 


  Funciones de Optimización

  Todas las funciones de la caja de herramientas son (m-files) de MATLAB, haciendo de MATLAB un
  instrumento especializado en algoritmos de optimización. Se puede ver de MATLAB los códigos de las
  funciones usando la presentación [1]:

  type function_name

  Se puede extender la capacidad de optimización de la caja de herramientas escribiendo sus propios
m-files,
  o usando la caja de herramienta con otras cajas de herramientas, o con MATLAB o Simulink®.


  Caja de Herramienta de Optimización GUI

  La herramienta de optimización (optimtool), es un GUI (Grafics Unit Interface), para seleccionar la
  solución, especificando las opciones de optimización y los problemas corrientes. Se puede definir y
  modificar los problemas rápidamente con GUI [1]. 


  Usando Funciones de Optimización

  Aquí se describirá como se deberá realizar la utilización de cada una de estas funciones de optimización:


  Definición de la Función Objetivo

  Muchas de las funciones de optimización requieren que se cree una función de MATLAB que calcule la
  función objetivo. La función, en la entrada debe aceptar vectores, y retornar a la salida un escalar de tipo
  doble.

  Existen dos maneras de crear la función objetivo:

    1)
Se crea una función anónima en la línea de comando. Por ejemplo, si se crea una función anónima
        para
x2, se coloca:

  square = @ [(x)]* x.^2;

  Y se llama a la función de optimización con el cuadrado del primer argumento de la entrada. Se puede usar
  este método si la función objetivo es relativamente sencilla, y no requiera ser utilizada en una sesión futura
  de MATLAB.

    2)
Si se escribe un M-file para la función, por ejemplo, para escribir la función x2como un m-file, se

        debe abrir un nuevo archivo en el editor MATLAB y se deberá colocar el siguiente código:

                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 3


  function y = square(x)
  y = x.^2;

  Se puede llamar la función de optimización con @ al cuadrado como el primer argumento de entrada. El
  signo @ crea una función manejable al cuadrado. Este método se emplea si la función objetiva es
  complicada o si se sospecha que tal función será utilizada en una próxima sesión de MATLAB.


  Maximización

  Las funciones de optimización fminbnd, fminsearch, fminunc, fmincon, fgoalattain, fminimax, lsqcurvefit, y
  lsqnonlin todas realizan la minimización de la función objetivo f(x). La maximización es alcanzada
  sustituyendo en las rutinas con –
f(x). Asimismo para alcanzar la maximización para quadprog se sustituye
  -
H  y -f, y para linprog -f [2].


    Restricciones Mayores que Cero

  La Caja de herramientas de Optimización (Toolbox) asume que las restricciones de desigualdad no lineales
  son de la forma C
i(x)≤
                    0. Las restricciones mayores que cero son expresadas como menores que  cero
    multiplicándolas por -1. Por ejemplo, una restricción de la forma C
i(x)≥
                                                              0 es equivalente a la restricción     
  (-C
i(x))≤
        0); una restricción de la forma C
i(x)≥b es equivalente a la restricción (-Ci(x) + b)≤0 [2].


  Maximización vs  Minimización

  La optimización funciona en la caja de herramienta minimizando la función objetivo. Para maximizar la
  función
f se aplica una optimización para minimizar la función -f. El punto resultante donde el máximo f
  ocurre también es el punto donde el mínimo de -
f ocurre.


  Problemas Cubiertos por la Caja de Herramientas

  Las siguientes tablas muestran las funciones disponibles para la minimización y maximización de las
  funciones a utilizar en este trabajo especial de grado, donde la función objetivo es una ecuación lineal con
  restricciones lineales o no lineales de desigualdad.

  Tabla 1.  Tabla representativa de las funciones disponibles para la minimización y maximización de
                    las funciones a utilizar en este trabajo especial de grado
            Tipo Notación Función

                                            xfTmin  tal que
        Programación lineal xLinprog
                                                          uxlbxAbAx≤≤=≤,,
                                                eqeq
                                              )(minxf tal que
                                        x
    Minimización de restricciones 0)(,0)(=
                                          ≤
xxceqc Fmincon


                                                            uxlbeqAeq.xb,Ax≤≤=≤















                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 4


  Linprog [1]


  Propósito

  Resolver problemas de programación lineal.


  Ecuación

  Encuentra el mínimo de un problema especificado por:


  min         tal que           
                            bAxxfT

                              bxA=
                                           eqeq (1)

                                     
     ≤≤ubxlb

  Donde:
f, x, b, beq, lb, y ub son vectores y A y Aeq son matrices


  Sintaxis


  x = linprog(f,A,b)
  x = linprog(f,A,b,Aeq,beq)
  x = linprog(f,A,b,Aeq,beq,lb,ub)
  x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
  x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
  [x,fval] = linprog(...)
    [x,lambda,exitflag] = linprog(...)
    [x,lambda,exitflag,output] = linprog(...)
      [x,fval,exitflag,output,lambda] = linprog(...)


  Descripción

  Linprog soluciona problemas de programación lineal

  x = linprog(f,A,b): soluciona min f'*x tales que A*x≤b

  x = linprog(f,A,b,Aeq,beq): soluciona el problema descrito inicialmente (1), mientras que
  además satisface la igualdad de las restricciones
Aeq*x = beq. Se coloca A=[ ] y b=[ ] si no existen
    desigualdades


  x = linprog(f,A,b,Aeq,beq,lb,ub): Se definen los limites inferior y superior sobre la variable
  de diseño en
x, de modo que la solución este siempre entre el rango lb ≤ x ≤ ub. Se coloara Aeq = [ ] y beq
  = [ ]
si no existen igualdad.

  x = linprog(f,A,b,Aeq,beq,lb,ub,x0): fija el punto de partida x0. Esta opción esta solamente
  disponible con el algoritmo a media escala (la opción de Larga Escala, se fija a
“off” usando optimización).
  El defecto del algoritmo a larga escala y del algoritmo simplex es que ignoran los puntos de partida.


  x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options): Reduce al mínimo con las opciones de
  optimización especificadas en la estructura
options. Se utiliza optimset para fijar estas opciones.

  [x,fval] = linprog(...): Retorna el valor de la función objetivo fun en la solución x: fval = f'*x.

    [x,lambda,exitflag] = linprog(...): devuelve un valor exitflag que describe la condición de
  salida.



                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 5


    [x,lambda,exitflag,output] = linprog(...): Devuelve una estructura output que contiene
  información acerca de la optimización.

      [x,fval,exitflag,output,lambda] = linprog(...): Devuelve una estructura lambda
  donde contiene los campos de los multiplicadores de Lagrange en la solución
x. [1] 


  Entrada de Argumentos

  A continuación se muestra una descripción general de los argumentos pasados en linprog [1]: 

      Tabla 2. Representativa de los argumentos de entrada para las funciones linprog y fmincon.
  Nombre de
  la entrada Descripción  Usada por las funciones:
              La matriz Aeq y el vector beq son,
                                                            fgoalattain, fmincon, fminimax,
  Aeq, beq respectivamente, los coeficiente de las restricciones fseminf, linprog, lsqlin,
              de la inecuaciones lineales y al  correspondiente al
              lado derecho del vector:
Aeq*x = beq quadprog
              El vector de los coeficientes para el termino lineal
      f en la ecuación lineal f’*x o la ecuación cuadrática linprog, quadprog
              x*H*x + f’*x.
              La función para optimizar.
fun es una función fgoalattain, fmincon, fminimax,

      fun
manipulada por una función m-file o por una fseminf, fminbnd, fminsearch,
              función anónima. fminunc, fsolve, fzero,
 lsqcurvefit, lsqnonlin
 

      Tabla 3. Representativa de los argumentos de entrada para las funciones linprog y fmincon
                                        (continuación)
  Nombre de
  la entrada Descripción  Usada por las funciones:
              Limites inferior y superior de vectores (o matrices).
              Los argumentos son normalmente del mismo
              tamaño que
x. Sin embargo, si lb tiene menos
              elementos que
x, entonces solo el primer elemento fgoalattain, fmincon, fminimax,
    lb, ub de m es el límite inferior. Los límites superiores en fseminf, linprog, lsqcurvefit,
              ub se pueden definir de la misma manera. También lsqlin, lsqnonlin, quadraprog
              se pueden especificar variables infinitas usando –inf
              (para los limites superiores). Por ejemplo si
lb(i) = -
              inf,
la variable x(i) es el limite inferior.
              La función que calcula las inecuaciones no lineales,

    Nonlcon las restricciones de ecuaciones e inecuaciones no
fgoalattain, fmincon, fminimax
              lineales “evitando variables globales vía funciones
              anónimas y jerarquizadas”
              La matriz
A y el vector b son, respectivamente, los
                                                            fgoalattain, fmincon, fminimax,
    A, b coeficientes de las restricciones lineales de fseminf, linprog, lsqlin,
              desigualdad  y el vector correspondiente del lado
              derecho:
Ax ≤ b quadprog

    Options Una estructura que define las opciones, se utiliza Todas las funciones
              por las funciones de optimización.
              Punto inicial (es un escalar, vector o matriz) (para
              fzero, x0 también puede ser dos elementos
                vectoriales representando un intervalo que es
      x0 conocido para restricciones un cero) Todas las funciones excepto
                                                                    fminbnd



                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 6


  Argumentos de salida

  A continuación se muestra una descripción general de los argumentos de salida [1]:
        Tabla 4. Representativa de los argumentos de salida de las funciones linprog y fmincon
  Nombre de
  la salida Descripción  Usada por las funciones:
              Un número entero que identifica la razón en la que
              el algoritmo de optimización finalizo. Se puede
              utilizar el
exitflag como una herramienta de
                programación al escribir
m-files como calculo de

    exitflag optimización. Todas las funciones

              A su vez puede mostrar un mensaje que indica
              porque una optimización finalizo, llamando la
              función de optimización con el argumento de salida
              output y mostrando en pantalla output.message
              La evaluación de la función objetivo
fun con la fgoalattaing, fminbnd, fmincon,

      fval solución x fminimax, fminsearch, fminunc,
                                                            fseminf, fsolve, fzero, linprog,
                                                                    quadprog

    output Una estructura de salida que contiene información Todas las funciones
              acerca de los resultados de la optimización. 
              La solución encontrada por la optimización de la

      x función. Si exitflag > 0, entonces x es una solución, Todas las funciones
              si no,
x es el valor de la optimización  rutinaria
              cuando esta es terminada prematuramente.


  Función exiflag, lambda y output

  A continuación se trataran detalles de las funciones específicas de exitflag Lambda y output [1]:


  exitflag

  La función converge a una solución x
         0      Numero de iteraciones excedidas options. MaxIter.
        -2      No se encontró ningún punto factible.
        -3      El problema es infinito.
        -4      El valor NaN fue encontrado durante la ejecución del algoritmo.
        -5      Los problemas principales y duales son infactibles.
        -6      La dirección de la búsqueda llego a ser demasiado pequeña. Ningún otro progreso puede ser                           
        hecho.


  lambda

  La estructura contiene los multiplicadores de Lagrange en la solución x (separado por el tipo de
  restricción). Los campos de la estructura son:
        lower:   Limites inferiores lb 
        upper: Limites superiores ub
          ineqlin: desigualdades lineales
        eqlin: igualdades lineales


  output

  Estructura que contiene la información sobre la optimización. Los campos de la estructura son:
          Algorithm: Algoritmo usado
          cgiterations: Número de iteraciones conjugadas del gradiente (solamente logaritmos de larga
          escala)

                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 7


          iterations: Numero de iteraciones
          message: Mensaje de salida


  Opciones

  Son las opciones de optimización usadas por linprog Algunas opciones se aplican a todos los algoritmos, y
  otras son solamente relevantes cuando se usa el algoritmo de larga escala. Se puede utilizar
optimset para
  fijar o para cambiar los valores de estos campos en la estructura de opciones,
options. A continuación se
  muestran las opciones de optimización utilizadas por las funciones
linprog y fmincon [1]:
            Tabla 4. Representativa de las opciones de los programas linprog y fmincon
    Nombre de la Usado por las
      opción Descripción  L, M, B funciones:
                                                                    Todas, excepto
      Diagnostics Display muestra información acerca de la B
fmindbnd, fminsearch,
                            función a minimizar
                                                                    fzero y lsqnonneg
                                                                  fgoalattain, Fmincon,

    DiffMaxChange Máximo cambio en variables para M fminimax, fminunc,
                              diferencias infinitas fseminf, fsolve,
                                                                    lsqcurvefit, lsqnonlin
                                                                      Fgoalattaing,

    DiffMinChange Mínimo cambio en variables para M fmincon,fminimax,
                              diferenciación finita fminunc, fseminf, fsolve,
                                                                    lsqcurvefit, lsqnonlin
                      Nivel del display en ‘off’ el display no
                    muestra la salida;
‘iter’. Muestra la salida
      Display en cada iteración;
‘final’ muestra el final B Todas las funciones
                    de la salida
‘notify’ muestra si la función
                                no converge
                      Comprueba si la función objetivo y los
fgoalattain, fminbnd,
                    valores de restricciones son validos. ’on’ fmincon, fminimax,
      FunValCheck muestra un error cuando la función B fminsearch, fminunc,
                    objetivo o las restricciones devuelven un fseminf, fsolve, fzero,
                      valor que es complex,  NaN o Inf. lsqcurvefit, lsqnonlin
                                                                    fmincon, fminunc,

      LargeScale Usa el algoritmo de larga escala si es B fsolve, linprog,
                                  posible lsqcurvefit, lsqlin,
                                                                    lsqnonlin,quadraprog
                                                                    fgoalattain, fminbnd,
                                                                    fmincon, fminimax,
      MaxFunEvals Máximo número de evaluaciones B fminsearch, fminunc,
                            realizadas a la función
                                                                      fseminf, fsolve,
                                                                    lsqcurvefit, lsqnonlin
                                                                    Todas las funciones
      MaxIter Máximo numero de iteraciones B menos
fzero y
                                realizadas
                                                                      lsqnonneg

      MaxSQPIter Máximo numero de iteraciones de M
Fmincon
                      programación cuadrática secuencial
                                                                    fgoalattain, fminbnd,
                      Especifica una o mas usos definidos de fmincon, fminimax,
      OutputFcn las funciones que la función a optimizar B fminsearch, fminunc,
                            visita cada iteración fseminf, fsolve, fzero,
                                                                  lsqcurvefit y lsqnonlin
                          Amplitud de banda superior, fmincon, fminunc,

    PrecondBandWidth preacondicionado para PCG, el ajuste de L fsolve, lsqcurvefit,
                      ‘inf’
usa una factorización directa en lsqlin, lsqnonlin,
                                lugar de CG quadprog

                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 8


      Tabla 4. Representativa de las opciones de los programas linprog y fmincon (continuación)

    Nombre de la opción  Descripción  L, M, B Usado por las
                                                                      funciones:

        RelLineSrchBnd  Condición de borde  M fgoalattain, fmincon,
                                                                  fminimax, fseminf
                          Numero de iteraciones para el
                          cual la condición de borde
    RelLineSrchBndDuration especificada en M
Fgoalattain, fmincon,
                            RelLineSrchBnd
debe ser fminimax, fseminf
                                    activa
                          Si la función esta en,
‘on’ la
          Simplex función utiliza el algoritmo M
Linprog
                                  simplex.
                                                                  bintprog, fgoalattain,
                                                                  fmincon, fminimax,
                                                                  fminsearch, fminunc,

          TolFun Terminación de la tolerancia B fseminf, fsolve, linprog
                            en la función evaluada (L siempre), lsqcurvefit,
                                                                  lsqlin (L siempre)
                                                                  lsqnonlin, quadprog
                                                                      (Lsiempre)
                                                                  fmincon, fminunc,

          TolPCG Terminación de la tolerancia L fsolve, lsqcurvefit,
                              en la iteración PCG lsqlin, lsqnonlin,
                                                                      quadprog
                                                                  Todas las funciones
                                                                ecepto algoritmos de
          Tolx Terminación de la tolerancia B Media Escala para
                                    en
x
                                                                    linprog, lsqlin y
                                                                      quadprog


                            Evaluación
x típica. La fgoalattain, fmincon,
          TypicalX longitud del vector es igual al B fminunc, fsolve,
                          numero de elementos de x0 lsqcurvefit, lsqlin,
                                                                  lsqnonlin, quadprog



  Algoritmos de Media y Larga Escala

  Estas opciones son utilizadas por algoritmos de media y larga escala [1]:
 
Diagnostics: Imprime la información de diagnostico sobre la función que se reducirá.
          Display: Nivel de exhibición, “off”: no se muestra ninguna salida. 'iter' muestra la salida de cada
          iteración.
'final': se muestra la salida final. En este tiempo los trabajos con 'iter' se realizan con
          algoritmos de larga escala y algoritmos simplex.
          MaxIter: Máximo número de iteraciones permitidas.


  Únicamente Algoritmos de Media Escala

  Las siguientes opciones son utilizadas por el algoritmo a media escala:
        Simplex: Si la función esta en 'on', linprog utiliza el algoritmo simplex. El algoritmo simplex
          utiliza un punto de partida incorporado, sin considerar el punto de partida x0.


  Únicamente algoritmos de larga escala

  Estas opciones son utilizadas únicamente por el algoritmo de larga escala
          TolFun: Tolerancia del valor final de la función



                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 9


  Algoritmo


  Optimización a larga escala

  El método de larga escala, se basa en LIPSOL (Solución Lineal del Punto Interior) la cual es una variable
  del algoritmo
Mehrotra’s predictor-corrector, un método primal-dual del punto interior. Un numero de
  pasos previos del proceso ocurren antes de que el algoritmo comience a iterar [1].


  Optimización a media escala

  Linprog: es un método activo del sistema y es así una variación del método simplex, bien conocido para
  programación lineal. El algoritmo encuentra una solución factible inicial por la solución de otro problema
  de programación lineal:

  options = optimset('LargeScale', 'off', 'Simplex', 'on')

  Y pasando
options como un argumento de entrada de linprog. El algoritmo simplex retorna una solución
  óptima del vértice. Es importante tener presente que no se podrá proveer un punto inicial x0 para
linprog,
  del método a gran escala o del método a media escala usando el algoritmo del método simplex. En
  cualquier caso si se coloca x0 como un argumento de entrada, el
linprog no toma en cuenta x0 y calcula su
  propio punto inicial para el algoritmo.


  Diagnóstico


  Optimización a Larga Escala

  La primera etapa del algoritmo puede implicar un proceso previo de las restricciones. Varias condiciones
  posibles pueden hacer que ocurra esto, por ejemplo
linprog a la salida con un mensaje de infactibilidad. En
  cada caso, el valor retornado de
exitflag. Por linprog fija a un valor negativo para indicar falla [1]. 

  Si una fila de ceros se detecta en
Aeq, pero el elemento correspondiente al beq no es cero, el mensaje de
  salida es [1]:

  Salida debido a infactibilidad: Toda la fila de ceros de la matriz de las restricciones no tiene un cero en el
  tamaño correspondiente a la entrada derecha.

  Si uno de los elementos de x se encuentra para no ser limitado, el mensaje de salida es:

  Salida debido a infactibilidad: La función objetivo f'*x es ilimitada debajo.

  Si una de las filas de
Aeq tiene solamente un elemento distinto a cero, el valor asociado en x se llama una
  variable
singleton (semifallo). En este caso, el valor de esa componente de x se puede calcular de Aeq y de
  beq. Si el valor calculado viola otra restricción, el mensaje de la salida es:

  Salida debido a infactibilidad: Las variables de semifallo en restricciones de igualdad no son factibles.

  Si la variable
singleton (semifallo) puede ser solucionada para resolver la solución viola los límites
  superiores o inferiores, el mensaje de la salida es:

  Salida debido a infactibilidad: Las variables de semifallo en las restricciones de igualdad no están dentro
  de los límites.

  Una vez que el proceso previo haya finalizado la parte iterativa del algoritmo comienza a resolver los
  criterios hasta que se detiene. Si el residuo crece en lugar de disminuir, o el residuo ni crece ni disminuye,
  uno de los dos mensajes de culminación se muestra en pantalla respectivamente:


                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 10


  Uno o más de los residuos, banda dual o error total ha crecido más de 100.000 veces que su valor mínimo:

  ó

  Uno o más residuos, banda dual o error relativo total ha caído.

  Después que uno de estos mensajes se muestren, es seguido por uno de los siguientes seis mensajes que
  indican el dual, el primal,  o ambos, aparecen ser infactibles, los mensajes se diferencian deacuerdo a la
    infactibilidad:

  El dual parece ser infactible (y el primal ilimitado). (El primal residual  < TolFun.)

  El primal parece ser infactible (y el dual ilimitado). (El dual residual  < TolFun.)

  El dual parece ser infactible (y el primal ilimitado) desde entonces el dual residual> sqrt (TolFun). (El
  primal residual <10*TolFun).

  El primal parece ser infactible (y el dual ilimitado) desde entonces el primal residual> sqrt (TolFun). (El
  dual residual <10*TolFun).

  El dual parece ser infactible y el primal ilimitado desde entonces el primal objetivo <-1e+10 y el dual
    objetivo<1e+6.

  El primal parece ser infactible y el dual ilimitado desde entonces el dual objetivo> 1e+10 y el primal
  objetivo>-1e+6. Tanto el primal como el dual parecen ser infactibles.

  Observe que, por ejemplo el primal objetivo puede ser ilimitado, y el primal residual que es una medida
  satisfactoria de la restricción primal, puede ser pequeño.


  Optimización a Media Escala

  El linprog, da una advertencia cuando el problema es infactible. Advirtiendo: las restricciones son
  demasiado severas; no hay ninguna solución factible [1].  

  En este caso, el
linprog produce un resultado que minimiza el peor caso, que es la violación de
  restricciones.   Cuando las restricciones de igualdad son incoherentes, el
linprog da una advertencia: Las
  restricciones de igualdad son demasiado severas; no hay ninguna solución factible
[1].
  
  Las soluciones ilimitadas producen la advertencia:
La solución es ilimitada y es infinita; las restricciones
  no son tan restrictivas
. En este caso, el linprog devuelve un valor x que satisface las restricciones [1].


    Limitaciones de la optimización a media escala

  En este momento, los únicos niveles de despliegue, usando la opción del Despliegue en las opciones, es
  'fuera de' y 'último'; rendimiento reiterativo que usa 'el iter' no es disponible [1]. 












                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 11


  Fmincon


  Propósito

  Encontrar el mínimo o máximo de una función multivariable con restricciones no lineales (para el calculo
  de restricciones lineales, de igual manera ve aplicación) [1].


  Ecuación

  Un modelo de la función que ésta realiza, lo podemos ver en [1]:


        ()
  minxf :
    x
  Sujeta a:

    ()
      xc0

      ()
        xceq=0

        bAx
             (2)

          beqAeqx=

          ubxlb≤≤
  Donde x, b, beq, lb, y ub son vectores, A y Aeq son matrices, c y ceq(x) son funciones que retornan
  vectores, y
f(x) es una función que retorna un escalar. f(x), c(x), y ceq(x) pueden ser funciones no lineales
  (para éste caso trataremos funciones estrictamente lineales) [1].


  Sintaxis

  x = fmincon(fun,x0,A,b)
  x = fmincon(fun,x0,A,b,Aeq,beq)
  x = fmincon(fun, x0,A,b,Aeq,beq,lb,ub)
  x = fmincon(fun, x0,A,b,Aeq,beq,lb,ub,nonlcon)
  x = fmincon(fun, x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
  [x,fval] = fmincon(...)
    [x,fval,exitflag] = fmincon(...)
      [x,fval,exitflag,output] = fmincon(...)
      [x,fval,exitflag,output,lambda] = fmincon(…)
        [x,fval,exitflag,output,lambda,grad] = fmincon(…)
          [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)
[1]


  Descripción

  fmincon intenta encontrar un mínimo de una función escalar de varias variables que comienzan en una
  estimación inicial. Esto es generalmente denominado optimización de restricciones no lineales o
  programación no lineal [1].

  x = fmincon(fun,x0,A,b: Evalúa el valor inicial x0 ,y encuentra un mínimo de x para la función
  descrita en
 fun sujeta a las desigualdades lineales Ax ≤ b. x0 puede ser un escalar, un vector o una matriz.

  x = fmincon(fun,x0,A,b,Aeq,beq: Minimiza fun sujeta a las igualdades lineales Aeq· x = beq,
  así como también la de la forma 
Ax ≤ b. se colocara A = [ ] y b = [ ] si no existen desigualdades.

  x = fmincon(fun, x0,A,b,Aeq,beq,lb,ub: Aquí se define y se colocan los limites inferior y
  superior sobre la variable de diseño en
x, por esta razón la solución siempre estará entre los rangos lb ≤ x ≤
  ub.
Se colocara Aeq = [ ] y beq = [ ]  si no existen igualdades,  lb(i) = -Inf  si x(i) es el limite inferior, y 
  ub(i) = Inf si  x(i) es el limite superior.


                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 12


  x = fmincon(fun, x0,A,b,Aeq,beq,lb,ub,nonlcon): Realiza la minimización sujeta a las
    desigualdades no lineales
c(x) o a las igualdades ceq(x) definida en nonlcon. fmincon optimiza  sujeta a c(x)
  ≤ 0 y
ceq(x)=0. Se colocara lb = [ ] y⁄o ub = [ ] si no existen limites.

  x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options): Minimiza con las opciones
  de optimización especificadas en la estructura de opciones. Se utilizara
optimset para colocar estas
  opciones. Se coloca
nonlcon = [ ]  si no hay restricciones de igualdad o desigualdad no lineales.
  [x,fval] = fmincon(...):  Retorna el valor de la función objetivo fun en la solución x.

    [x,fval,exitflag] = fmincon(...):  Retorna un valor exitflag que describe la condición de
  salida de
fmincon.

      [x,fval,exitflag,output] = fmincon(...): Retorna una estructura output con información
  acerca de la optimización.

      [x,fval,exitflag,output,lambda] = fmincon(…): Retorna una estructura lamda cuyos
  campos contienen los multiplicadores de lagrange en la solución de
x.

        [x,fval,exitflag,output,lambda,grad] = fmincon(...): Retorna el valor del gradiente
  de
fun en la solución de x.


  Función fun, nonlcon, y options

  A continuación se proporcionara detalles de la función específica para: fun, nonlcon y options [1]:

  fun 
  Es la función a ser minimizada o maximizada. fun es una función que acepta un vector x y retorna un
  escalar
f, que es la función objetivo evaluada en x. La función fun puede ser especificada como una función
  handle para los archivos m-file.

  x = fmincon(@myfun,x0,A,b)

  Donde
myfun es una función de MATLAB como:

  function f = myfun(x)
  f = ... % Compute function value at x


  fun  puede ser también una función handle para una función anónima.

  x = fmincon(@(x)norm(x)^2,x0,A,b);

  Si el gradiente de
fun  también requiere ser calculado la opción  GradObj estará en “on”, como se puede
  ver en lo siguiente: 

  options = optimset('GradObj','on')

  Entonces la  función fun  debe volver, en la segunda salida el argumento, el gradiente evaluado en  g, un
  vector en
x. Debe tenerse presente que por medio de comprobar el valor de nargout, la función g puede
  evitar ser calculada cuando la opción
fun es llamada con solo un argumento de salida (En el caso donde la
  optimización solo necesite el valor de
f  pero no de g).

  function [f,g] = myfun(x)
  f = ... % Compute the function value at x

  if nargout > 1 % fun called with two output arguments
  g = ... % Compute the gradient evaluated at x
  end

                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 13



  El gradiente consiste en las derivadas parciales de  f en el punto x. Esto es, la i-ésima componente de g es la
  derivada parcial de
f con respecto a la i-ésima componente de x.

  Nonlcon 
  Es la función que calcula las restricciones de desigualdad no lineales c(x)≤ 0 y las restricciones de igualdad
  no lineal
ceq(x)=0. La función nonlcon acepta un vector x y retorna dos vectores c y ceq. El vector c
  contiene las desigualdades no lineales evaluadas en x, y ceq contiene las igualdades no lineales evaluadas
  en
x. La función nonlcon puede ser especificada como una función handle.

  x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

  Donde
mycon es una función de MATLAB como:

  function [c,ceq] = mycon(x)
  c = ... % Compute nonlinear inequalities at x
  ceq = ... % Compute nonlinear equalities at x

  Si el gradiente de las restricciones necesita ser calculado la opción 
GradConstr debe estar en 'on', como
  puede observarse en lo siguiente:

  options = optimset('GradConstr','on')

  Cuando la opción nonlcon deba volver, en los terceros y cuartos argumentos de salida, GC, el gradiente de
  c(x), y GCeq, el gradiente de ceq(x). Debe tenerse presente que por medio de comprobar el valor de la
  opción
nargout la función GC y GCeq puede evitar ser calculada cuando la opción nonlcon es llamada con
  solo dos argumentos de salida (en el caso donde el algoritmo de optimización solo necesite los valores de
c
  y
ceq pero no los de GC y GCeq).

  c = ... % Nonlinear inequalities at x
  ceq = ... % Nonlinear equalities at x
  if nargout > 2 % nonlcon called with 4 outputs
  GC = ... % Gradients of the inequalities
  GCeq = ... % Gradients of the equalities
  end

  Si
nonlcon retorna un vector c de m componentes y x tiene longitud n, donde n es la longitud de x0, cuando
  el gradiente GC de c(x) es una matriz n x m, donde GC(i,j) es la derivada parcial de c(j) con respecto a x(i),
  (la
j-ésima columna de GC es el gradiente de la j-ésima restricción de desigualdad c(j)). De la misma
  manera, si
ceq, tiene p componentes, el gradiente GCeq de ceq(x) es una matriz n x p, donde GCeq(i,j) es la
  derivada parcial de
ceq(j) con respecto a x(i) ( la j-ésima columna de GCeq es el gradiente de la j-ésima
  restricción de igualdad
ceq(j)).















                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 14


  Solución de Problemas de Optimización empleando

  MATLAB™


  Ejemplo #1

  Minimizar la función f(x1, x2) = 2x1 + 8x2 sometida a las restricciones [3]:
      ;0
  1x
      ;0

  2x
            ;842≥+
        21xx
            ;052
≤−
        21xx
            ;55≤+−
        21xx
  Llamando, respectivamente r, s y t a las rectas expresadas en las tres últimas restricciones, la zona de
  soluciones factibles sería:

                    4


                    3


Descripción: Test.jpg                    2

Descripción: Test.jpg                    X2
                    1


Descripción: Test.jpg                      0r=2X1+4X2=8
                                                                        s=2X1-5X2=0
                                                                        t=-X1+5X2=5
                                                                      Region Fac tible
                      0123456789-1

                                                X1

      Figura 1. Grafica para obtener los puntos de intersección de las restricciones del ejemplo 1


          Siendo los vértices:

  A intersección de r y t
          =+842xx
            ⎫
                      91021
                      ⎞⎛
              →
                      ⎟⎜
            ⎬
          =+−
55Axx
                      7,7
                      ⎠⎝
        21
            ⎭

  B intersección de s y t:

          =−
            ⎫
                        )2,5(05221Bxx
          =+−
            55xx
        21
        
  C intersección de r y s:
          =+842xx
            ⎫
                      82021
                      ⎞⎛
              →
                      ⎟⎜
            ⎬
          =−
053Cxx
                      9,9
                      ⎠⎝
        21
            ⎭

  Siendo los valores de la función objetivo en ellos:



                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 15



                          1,139298102)(
≈=+=Af
                    777
                      262*85*2)(
=+=Bf

                            5,1110488202)(
≈=+=Cf  minimo
                    999

    Alcanzándose el mínimo en el punto
C.


  Resolución en MATLAB

  Minimizar la función f(x1, x2) = 2x1 + 8x2 sometida a las restricciones:
      ;0
  1x
      ;0
  2x
            ;842≥+
        21xx
            ;052≤−
        21xx
            ;55≤+−
        21xx
  Para resolver el siguiente problema en MATLAB es necesario que todas las restricciones estén de la forma: 
  ≤ 0 para poder crear el archivo
M-file, esto se logra multiplicando cada restricción por -1 quedando:
      ;0
x
  1
      ;0x
  2
                  ;0842≤+−−xx
          21
            ;052≤−xx
        21
            ;55≤+−xx
        21
    - Luego se crea un archivo M-file en MATLAB definiendo la función objetivo; quedando de la
        siguiente manera:

  %Creación de un archivo M-file para definir la función objetivo

  function f = objfun(x)
  f = 2*x(1) +8*x(2);

    - Otro archivo M-file es creado para definir las restricciones del problema, las cuales todas deben
        ser ≤ 0, quedando:

  function [c, ceq] = confun(x)
  % restricciones de desigualdades lineales o no lineales
  c = [-x(1); -x(2);  -2*x(1)-4*x(2)+8; 2*x(1)-5*x(2); -x(1)+5*x(2)-5];
  % restricciones de igualdades lineales o no lineales
  ceq = [];

  Se observa que en
ceq no se define ninguna inecuación, esto se debe a que todas las restricciones dadas en
  el problema son de la forma
G(x) ≤ 0 o G(x) ≥ 0 pero no de la forma G(x) = 0.












                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 16


  Luego se crea otro archivo M-file que se encargue de llamar a los otros dos archivos M-file donde se
  definen la función objetivo y las restricciones del problema, de la siguiente manera:

  %Programa de ejemplo de utilización de funciones del toolbox de
    %optimización en MATLAB
  %Realizado por:- Marchena Williams
  %              - Ornelas Carlos
    %Supervizado por: Gonzalez-Longatt, F.

  %Fecha: 12-02-2006
  %UNEFA - Núcleo Maracay
              %-----------------------------------------------------------------
  clc  
% Borra la pantalla
  clear
% Borra todas las variables
  disp(
'  ') % DISP: muestra una cadena de caracteres
  disp(
' Ejemplo 1')
                disp(
'------------------------------------------------------------')
  disp(
' Condiciones Iniciales')
  x0=[-1,1]
          options=optimset(
'LargeScale','off');
            [x,fval]=fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options)
 
                %---------------------------------------------------------------------

  Donde se indican los valores iniciales de x, se indica que es una función de media escala ya que la de larga
  escala esta en modo
'off', y por ultimo se indican los valores que se desean de la solución, en este caso:
  [x,fval], y se llama la función objetivo con objfun y sus restricciones con confun. Dando el siguiente
  resultado:

    Optimization terminated: first-order optimality measure less
   than options.TolFun and maximum constraint violation is less
   than options.TolCon.
  Active inequalities (to within options.TolCon = 1e-006):
    lower      upper     ineqlin   ineqnonlin
                                       3
                                       4

  x =

      2.2222    0.8889


  fval =

     11.5556


  Al obtener este resultado con la aplicación de MATLAB y compararlo con el obtenido de forma gráfica, se
  comprueba de forma consistente que la solución del problema es efectivamente en el punto
C,  que es el
  punto donde se alcanza el mínimo para la función
f(x1, x2) = 2x1 + 8x2.









                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 17


  Ejemplo #2

  Determine los valores de x que minimicen la siguiente función: f(x)=-x1x2x3Que comienza en el punto:  
                                                                , 
  x= [10; 10; 10], y sujeta a las siguientes restricciones [1]:

                    72220
≤++≤xxx 
              321

  Este ejemplo es tomado de la optimización toolbox para uso con MATLAB, el cual es un ejemplo resuelto
  de la siguiente manera:

  Primero, escriba un M-file que devuelva un valor escalar
f de la función evaluada en x

  Function f = myfun(x)
  F = -x(1)*x(2)*x(3);

  Entonces, reescriba las restricciones como dos ecuaciones, menor que o igual a una constante:

                  022
≤−−−xxx
              321

                7222
≤++
            321xxx


  Puesto que ambas restricciones son lineales, formulándolo como una matriz de desigualdad A*x = b,
  donde:


            −−−221
              ⎤⎡
                          0
                          ⎡
                        =
b
    =A  
              ⎥⎢
                          ⎢
                          72
            111

              ⎥⎢
                            ⎦⎣
              ⎦⎣

  Luego coloque un punto de partida e invoque la optimización:

  x0 = [10; 10; 10];     % comenzar conjetura de la solución

  [x,fval] = fmincon(@myfun,x0,A,b)

  Después de 66 evaluaciones de la función, la solución es:

  x =
       24.0000
       12.0000
       12.0000

  Donde la función evaluada es:

  fval =
       -3.4560e+03

  Y las restricciones lineales de desigualdad, se evalúan para ser menor o igual que cero:

  A*x-b=
            -72
              0




                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 18


  Resolución en MATLAB

  Determine los valores de x que minimicen la siguiente función: f(x)=-x1x2x3,Que comienza en el punto: x =

  [10; 10; 10], y sujeta a las siguientes restricciones:
                    72220
≤++≤xxx 
              321

  Creación del archivo M-file para definir la función objetivo:

  %Creación de un archivo M-file para definir
  %la función objetivo
  función f = objfun(x)
  f = -x(1)*x(2)*x(3);

  Luego, creando otro archivo M-file se definen las restricciones de la función objetivo

    %Restricciones son lineales de desigualdad
  función [c, ceq] = confun(x)
  % restricciones no lineales de desigualdad
  c = [-x(1)-2*x(2)-2*x(3); 
      x(1)+2*x(2)+2*x(3)-72];
  % restricciones no lineales de igualdad
  ceq = [];

  Por último es creado otro archivo
M-file para definir las variables de entrada, a través de las cuales
  obtenemos los resultados de la optimización

  %Programa de ejemplo de utilización de funciones del toolbox de

    %optimización en MATLAB
  %realizado por:- Marchena Williams
  %              - Ornelas Carlos
    %Supervizado por: Gonzalez-Longatt, F.

  %Fecha: 12-02-2006
  %UNEFA - Núcleo Maracay
              %-----------------------------------------------------------------
  disp(
'  ')
  disp(
' Ejemplo 2')
                disp(
'-----------------------------------------------------------')
 
  disp(
' Condiciones Iniciales')
  x0=[10; 10; 10]
    disp(
'Matrices de Coeficientes de Ax=b')
  A=[-1 -2 -2; 1 2 2]
  b=[0; 72]
          options=optimset(
'LargeScale','off');
            [x,fval]=fmincon(@objfun1,x0,A,b,[],[],[],[],@confun1,options)

  En este caso, como las restricciones son de igualdad del tipo: A*x = b, definiendo las restricciones en
  forma de
A*x = b, donde A es una matriz y b un vector, como se menciona anteriormente, una vez definida
  A y b, se indica a
fmincon para poder obtener la optimización, como sigue:

  Condiciones Iniciales

  x0 =

      10
      10


                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 19


      10

  Matrices de Coeficientes de Ax=b

  A =

      -1    -2    -2
       1     2     2


  b =

       0
      72


    Optimization terminated: magnitude of directional derivative in search
   direction less than 2*options.TolFun and maximum constraint violation
    is less than options.TolCon.
  Active inequalities (to within options.TolCon = 1e-006):
    lower      upper     ineqlin   ineqnonlin
                            2          2
  x =

     24.0000
     12.0000
     12.0000


  fval =

   -3.4560e+003

  Al realizar el ejercicio por medio de las aplicaciones de MATLAB se puede observar que la solución
  alcanzada para el valor de x
que reduce al mínimo la función f(x)=-x1x2x3, es el punto x= (24,12,12), y
  donde el valor de la función evaluada en este punto x, es de -3.4560e+003. De esta manera se corrobora el
  resultado ya arrojado en el cálculo mostrado anteriormente. 




















                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 20


  Ejemplo #3

  Encuentre el valor de x que reduce al mínimo [1]:

            −−=
                      321645)(xxxxf

  Sujeto a:

        +−
            32120xxx
          ++
              32142423xxx

    +
        213023xx
        ≤≤
                  3210,0,0xxx
  Primero, introduzca los coeficientes:

  f = [-5; -4; -6]

  A = [1 -1 1
       3 2 4
       3 2 0];

  b = [20; 42; 30];

  lb = zeros(3,1);
  Luego, se llama la rutina de programación lineal [x,fval,exitflag,output,lambda] =
      linprog(f,A,b,[],[],lb)
;

    Introduciendo
x, lambda.ineqlin, y lambda.lower, se coloca:

  x =
        0.0000
        15.0000
        3.0000
    lambda.ineqlin =
        0
        1.5000
        0.5000
    lambda.lower =
        1.0000
        0
        0


  Resolución en MATLAB

  Encuentre el valor de x que reduce al mínimo:

            −−= 
                      321645)(xxxxf

  Sujeto a:

        +−
            32120xxx
          ++
              32142423xxx

    +
        213023xx
        ≤≤
                  3210,0,0xxx

  Creación del archivo M-file para definir la función objetivo de la siguiente manera:



                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 21


  function f = objfun(x)
  f = -5*x(1)-4*x(2)-6*x(3);

  Luego, creando otro archivo M-file se definen las restricciones de la función objetivo:

  %Definición de las restricciones, las cuales son ecuaciones
  %lineales de desigualdad.
  función [c, ceq] = confun(x)
  % Nonlinear inequality constraints
  c = [x(1)-x(2)+2*x(3)-20; 3*x(1)+2*x(2)+4*x(3)-42; 
      3*x(1)+2*x(2)-30; -x(1); -x(2); -x(3)];
  % Nonlinear equality constraints
  ceq = [];

  Por último se crea otro archivo M-file para definir las variables de entrada, a través de las cuales obtenemos
  los resultados de la optimización:

  %Programa de ejemplo de utilización de funciones del toolbox de
    %optimización en MATLAB
  %realizado por:- Marchena Williams
  %              - Ornelas Carlos
    %Supervizado por: Gonzalez-Longatt, F.

  %Fecha: 12-02-2006
  %UNEFA - Núcleo Maracay
              %-----------------------------------------------------------------
  clc
%Borrar la pantalla
  clear
%Borrar todas las variables
  disp(
' ') %DISP: muestra una cadena de caracteres
  disp(
' ejemplo 3')
                disp(
'------------------------------------------------------------')
    disp(
'Condiciones iniciales')
  x0 = [-1,1,1]
  options = optimset(
'LargeScale','off');
  f = [-5; -4; -6]
  A = [1 -1 1
       3 2 4
       3 2 0];
  b = [20; 42; 30];
  [x, fval] = fmincon(@objfun2,x0,A,b,[],[],[],[],@confun2,options)

  Al igual que en el ejercicio anterior, como las restricciones son de igualdad del tipo:
A*x = b, definiendo
  las restricciones en forma de
A*x = b, donde A es una matriz y b un vector, como se menciona
  anteriormente, una vez definida
A y b, se indica a fmincon para poder obtener la optimización, como
  sigue:

  Ejemplo 3
            ------------------------------------------------------------
  Condiciones iniciales

  x0 =

      -1     1     1


  f =

      -5

                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 22


      -4
      -6


    Optimization terminated: first-order optimality measure less
   than options.TolFun and maximum constraint violation is less
   than options.TolCon.
  Active inequalities (to within options.TolCon = 1e-006):
    lower      upper     ineqlin   ineqnonlin
                            2          2
                            3          3
                                       4

  x =

           0   15.0000    3.0000
  fval =

    -78.0000
  Al realizar el ejercicio por medio de las aplicaciones de MATLAB se puede observar que la solución
  alcanzada para el valor de x
que reduce al mínimo la función f(x)= -5x1-4x2-6x3  , es el punto x =( 0,15,3), y
  donde el valor de la función evaluada en este punto x, es de -78. De esta manera se corrobora el resultado
  ya arrojado en el cálculo mostrado anteriormente. 


































                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 23


  Ejemplo 4

  A una persona le tocan 10 millones de bolívares en una lotería y le aconsejan que las invierta en dos tipos
  de acciones,
A y B. Las de tipo A tienen más riesgo pero producen un beneficio del 10 %. Las de tipo B son
  más seguras, pero producen sólo el 7% anual. Después de varias deliberaciones decide invertir como
  máximo 6 millones en la compra de acciones
A y por lo menos, 2 millones en la compra de acciones B.
  Además, decide que lo invertido en
A sea, por lo menos, igual a lo invertido en B. ¿Cómo deberá invertir 10
  millones para que le beneficio anual sea máximo? [3]

  Sean las variables de decisión:
  x1= cantidad invertida en acciones A
  x2= cantidad invertida en acciones B

  La función objetivo es:


                21710xx
      =

              100100)(xf+
      =
                    2107.01.0)(xxxf+

  Y las restricciones son:

          ≥≥
            ⎫
        210;0xx
            ⎪
        ≤+
      2110xx
            ⎪
            ⎪
    ≤
            ⎬
  16x
            ⎪
    ≤
  22x
            ⎪
            ⎪
    ≥
      21xx
            ⎭

  La zona de soluciones factibles es: 

          15

                                                                        u



          10r
                                                                    X1+X2=10

                                                                    X1=X2
        X2
                                                                    X1=6
            5
B
                                                                    X2=2C

              t
                    AD

              0510150
                                            X1

    Figura 2. Grafica para obtener los puntos de intersección de las restricciones de la función objetivo
                                      del Ejemplo 4
  Siendo los vértices del recinto:

  A intersección de u,t:

    =
        ⎫
                )2,2(21Axx
    =
      2x
  2


                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 24



  B intersección de r,u:


        =+
          ⎫
                    )5,5(1021Bxx
          ⎬
    =
      21xx

  C intersección de r,s:


        =+
          ⎫
                    )4,6(1021Cxx
      6x⎬=
  1

  D intersección se s,t:


    =
      ⎫
                )2,6(61Dx
      2x⎬=
  2


  La función objetivo toma en ellos los valores:


                              millones34,0341420)(=
            +=
    Af
                    100100100=

                              millones85.0853550)(=
            +=
    Bf
                    100100100=

                              millones88.0882860)(=  MAXIMO
            +=
    Cf
                    100100100=

                              millones74,0741460)(=
            +=
    Df
                    100100100=

  Siendo la solución óptima invertir 6 millones de bolívares en acciones tipo
A y 4 millones en acciones tipo
  B.






















                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 25


  Resolución en MATLAB

  La función objetivo es:

      = 
                    2107.01.0)(xxxf+

  Y las restricciones son:

          ≥≥
                          ≤−≤−
                            0;00;0xxxx
            ⎫
                ⎧
                          2121
            ⎪
                ⎪
        ≤+
                          ≤−+
                            01010xxxx
                      2121
            ⎪
                ⎪
            ⎪
                ⎪
    ≤
                      ≤−→
                        066xx
            ⎬
                ⎨
                  11
            ⎪
                ⎪
    ≥
                        ≤+−
                          022xx
                    22
            ⎪
                ⎪
            ⎪
                ⎪
    ≥
                        ≤+−
                          0xxxx
                        2121
            ⎭
                ⎩

  Creación del archivo M-file para definir la función objetivo:

  %creación de un archivo M-file para definir la función objetivo
  function f = objfun(x)
    f =-(0.1*x(1) + 0.07*x(2));

    - Luego, creando otro archivo M-file se definen las restricciones de la función objetivo:
    %Restricciones de inecuaciones lineales
  function [c, ceq] = confun(x)
  % Nonlinear inequality constraints
  c = [-x(1); -x(2); x(1)+x(2)-10; x(1)-6; -x(2)+2;
      -x(1)+x(2)];
  % Nonlinear equality constraints
  ceq = [];

  Por último se crea otro archivo M-file para definir las variables de entrada, a través de las cuales obtenemos
  los resultados de la optimización:

  %Programa de ejemplo de utilización de funciones del toolbox de

    %optimización en MATLAB
  %realizado por:- Marchena Williams
  %              - Ornelas Carlos
    %supervizor: Francisco M. Gonzalez-Longatt

  %Fecha: 12-02-2006
  %UNEFA - Núcleo Maracay
              %-----------------------------------------------------------------
  disp (
' ')
    disp(
'Ejemplo 4')
                  disp(
'---------------------------------------------------------------')
    disp(
'condiciones iniciales')
  x0=[-1,1]
          options=optimset(
'LargeScale','off');
              [x,fval]=fmincon(@objfun3,x0,[],[],[],[],[],[],@confun3,options)

  Como las restricciones son de igualdad del tipo: A*x = b, definiendo las restricciones en forma de Ax = b,
  donde
A es una matriz y b un vector, como se menciona anteriormente, una vez definida A y b, se indica a
  fmincon para poder obtener la optimización, como sigue:





                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 26


  Ejemplo 4
              ---------------------------------------------------------------
  Condiciones iniciales

  x0 =

      -1     1

    Optimization terminated: first-order optimality measure less
   than options.TolFun and maximum constraint violation is less
   than options.TolCon.
  Active inequalities (to within options.TolCon = 1e-006):
    lower      upper     ineqlin   ineqnonlin
                                       3
                                       4

  x =

       6     4


  fval =

     -0.8800

  Al obtener este resultado con la aplicación de MATLAB y compararlo con el obtenido de forma gráfica, se
  comprueba de forma consistente que la solución del problema es efectivamente invertir 6 millones de
  bolívares en acciones tipo
A y 4 millones en acciones tipo B. Es importante señalar que el hecho en que la
  evaluación de la función en el punto arrojado x= (6,4), de un resultado negativo (-), se debe a que
  MATLAB establece que para maximizar la función
f se aplica una optimización para minimizar la función 
  -
f. El punto resultante donde el máximo f ocurre también es el punto donde el mínimo de -f ocurre.


























                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09
  Optimización de Funciones Lineales con Restricciones en MATLABTM: Teoría y Ejemplos 27


  Referencias Bibliográficas


    [1] User`s Guide for Mathworks “Optimization Toolbox For use with MATLAB”. 1990 – 2006.

    [2]
MatlabTM R2006a. (Online) disponible en: http://www.mathworks.com.

    [3]
M.A. Juan Ricardo Salinas Ascencio, Mg. Ovidio Zubieta Bejar, Doc. Juan Morales Romero. “Problemas resueltos de
          Programación Lineal
”. 













 






























                                                                                                              Solo para empleado con objetivodeevaluación, o académicos. Prohibido reproducción o parcial de documento sin consentimiento de los autores.      serlatotal este
  W. Marchena, C Ornelas. F. Gonzalez-Longatt, Febrero 2007                                       REPORTE 2007-09