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.

Opened 14 years ago

Closed 14 years ago

Last modified 13 years ago

#1306 closed task (fixed)

Overdispesed pseudo-uniform sampler under constraints

Reported by: Jorge Owned by: Víctor de Buen Remiro
Priority: high Milestone: Mantainance
Component: Math Version: 2.0.1
Severity: critical Keywords:
Cc:

Description

In order to initialize multiple MCMC is it needed a functionality which provide the sampling of multiple points dispersed over the constrained domain.

Attached to this ticket there is a paper which describe a method to generate a sample with the previous characteristics.

Attachments (1)

10.1.1.153.7868.pdf (332.4 KB) - added by Jorge 14 years ago.

Download all attachments as: .zip

Change History (17)

Changed 14 years ago by Jorge

Attachment: 10.1.1.153.7868.pdf added

comment:1 Changed 14 years ago by Víctor de Buen Remiro

Status: newaccepted

El método propuesto en 10.1.1.153.7868.pdf requiere resolver dos sistemas de ecuaciones en cada iteración (2.1.1 pág 5)

Hace tiempo que hice el diseño de un par de métodos que guardan cierto parecido con el propuesto para la generación de candidatos factibles en un politopo que sirven para cualquier distribución de probabilidad, lo cual incluye la uniforme, que es lo que se solicita aquí. Estos métodos son mucho más sencillos de implementar y resultan más prometedores y generales por lo que creo, que sería mejor empezar por alguno de ellos. Concretamente el Paseo aleatorio radial asimétrico sirve incluso para restricciones de desigualdad arbitrarias, no necesariamente lineales.

comment:2 Changed 14 years ago by Víctor de Buen Remiro

Estoy pensando que tanto el método del papel como los míos suponen matar moscas a cañonazos. Lo que se pretende es encontrar unos cuantos puntos factibles más o menos dispersos, para lo cual no es necesario generar una uniforme perfecta ni nada por el estilo. Basta con un paseo arbitrario que se mueva en direcciones aleatorias y a grandes pasos dentro del politopo. Para ello el radio de dispersión se multiplicará por cierto factor mayor que 1 cada vez que el punto generado esté dentro de la región factible y se dividirá por ese mismo factor cada vez que se salga de la misma.

En la siguiente figura se puede ver una cadena bidimensional de unos 500 puntos generados en centésimas de segundo con el casi trivial código del ejemplo FindArbitraryPointInPolytope.tol

source:/tolp/OfficialTolArchiveNetwork/BysSampler/test/test_0004/chart.png

Puede verse como el algoritmo tiende a cubrir toda la región factible más o menos por igual, aunque con cierta tendencia a acumular puntos en los vértices, lo cual no tiene la menor importancia para lo que se pretende hacer en este caso.

En medio segundo genera mil muestras con 100 variables y 150 restricciones y en 37 segundos para 1000 variables y 1500 restricciones.

comment:3 Changed 14 years ago by Víctor de Buen Remiro

Una vez tenemos una muestra dispersa como la del ejemplo se puede obtener una selección de unos pocos puntos lejanos entre sí siguiendo estos pasos:

  1. Se obtiene el primer punto como el centro de masas, o sea, la media aritmética de todos los puntos generados.
  2. Seleccionamos como segundo punto al más alejado del centro de masas.
  3. Seleccionamos como tercer punto el que dé máxima suma de distancias a los dos anteriores .1 Seleccionamos como k-ésimo punto el que dé máxima suma de distancias a los h anteriores, siendo h=Min(k-1,n) y n la dimensión del espacio

comment:4 Changed 14 years ago by Víctor de Buen Remiro

(In [3755]) Refs #1306

comment:5 Changed 14 years ago by Víctor de Buen Remiro

(In [3756]) Refs #1306

comment:6 Changed 14 years ago by Víctor de Buen Remiro

Summary: Uniform sampler under constraintsOverdispesed pseudo-uniform sampler under constraints

Una forma más sencilla de obtener puntos sobre-dispersos sería tomar el centro de masas de la muestra inicial y generar direcciones aleatorias para formar rectas radiales en las que buscar puntos alejados del centro dentro de esa recta.

comment:7 Changed 14 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: acceptedclosed

(In [3765]) Fixes #1306

comment:8 Changed 14 years ago by Víctor de Buen Remiro

(In [3766]) Refs #1306

comment:9 Changed 14 years ago by Víctor de Buen Remiro

(In [3767]) Refs #1306

comment:10 Changed 14 years ago by Víctor de Buen Remiro

(In [3768]) Refs #1306

comment:11 Changed 14 years ago by Víctor de Buen Remiro

Se ha creado una función general para generar cuasi-uniformes arbitrarias

VMatrix BysSampler::Mcmc.ConstrainedCuasiUniform (
  Code g, VMatrix x0, Real size, Real burnin, Real thinning);

Starting at a given feasible point, draws a Montecarlo Markov Chain from a cuasi-uniform distributed random variable under arbitrary constraining inequations g(x)<=0, where

  • g is a funtion declared as VMatrix g(VMatrix x)
  • x0 is the initial feasible point
  • size is the final length of the MCMC
  • burnin is the number of skiped initial points
  • thinning id the length of skiped internal intervals

Y también para el casi de politopos

VMatrix Mcmc.ConstrainedCuasiUniform.Polytope (
  VMatrix A, VMatrix a, VMatrix x0, Real size, Real burnin, Real thinning)

Starting at a given feasible point x0, draws a Montecarlo Markov Chain from a cuasi-uniform distributed random variable inside a polytope A*x<=a where

  • A is the matrix of coefficients of the polytope
  • a is the matrix of borders of the polytope
  • x0 is the initial feasible point
  • size is the final length of the MCMC
  • burnin is the number of skiped initial points
  • thinning id the length of skiped internal intervals

Por ejemplo, si queremos generar 5 puntos que estén dispersos podemos obviar los 100 primeros y luego tomar una de cada 50 iteraciones con esta sentencia:

VMatrix chain = BysSampler::Mcmc.ConstrainedCuasiUniform.Polytope(
  A, a, x0, 5, 100, 50);

source:tolp/OfficialTolArchiveNetwork/BysSampler/test/test_0004/chart.cuasi.uniform.png

comment:12 Changed 14 years ago by Víctor de Buen Remiro

(In [3776]) Fixes #1306

comment:13 Changed 14 years ago by Víctor de Buen Remiro

(In [3777]) Refs #1306

comment:14 Changed 14 years ago by Víctor de Buen Remiro

La combinación de dos nuevas funciones produce muestras sobre-dispersas de forma mucho más eficiente que un simple thinning.

  1. Muestrea un paseo aleatorio en una región g(x)<= 0 con tendencia hacia la frontera. En cada paso se genera una dirección aleatoria y se busca en ambos sentidos un número máximo maxTry de veces hasta toparse con la frontera mediante el método de la bisectriz ponderada. El tamaño de paso se ajusta en cada intento según el valor del argumento factor, multiplicando si no se ha alcanzado la frontera y dividiendo si se sobrepasa. Luego se genera el siguiente punto de forma aleatoria en el segmento pero con mayor probabilidad en los extremos cuanto más cercano a cero sea el argumento dispersionExponent. El caso dispersionExponent=1 correspondería de forma bastante aproximada a generar una uniforme en la región factible.
      VMatrix chain = { Mat2VMat(BysSampler::CppTools::DispersedRandomWalk
      ( 
        Code g, 
        VMatrix x0, 
        Real size = 500, Real burnin=0, Real thinning=1,
        Real factor=2.0, Real maxTry=5, Real dispersionExponent=0.02))
      };
    
  2. Extrae de una colección de puntos una selección de ellos que estén lo más alejados entre sí, empezando por el centro de masas.
      VMatrix overDispersed = { BysSampler::ExtractOverDispersed(chain, Real size=5) };
    

El resultado se puede ver en este ejemplo de dos dimensiones de forma muy intuitiva

source:/tolp/OfficialTolArchiveNetwork/BysSampler/test/test_0004/chart.overdispersed.png

comment:15 Changed 13 years ago by Víctor de Buen Remiro

(In [3899]) Refs #1306

comment:16 Changed 13 years ago by Víctor de Buen Remiro

(In [3904]) Refs #1306

Note: See TracTickets for help on using tickets.