Esta página está en construcción: perdonen los errores, repeticiones y temas inacabados.
 
This page is being developed: I am sorry for errors, duplications  and unfinished subjects.
 
 
Proyecto Danzante. Optimización II. Desglose de operaciones. JCISER (incluido en Danzante)
 
Vamos a aclarar las operaciones matemáticas necesarias para implementar las expresiones matriciales que se ofrecen en Esquema general de la aplicacion.JCISER. Y el criterio en su desarrollo allí anunciado, y sus etapas:
a.   ▼J2 (X)  ∙  d  =  - ▼J (X)        
 
b.    X   <-   Xanterior   +   τ d     con d optimizado linealmente (factor) en iteración Newton  { pi*}new= { pi*} +    dp                 
            
Recordamos que hemos llamado
 
 j0 ({ pi*})    wiA|| pi* -  pi || 2 + wiB|| pi*  -  (Rqi + t ) || 2              
 
 J0 ({ pi*})  Σi ε Sa   wiA|| pi* -  pi || 2 + wiB|| pi*  -  (Rqi + t ) || 2  
 
M = Σi,j ε Sa   ( || pi* -  pj ||   - Li,j ) 2
 
Por definición,    J   =   J0  +  λ  M ,  y  derivando la ecuación una vez y dos veces (Derivadas vectoriales),
 
J '    =   J0 ' +  λ  M '        J ''   =   J0 '' +  λ  M ''   =   J0 ''    pues   M '' = 0   por no se qué  de cosa linael *********
 
y llamando

       bλ =  - M            Λ =  {  δ/ δ p*i M)                bp =  { -   δ/ δ p*i  J0 )          hi =  δ2/ δ p*i2  j0i  

       encontramos            
 
 J0 ''  ∙  d  =  -  (J0 ' +  λ  M ' )  =   bp   -  λ   Λ
 
 hi  ∙  d   +  λ  Λ i   =  bp i  
 
 Λ i  ∙  d     bλ  
 
Pero recordando que, según vemos en
 
Δ f = (  δ f/ δ x  )Δ x +  (  δ f/ δ y  ) Δ y +  (  δ f/ δ z  ) .  Δ z

Los sumatorios han de referirse tambien a las tres coordenadas espaciales, mejor dicho, ha de haber dos sumatorios, el externo sobr ela atrticulaccion i y el interno sobre las tres coordenadas y compentes del vector i.
 
(corr)
 
 
'...................................................................
 
'...................................................................
J /d =  J0 /d  +  λ  M / /d            ∆(∆J / /d ) //d   =     2J0  / d2        
????
'...................................................................

sumando:

Ello nos conducía (demostrar)   
 |  H    ΛT | | dp | =  | bp  |
 Λ    0  λ  bλ
o sea:

H d+ λ  ΛT  =  bp             ,      Λ dp  =  bλ                                    (1)

o más cuidadosamente escrito, considerando que todos los vectores son fila y sus transpuestos columna, y las propiedades generales del producto de matrices y vectores;   

  [   ]  m,n  x [   ] n, p   =  [   ] m, p   nemotécnicamente:    m,(n x n) , p  =  m, p

  H dp T+ λ  ΛT  =  bpT                                 <->    {  h i  dp i + λ  Λ i  =  bp i  }     n  (=20) ecuaciones     (  m,m  .  m,1  =  m,1

  Λ dp T =  bλ     estrict.   Λ dp T =   bλ     <->      Σi  ( Λ i d p i )   =  bλ            1 ecuación             (  1,m  .  m,1  =  1,1)

De la primera:    d p i  = ( bp i  -  λ Λ i )  /  h i          y, multiplicando por Λ i ,        Λ i dp i  =  Λ( bp i  -  λ Λ i )  /   h i    

y, sumando sobre i , por la segunda ecuación (1): 

bλ  = Σi Λ i d p i  =  Σ Λ i ( bp i  -  λ Λ i   )  /   h i  = Σ ( Λ i  bp i / h i  -  λ Λ i2 / h i )   Σi  (Λ i  bp i / h i  )  -  λ Σi Λ i2 / h i  

con lo que despejamos el número constante λ:

 λ  =  ( -  bλ +   ΣΛ i bp i / h i  )  /  ( Σi Λ i2 / h i  )     

y entonces cada componente     d p i  = ( bp i  -  λ Λ i ) / h i    o sea

d p i  =  bp i / h i -  λ . Λ i / h i     o, para cada articulación sumamos los aportes de sus tres coordenadas:

 d p i =  Σc  ( bp i c / h ic   )   -    λ .  Σc ic / h ic     )

(los cocientes  bp i c / h ic  y   Λ ic / h ic   ya fueron calculados antes, de modo que cabe alguna economía en computación)

como vimos. Todo ello es lo que corresponde a la expresión del artículo::

 λ = ( ΛH -1 bp  - bλ  ) / ( ΛH -1ΛT )        y          dp = H -1 ( bp  - ΛT λ )  

Pasando las derivadas parciales a cociente de incrementos, podemos eliminar el incremento de la variable que aparece en todas ellas, ya que lo hace dos veces, en numerador y denominador de los sumatorios y es constante (modulo de incremento de la variable, salto incremental):

         λ  =  (  M +   Σ M J i / ( 2M i  )  /  ( Σi (J i ) 2 / ( 2M i  ) 

.................................

corr     

 d p i =  (  Σ   J i  / ( 2M i  )  -   λ    Σ M J i / ( 2M i  )  /  ( Σi (J i ) 2 / ( 2M i  ) =

.........................

una de cuyas ventajas es el ahorro de operaciones, crucial en la velocidad.

Pero  d p i  =  bp i / h i -  λ . Λ i / h i     o sea  d p i =  Σc  ( bp i c / h ic   )   -    λ .  Σc ic / h ic     )   queda modificada,

d p i  =  bp i / h i -  λ . Λ i / h i     o sea  d p i =  Σc  ( bp i c / h ic   )   -    λ .  Σc ic / h ic     )

apareceinedo ahora

      y entonces, como antes, sin elimacion anterior, cada componente (vector en el espacio, 3 coordenadas) vale:    d p i  = ( bp i  -  λ Λ i ) / h

 
la implementacion de los sumatorios es en código fuente (VisualBasic):
For iiarti As Byte = 0 To 19
    deno1 = Λ(iiarti)
    λi = (Λ(iiarti) * bp(iiarti) - bλ) * H(iiarti)) / Λ(iiarti) ^ 2    
    'me ahorro un deno
    λi = (bp(iiarti) - bλ * H(iiarti) / Λ(iiarti)) / Λ(iiarti)
    λλ = λλ + λi
Next
Return λλ

Pero esa componente es un escalar, mientras que el desplazamiento (diferente para cada articulación) del esqueleto es un vector (20 componentes) de vectores espaciales (vector3D en VisualStudio). No hay más remedio que atribuir ese escalar al vector de incremento para obtener esas vectores derivadas Λ,  bp, h   (20 escalares Λ i  bp i  h i ). Y como esos incrementos y sus derivadas correspondientes se efectúan y calculan para cada coordenada por separado, así habrá que hacerlo en los cálculos anteriores. realizándonos no una sino tres veces, una por cada coordenada c, encontramos:

λ = (- bλc +  ΣΛ i c bp i c / h i c  ) / Σi Λ i c2 / h ic       y entonces cada componente     d p i c = ( bp i c -  λc Λ ic ) / h ic   

donde todas las cantidades y sumas se repiten para cada coordenada c (que puede tomar los valores x,y,x) por separado.

Contamos entonces no ya con un juego de todas los entes descritos sino tres para las coordenadas x, y, z . Y ello nos permite tres búsquedas lineales del tipo que introducimos ahora para el caso general del todas las coordenadas juntas. en los cálculos..

Nótese que el módulo de cada  d p i  (desplazamiento que sufre cada articulación i) es proporcional al salto o tamaño del vector incremental (pequeño para no 'pasarse' del mínimo) de modo que ahora procede una búsqueda de tipo Newton (line search) regulando el tamaño del vector que, a partir del incremental, aplicamos en cada etapa de esa búsqueda de una sola variable ahora. Lo que hemos llamado salto, τ en el artículo.

 { d pi+1 <==   d p  =   τ  .  d p increm

Mientras sigamos disminuyendo J1 iremos aplicando el mismo salto, pero si aumentamos, es decir, hemos rebasado el mínimo, reducimos el salto (a la mitad o al numero de oro para minimizar pasos), cambiamos el signo y volvemos a comprobar. Repetimos una y otra vez, y nos detenemos al bajar el modulo del salto vectorial por debajo de una cota. Que puede ser del orden de una décima de mm por ejemplo.

Este acercamiento lineal convierte las 60 variables que intervienen en el desplazamiento Dp en una sola: encontramos un camino directo al objetivo, el mínimo de la función. En un espacio 3D podemos acercarnos a un punto desde otro, bien sea coordenada por coordenada, bien encontrando primero el vector 3d que 'apunta' al destino. Entonces la búsqueda es lineal de una sola variable, que es el factor de escala  τ c de ese vector apuntante. Esta idea ya nos llegó al aproximar parejas de esqueletos o bloques de ellas: Gradiente Combinado: combinamos tres gradientes acercantes en cada coordenada,

Si ahora volvemos a los tres gradientes x,y,z, repetiríamos las búsqueda tres veces optimizando las coordenadas una a una, o bien combinadamente.

 { d pi c }  <>  d p c    =   τ c  .  d p c increm

 El problema es que la funciona a optimizar, J1, depende de lambda, que a su vez depende de la coordenada. Esto exige más meditación. Mientras tanto lo implementamos (la triple busca) para sacar luz de su comportamiento.
 
Hemos comprobado, comparando la triple búsqueda y la global, representada por la ecuación anteriror,
que es ésta última la correcta.
 
Veamos aquí Optimización. Algoritmo,  Optimizacion.JCISER  y  Derivadas vectoriales.JCISER y, sobre todo, Funciones a minimizar. Naturaleza.JCISER.
 
 
redactado el 14 de agosto de 2016
 

 
Vuelta al Principio    Última actualización: miércoles, 23 de noviembre de 2016    Visitantes:contador de visitas