Opened 15 years ago
Closed 14 years ago
#892 closed doubt (fixed)
Using a SigmaWeight = 0
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | BSR | Version: | |
Severity: | major | Keywords: | |
Cc: |
Description
En algunos ejemplos al utilizar un sigmaWeight igual a 0, se encuentran errores inesperados.
Observando el código en: _sigmaBlock.tol (líneas 167 en adelante) se observa que el comportamiento límite cuando w->0
no coincide con w==0
ya que m0->1
en lugar de m0->0
por el uso de la función Max(1,...)
(línea 181).
La duda está en si hay algo mal en esto, o si por el contrario hay una razón para ello. También surge la duda si esto explica los errores encontrados cuando se pide que la sigma2 inicial no tenga ninguna influencia (sigmaWeight=0).
¿Hay algún sitio donde se detalle cómo es el proceso de muestreo de la sigma2 y la influlencia y el significado de este sigmaWeight?
Change History (2)
comment:1 Changed 15 years ago by
comment:2 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
La explicación está en el punto 3.3, página 24 del manual de BSR
En la línea 181 lo que hay es esto:
Lo que se pretende es que si no se ha puesto explicitamente
w==0
sino un0<w<1
no se obtenga unm0==0
por culpa del redondeo. De esta forma se toma al menosm0=1
en el peor de los casos, para que el a priori tenga algún efecto por pequeño que sea, pues entiendo que eso estará más cerca de lo que pretendía expresar el usuario. Lo que sobra es el {{ If(!(sumSqr::m), 1 }}} puesto que igualmente daría 1 de todas formas. Eso es un residuo de un primer parche.Ahora que me doy cuenta también habría que hacer un tratamiento especial en los valores demasiado cercanos a 1, pues si a alguien se le ocurriera establecer un
w = 0.99999999999999999
, debido al uso de la aritmética discreta tendríamos unw/(1-w)
infinito y cascaría todo; algo que por otra parte se merecería que le pasara al que lo escribiera, por retorcido, jeje. Pero bueno, para evitarlo basta con tomar internamentew=Min(w,1-Epsilon)
cuandow<1
El caso
w==0
en cambio no es opinable, significa de forma taxativa que el usuario no quiere aportar ningún tipo de a priori y hace lo que tiene que hacer, así que si hay algún error puede ser por dos cosas que se me ocurran ahora mismo:Si me pasas algún ejemplo en el que ocurra uno de esos errores inesperados podría analizar en qué caso estamos.