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

#1205 closed defect (fixed)

TOL se queda colgado manejando una expresión de conjunto temporal vacío

Reported by: Víctor de Buen Remiro Owned by: Víctor de Buen Remiro
Priority: highest Milestone: Mantainance
Component: TimeAlgebra Version: head
Severity: blocker Keywords:
Cc: palmagro@…

Description (last modified by Víctor de Buen Remiro)

La siguiente expresión deja colgado a TOL durante horas aunque al final acaba dando un mensaje de warning:

TimeSet ConfUniversal        = D(1)*M(1) - WD(7);
TimeSet Tiradentes           = D(21)*M(4) - WD(7);
TimeSet DiaDoTrabalho        = D(1)*M(5) - WD(7);
TimeSet IndepBras            = D(7)*M(9) - WD(7);
TimeSet NossaSenApar         = D(12)*M(10) - WD(7);
TimeSet Finados              = D(2)*M(11) - WD(7);
TimeSet ProclamacaoRepublica = D(15)*M(11) - WD(7);
TimeSet Natal                = D(25)*M(12) - WD(7);
 
TimeSet TercaCarnaval = Succ(Easter,-47);
TimeSet Paixao                = Succ(Easter,-2);
TimeSet Corpus   = Succ(Easter,60);
 
TimeSet ConcienciaNegra      = D(20)*M(11) - WD(7); // Municipal SP
TimeSet CidadeSaoPaulo       = D(25)*M(1) - WD(7);  // Municipal SP
TimeSet RevolConst           = D(9)*M(7) - WD(7);   // Estadual SP
TimeSet FinA = D(31)*M(12) - WD(7);   //no es festivo, posiblemente la gente trabaja, pero tiene comportamiento similar al festivo.


TimeSet festivos = ConfUniversal  + FinA       +Tiradentes+DiaDoTrabalho 
       +IndepBras            +NossaSenApar         +Finados             
 +ProclamacaoRepublica +Natal                +TercaCarnaval +Paixao               
 +Corpus   +ConcienciaNegra      +CidadeSaoPaulo       +RevolConst + FinA;  
 
TimeSet festivodomingo = festivos * WD(7);
Serie Diafestivodomingo = CalInd(festivodomingo, Diario);

El problema es que festivos carece de domingos por construcción por lo que festivodomingo es el conjunto temporal vacío pero TOL no lo sabe ni hay forma de que lo sepa. Al intentar calcular el sucesor de una fecha en la intersección no hay otra forma que ver si el sucesor en el primero pertenece al segundo o viceversa y en caso contrario continuar sucesivamente, lo cual en este caso es para siempre jamás pues nunca encontrará un sucesor.

En cambio, esta otra expresión del mismo tipo

TimeSet festivodomingo = WD(3) * WD(7);
Serie Diafestivodomingo = CalInd(festivodomingo, Diario);

da el mensaje de forma inmediata

Warning: [1] BTmsIntersection::Successor ha sido abortado porque se ha salido del rango de cálculo 10000 veces para el TimeSet $tmp$ operando entre las fechas [y2011m01d01,y2203m09d07]
Se asumirá en los resultados el comportamiento de TimeSet acotado.

Aunque TOL no puede asegurar que no vaya a existir un sucesor más adelante considera sospechoso haber sobrepasado los 10000 intentos sin conseguirlo.

Hay que ver porqué no ocurre en el primer caso o encontrar otro criterio de parada más eficaz.

Change History (7)

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

(In [3545]) Refs #1205

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

Description: modified (diff)
Status: newaccepted

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

(In [3546]) Refs #1205

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

(In [3547]) Refs #1205

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

Cc: palmagro@… added

El motivo por el que tarda tanto es que hay expresiones dependientes de Easter que ocurre una vez al año, por lo que para que se pase 10000 veces del intervalo de cálculo hay que evaluar 10000 años todas las expresiones involucradas lo cual lleva demasiado tiempo.

Podríamos pensar que 10000 iteraciones infructuosas es un margen excesivo, pero el problema es que en otros lugares podría haber un fechado minutal en el que 10000 iteraciones se alcanzan en una semana.

Para poder ser más flexibles, lo que se ha hecho es añadir un margen dependiente de las fechas por defecto actuales, de forma que si se alcanza una fecha a una distancia de 100 veces el rango de ese intervalo por defecto, tanto por delante como por detrás, entonces salta también el mensaje y se aborta el cálculo.

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

(In [3554]) Refs #1205
Recovering a certain level of lazy behaviour in time series algebra.
ForceCache of related Ttime sets are not called on constructors of CalInd and other functions

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

Resolution: fixed
Status: acceptedclosed
Note: See TracTickets for help on using tickets.