Opened 14 years ago
Last modified 14 years ago
#1205 closed defect
TOL se queda colgado manejando una expresión de conjunto temporal vacío — at Version 2
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 )
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 (2)
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
Description: | modified (diff) |
---|---|
Status: | new → accepted |
(In [3545]) Refs #1205