/ / ¿Qué significa físicamente 'Constrviolation' en la salida de fmincon de Matlab? - Matlab, optimización, restricciones, optimización no lineal

¿Qué significa físicamente 'Constrviolation' en la salida de fmincon de Matlab? - Matlab, optimización, restricciones, optimización no lineal

Estoy usando el fmincon Funcionar en Matlab. He estado tratando de averiguar qué significa "contrucción" cuando ejecutas la función y la salida de llamada. Cuando obtienes una solución no viable o el finalizador prematuro, obtienes una interpretación distinta a cero (y no entera).

Puse en una captura de pantalla para referencia. enter image description here

He buscado la documentación y lo dice.significa "Máximo de funciones de restricción" y no tengo idea de lo que eso significa. No es un número entero, por lo que mi primera suposición fue que se trata del porcentaje de restricciones violadas (o satisfechas).

Cualquier ayuda sería apreciada.

Respuestas

0 para la respuesta № 1

Solo interpretando los documentos dados. algunos Fondo de optimización:

la construcción

Maximum of constraint functions

Esto es solo el máximo de todos los errores absolutos de función de restricción

Ejemplo:

x0 + x1 = 1
x0 + x1 + x2 = 2

De alguna manera la solución es:

x = [0.6, 0.5, 0.9]

La construcción es:

max( abs( 0.6 + 0.5 - 1 ), abs( 0.6 + 0.5 + 0.9 - 2 ) ) = max( 0.1, 0 ) = 0.1

Esto es malo y técnicamente significa: ¡tu solución es inviable! (debe converger a cero; por ejemplo, 1e-8)

Como el solucionador no finalizó con mucha gracia, no puede darle un estado real sobre el problema (posible frente a inviable).

Podría ser valioso agregar: ¡Los algoritmos de punto interior (como los que se usan aquí) podrían (algunos lo hacen, otros no) iterar a través de soluciones no factibles y finalmente finalmente converger a uno factible (si existe)!

Tambien malo:

Firstorderopt

 Measure of first-order optimality

¡Debería converger a cero también (por ejemplo, 1e-8)! No logrado en tu ejemplo!

Ahora hay muchas razones posibles por las que esto está sucediendo. Como no proporcionó ningún código, solo podemos adivinar (y no estaremos contentos con eso).

Probablemente hayas alcanzado algún límite de iteración como MaxFunctionEvaluations o MaxIterations. La relación de funcCount y iterations ¡Parezca una diferenciación numérica, que puede aumentar el número de funciones que se llaman!