es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inestabilidad Numérica en Optim.jl

Actualmente estoy trabajando en un proyecto en Julia donde comienzo con una entrada beta que se supone que es incorrecta. Estoy ejecutando una secuencia de código que actualiza este beta para que sea el valor correcto y verificando el error. A medida que beta aumenta, espero que este error alcance el 100%. Este código finalmente realiza una minimización de algún parámetro chi, por lo que he elegido emplear la función optimize de Optim.jl. El resultado que obtengo es el siguiente.

Cuando realizo este cálculo manualmente (usando la primera y segunda derivada para actualizar), obtengo esto.

Veo que esto todavía tiene cierta inestabilidad numérica, pero se mantiene durante más tiempo que la forma Optim. Esperaría que fuera al revés. Mi función optimize está configurada como

result = optimize(β -> TEfunc(E,nc,onecut,β,pcutoff,μcutoff,N),β/2,2.2*β,Brent(),abs_tol=tempcutoff,rel_tol=sqrt(tempcutoff))

βstar=Optim.minimizer(result)

¿Hay algún argumento que me esté faltando en la llamada a optimize? Solo quiero entender por qué tengo una inestabilidad numérica tan rápida.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás experimentando cierta inestabilidad numérica en tu proceso de optimización, y estás observando un comportamiento inesperado con la función optimize de Optim.jl. Una cosa a tener en cuenta es que la función optimize tiene muchos algoritmos de optimización diferentes que pueden ser utilizados, cada uno con sus propias fortalezas y debilidades.

    Actualmente estás utilizando el método Brent(), que es una buena opción inicial para problemas de optimización univariante, pero puede que no siempre sea el método más estable o preciso. Podría valer la pena probar otros métodos, como GoldenSection() o NelderMead(), para ver si producen resultados más estables.

    Además, es posible que desees ajustar los parámetros de tolerancia (abs_tol y rel_tol) para que sean más estrictos, especialmente si encuentras que el error alcanza el 100%. Esto puede ayudar a asegurar que el proceso de optimización sea más preciso y estable.

    Finalmente, es posible que desees considerar agregar alguna verificación adicional de errores o depuración a tu código de optimización, como imprimir valores intermedios o verificar el valor de la función en cada paso. Esto puede ayudarte a comprender mejor de dónde proviene la inestabilidad y cómo solucionarla.

Comments are closed.