Autor Tema: Problema de optimización numérico

0 Usuarios y 1 Visitante están viendo este tema.

21 Enero, 2015, 12:33 pm
Leído 1467 veces

paduana

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 58
  • Karma: +0/-0
  • Sexo: Femenino
Hola! Tengo un ejercicio de aprovisionamiento, y tengo que minimizar el coste; que dependerá de k, el factor de seguridad, y q, la cantidad de pedido.
He llegado a plantearlo y a sacar estas ecuaciones pero mi problema es que no sé como resolverlo numéricamente o acercarme a alguna solución. alguna sugerencia?

Coste por ciclo:
\( \begin{equation*}
\begin{aligned}
 a +qc + \left( k \sigma_X + \frac{q}{2}\right)\frac{qh}{\mu_D} +1000 \left( \frac{1 e^{{\frac{-k^2}{2}}}}{\sqrt{2 \pi k}}- \frac{0.02q}{\sigma_X k}\right)
 \end{aligned}
\end{equation*}  \)

Coste por unidad de tiempo:
\( \begin{equation*}
\begin{aligned}
\frac{a \mu_D}{q} +c\mu_D + \left( k \sigma_X + \frac{q}{2}\right)h +1000 \frac{\mu_D}{q}\left( \frac{1 e^{{\frac{-k^2}{2}}}}{\sqrt{2 \pi k}}- \frac{0.02q}{\sigma_X k}\right)
 \end{aligned}
\end{equation*} \)

Las derivadas del coste son:

\( \begin{equation*}
\begin{aligned}
\frac{\partial coste} {\partial\ q}=   \frac{h}{2} - \frac{1}{q^2} \left( a \mu_D + \frac{1000 \mu_D e^{\frac{-k^2}{2}}}{\sqrt{2 \pi }q} \right)
 \end{aligned}
\end{equation*}
\begin{equation*}
\begin{aligned}
\frac{\partial coste} {\partial\ k}= \sigma_X h + \frac{1000 \mu_D}{\sqrt{2 \pi }q}  e^{\frac{-k^2}{2}} \left( -1  - \frac{1}{k^2} \right) + \frac{20 \mu_D}{\sigma_X k^2}
 \end{aligned}
\end{equation*}

\begin{equation*}
\left \{
  \begin{array}{l}  \frac{h}{2} - \frac{1}{q^2} \left( a \mu_D + \frac{1000 \mu_D e^{\frac{-k^2}{2}}}{\sqrt{2 \pi }q} \right)=0 \\\sigma_X h + \frac{1000 \mu_D}{\sqrt{2 \pi }q}  e^{\frac{-k^2}{2}} \left( -1  - \frac{1}{k^2} \right) + \frac{20 \mu_D}{\sigma_X k^2}=0\\\end{array}
  \right.
\end{equation*}
 \)

21 Enero, 2015, 12:58 pm
Respuesta #1

Piockñec

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,266
  • Karma: +1/-0
  • Sexo: Masculino
Para hacerlo numéricamente, necesitarás números  :laugh:
Es decir, \( \sigma_X, \mu_D,h,a,c \) deberían tener algún valor (1,500, el que sea).
Si los tienes, entonces puedes hacer lo siguiente:

Supongo que tienes que minimizar dos funciones distintas, y no por separado, sino a la vez. Esto genera el problema de que, muy probablemente, ambas funciones tengan los mínimos en distintos sitios, y tendrás que decidir tú qué valor para q y para k eliges como óptimo (o rango de valores aceptable, o lo que tú quieras).
Pinta en una gráfica en 3D (eje x = q, eje y = k, eje z = coste) ambas funciones, y observa dónde están los mínimos. Si te cuesta verlo, pinta mejor (eje x = q, eje y = k, eje z = - coste), la función en negativo, y así buscas máximos con la mirada, que se ve mejor :) y oteas el punto idóneo, y voilà.

También puedes hacerlo usando métodos numéricos en vez de usar tu ojo, pero tendrás que ser MUY cuidadosa, muchísimo, porque k y q en 0 presentan singularidad, y porque son ecuaciones MUY NO lineales.
Si tienes experiencia en métodos numéricos, puedes generar uno que haga muestreos (a lo estadística) de puntos, busque el que tenga menor coste, y que ese sea tu punto inicial, y ya aplicas gradientes conjugados, newton-raphson, o el que te dé la gana :)
Yo me he hecho un método numérico que desde el punto inicial muestrea los alrededores y busca el punto con valor mínimo, y desde ahí traza un rayo (muestrea con paso pequeño) buscando en esa línea el mínimo. Cuando empieza a subir se detiene, y se posiciona en ese punto, y vuelve a hacer lo mismo, así hasta que logro encontrar el mínimo. Y todo con un poco de números aleatorios, para que no se quede nunca en ningún ciclo, y escalando, para que converja más rápido.

Pero eso te sirve para encontrar mínimos locales de las funciones, cosa que puedes hacer perfectamente (y mucho mejor) ploteando las funciones :) Además, creo que no buscas el mínimo local de una función específica, sino un punto intermedio... ¿Con qué criterio? Ahí tendrías que hacerte un algoritmo que logre el criterio que deseas :)