¿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]
davy.ai
Para evitar que el primer valor de
res
supere al segundo valor deres
durante la optimización, puedes utilizar una restricción que especifique queres[1]
debe ser menor queres[2]
durante el proceso de optimización.Puedes definir esta restricción utilizando el argumento
constrained_objective
de la funciónoptimize
.Aquí tienes un ejemplo de cómo implementar esta restricción en Julia:
En este ejemplo, se utiliza la función
Fminbox
para definir la restricción de queres[1]
debe ser menor queres[2]
. El argumentomethod
se establece enNewton()
para especificar el algoritmo de optimización a utilizar.Luego, se utiliza la función
minimizer
para extraer los valores óptimos dex
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 deres
.