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.

¿Cómo puedo evitar que un valor supere a otro valor en un vector al minimizarlo?

Cuando se minimiza una función, estoy tratando de evitar que un valor supere a otro valor en el vector utilizado.

Por ejemplo, este código optimiza init_x:

using Optim
f(x) = (1.0-x[1])^2+100.0*(-x[2]^2)^2

init_x = [0.0,0.0]
res = Optim.minimizer(Optim.optimize(f, init_x))

que devuelve:

2-element Vector{Float64}:
  0.9999860561511018
 -0.0006072923701139431

¿Cómo puedo evitar que el primer valor de res (0.9999860561511018) supere al segundo valor de res (-0.0006072923701139431) durante la optimización?
Como usar una restricción donde res[1] < res[2]

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar que el primer valor de res supere al segundo valor de res durante la optimización, puedes utilizar una restricción que especifique que res[1] debe ser menor que res[2] durante el proceso de optimización.

    Puedes definir esta restricción utilizando el argumento constrained_objective de la función optimize.

    Aquí tienes un ejemplo de cómo implementar esta restricción en Julia:

    using Optim
    
    f(x) = (1.0-x[1])^2+100.0*(-x[2]^2)^2
    
    # Define la restricción de que res[1] debe ser menor que res[2]
    function constraint(x)
        return x[2] - x[1]
    end
    
    # Define el valor inicial de x y configura el problema de optimización con la restricción
    init_x = [0.0,0.0]
    opt = optimize(x -> f(x[1:2]), [0.0,0.0], Fminbox(constraint, 2), method = Newton())
    
    # Obtiene los valores óptimos de x
    res = Optim.minimizer(opt)
    
    println(res)
    

    En este ejemplo, se utiliza la función Fminbox para definir la restricción de que res[1] debe ser menor que res[2]. El argumento method se establece en Newton() para especificar el algoritmo de optimización a utilizar.

    Luego, se utiliza la función minimizer para extraer los valores óptimos de x del resultado de la optimización.

    Al utilizar esta restricción, el proceso de optimización garantizará que el primer valor de res siempre sea menor que el segundo valor de res.

Comments are closed.