close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Changes between Version 7 and Version 8 of OfficialTolArchiveNetworkBysInfDiag


Ignore:
Timestamp:
Oct 24, 2011, 9:45:04 AM (13 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OfficialTolArchiveNetworkBysInfDiag

    v7 v8  
    9393
    9494Hasta ahora los pasos para la simulación con BSR eran
    95  1. Crear la definición del modelo como un {{{Struct @BSR.ModelDef modelDef}}}
    96  1. Parametrizar la configuración como una instancia de {{{BysMcmc::@Config config}}}
    97  1. Crear el gestor del modelo BSR como una instancia de la clase {{{BysMcmc::@Cycler cycler}}}
    98  1. Crear el gestor de la estimación BSR como una instancia de la clase {{{BysMcmc::@Estim estim}}}
    99  1. Generar la cadena MCMC llamando al método {{{estim::Run}}}
    100 Si queremos generar múltiples cadenas, los 4 primeros pasos siguen siendo los mismos, salvo que en el paso 2 hay que guardar una copia de config para recuperar la configuración tras el proceso de mezcla
    101  1. Generar unos pocos puntos iniciales muy alejados entre sí
    102   1. Resetear el modelo llamando al método {{{cycler::Initialize}}}
    103   1. Generar un paseo aleatorio sobre-disperso en la región factible, es decir, con más probabilidad cerca de la frontera que en el interior.
    104   1. Extraer unos pocos puntos iniciales lo más alejados entre sí que sea posible partiendo del centro de masas.
    105   1. Cambiar los parámetros de configuración de las estimaciones locales para que
    106    1. no haga ''burn-in'' ni ''thinning'' estándar[[BR]]
     95 1. Preparación del modelo
     96  1. Creación de la definición del modelo como un {{{Struct @BSR.ModelDef modelDef}}}
     97  1. Creación de la configuración como una instancia de {{{BysMcmc::@Config config}}}
     98  1. Creación del gestor del modelo BSR como una instancia de la clase {{{BysMcmc::@Cycler cycler}}}
     99 1. Creación del gestor de la estimación BSR como una instancia de la clase {{{BysMcmc::@Estim estim}}}
     100 1. Generación de la cadena MCMC llamando al método {{{estim::Run}}}
     101Si queremos generar múltiples cadenas, la preparación del modelo sigue siendo igual, salvo que en el paso 1.2 hay que guardar una copia de config para recuperar la configuración tras el proceso de mezcla.
     102 1. Preparación del modelo ...
     103 1. Generación de unos pocos puntos iniciales muy alejados entre sí
     104  1. Reseteo del modelo llamando al método {{{cycler::Initialize}}}
     105  1. Generación de candidatos a puntos iniciales mediante un paseo aleatorio sobre-disperso en la región factible, es decir, con más probabilidad cerca de la frontera que en el interior.
     106  1. Extracción de {{{K}}} puntos iniciales lo más alejados entre sí que sea posible partiendo del centro de masas.
     107 1. Reconfiguración de las estimaciones locales para que
     108  1. no hagan ''burn-in'' ni ''thinning'' estándar[[BR]]
    107109{{{
    108110#!java
     
    110112Real config::mcmc.thinning  :=  0;
    111113}}}
    112    1. no haga la diagnosis ni los informes de resultados usuales[[BR]]
     114  1. no hagan la diagnosis ni los informes de resultados usuales[[BR]]
    113115{{{
    114116#!java
     
    117119Real config::do.linear.effects  :=  False;
    118120}}}
    119  1. Para cada punto inicial {{{x0[k]}}} generar de forma independiente una cadena MCMC  de la distribución a posteriori
    120   1. Resetear el modelo llamando al método cycler::Initialize
    121   1. Asignar el punto inicial con la sentencia {{{Real cycler::_.sampler::setStore(x0[k]);}}}
    122  1. Crear el k-esimo gestor de la estimación BSR como una instancia local de la clase BysMcmc::@Estim local_estim
    123  1. Generar la k-esima cadena local MCMC llamando al método {{{local_estim::Run}}}
    124  1. Devolver la cadena llamando a {{{ cycler::loadFullMcmc(?) }}}
     121 1. Para cada punto inicial {{{x0[k], k = 1 ... K}}} se genera de forma independiente una cadena MCMC para la distribución a posteriori
     122  1. Reseteo del modelo llamando al método cycler::Initialize
     123  1. Asignación del punto inicial con la sentencia {{{Real cycler::_.sampler::setStore(x0[k]);}}}
     124  1. Creación del k-esimo gestor de la estimación BSR como una instancia local de la clase BysMcmc::@Estim local_estim
     125  1. Generar la k-esima cadena local MCMC llamando al método {{{local_estim::Run}}}
     126  1. Retorno de la cadena llamando a {{{ cycler::loadFullMcmc(?) }}} para evitar pisarla en el disco.
     127 1. Chequeo de convergencia de las cadenas correspondientes a una misma variable. En principio el método es para comparar dos muestras. En principio, para extenderlo a más de dos muestras, habría que aplicarlo a todos los {{K*(K-1)/2}}} pares posibles pero eso podría suponer demasiado trabajo, por lo podría ejecutarse sobre un conjunto representativo de pares elegidos aleatoriamente, que podrían ser entre {{2*K}}} y {{4*K}}} pares.
     128 1. Burn-in individualizado de cada cadena
     129 1. Mezclado de las partes no quemadas por concatenación simple.
     130 1. Reporte de de resultados sobre la cadena conjunta
    125131
    126132== Generación en paralelo con BSR ==
    127133
     134En problemas grandes puede ser interesante utilizar una máquina para la generación de cada cadena.
     135Como no es necesario un alto nivel de comunicación entre los distintos procesos involucrados no habría ningún problema en que ésta se desarrollara vía ficheros, pues lo único que habría que hacer sería almacenar el objeto {{{cycler}}} serializado en un fichero {{{cycler.oza}}} que pudieran leer todas las máquinas servidoras, las cuales guardarían las cadenas en ficheros {{{mcmc.k.bbm}}}
    128136
     137Pero no sólo sería posible paralelizar las MCMC de la distribución a posteriori, si fuera necesario, también sería posible hacerlo en estos puntos
     138 * En el paso 2.2 de generación de candidatos sobre-dispersos a puntos iniciales que luego habría que mezclar en una sola matriz para la extracción del punto 2.3.
     139 * En el paso 5 de chequeo de la convergencia se pueden dividir los pares de cadenas seleccionadas para que el chequeo se hiciera en varias máquinas a la vez. Sólo habría que recolectar los resultados finales en un lugar preestablecido.
    129140
     141=== Monitorización de convergencia en paralelo ===
     142
     143En el caso de generación en paralelo existiría la posibilidad de que el chequeo de la convergencia lo ejecutara un proceso aparte desde el ''master'' que fuera leyendo cada cierto tiempo las cadenas generadas hasta el momento por cada ''slave'' en sus respectivos archivos {{{mcmc.bbm}}}. Una vez leídas se procedería a chequear la convergencia y en caso positivo se ejecutaría un test de tipo Raftery sobre la cadena conjunta ya quemada, para establecer si la longitud total de la muestra es suficientemente significative y, si efectivamente es así, comunciar a los procesos de alguna forma que ya pueden parar de simular. Luego sólo restaría volver a leer las cadenas para incluir las simulaciones realizadas entre tanto para finalizar con los últimos dos puntos de mezclado y reporte.
     144