Esta pregunta está relacionada con el libro de "recetas numéricas en C++", por lo que se reservará para personas que conozcan un poco sobre él y sobre optimización multidimensional.Recetas numéricas/Búsqueda de raíz multidimensional (uso de tritón): Cómo minimizar el error máximo
Estoy escribiendo un programa que necesita buscar una raíz multidimensional, y para resolverlo, estoy usando el método multidimensional de descubrimiento de la raíz de newton, es decir, el procedimiento "newt".
Para aquellos interesados en los detalles, estoy tratando de adaptar un modelo 3D deformable a una vista estereoscópica de un objeto, basado en algunos puntos característicos (puntos característicos que son vistos por dos cámaras).
Por esto, yo estoy usando el procedimiento tritón con lo siguiente:
- 11 Parámetros de entrada: mi modelo deformable puede ser modelado con 11 parámetros (compuesta por 5 parámetros geométricos y 6 deegres de libertad para la ubicación del objeto 3D):
- 14 Parámetros de salida para los que necesito encontrar la raíz: en función de los puntos característicos identificados por la cámara, y dado un conjunto de "parámetros de entrada", puedo calcular un conjunto de distancias entre los puntos característicos vistos por la cámara y su teórico catión. Tengo 7 de esos puntos, entonces eso me da 14 parámetros (7 distancias por 2, ya que calculo las distancias en ambas cámaras)
Mi problema es que tengo más parámetros de salida (14) que los parámetros de entrada (11): cada vez que llamo "newt", el algoritmo siempre converge, sin embargo, encontrará una solución que minimiza casi a la perfección los 11 primeros parámetros de salida, pero que tiene muchos errores en los 3 parámetros restantes.
Sin embargo, me gustaría que los errores se dividan de manera uniforme entre los parámetros de salida.
ya Probé los enfoques descritos a continuación:
- tratar de combinar los parámetros de salida 14 en 11 parámetros (por ejemplo , se toma el promedio de algunas distancias, en lugar de utilizar ambas distancias). Sin embargo no estoy 100% satisfecho con este enfoque
- mezclar varias soluciones con el siguiente principio:
- mnewt llamadas y memorizar el encontrado raíz
- Cambiar el orden del parámetro 14 de salida
- Calling mnewt una y otra memorizar la raíz encontrada
- calcular una solución es el promedio de las dos raíces se encuentran
¿Alguien sabe de un enfoque más genérico, en el que el algoritmo de búsqueda de raíz favorecería un error que se divide uniformemente entre los parámetros de salida, en lugar de favorecer los primeros parámetros?
¿Por qué no configurar una sola "métrica de distancia", p. suma de distancias cuadradas en todos sus 7 puntos de característica, y luego ejecute alguna rutina de optimización. Levenberg-Marquardt parece apropiado. –
Lo intenté ya, y fue un fracaso. Si lees la optimización multidimensional del libro NR, verás (y les creo) que es una mala idea tratar de transformar una búsqueda raíz multidim en una búsqueda mínima (según tu sugerencia): terminas intentando minimizar una función que tiene * lotes * de mínimos locales y * lotes * de zonas planas en una dirección (es decir, el derivado de un componente es nulo: una pesadilla para los métodos tipo newton) –
Sin embargo, intentaré minimizarlo el punto de partida dado por newt. Tal vez sea menos propenso a converger a un mínimo local falso. –