Opened 15 years ago
Closed 15 years ago
#771 closed defect (remind)
Función Range de TimeSet
Reported by: | Iván Robles | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | Mantainance |
Component: | TimeAlgebra | Version: | 2.0.1 |
Severity: | blocker | Keywords: | |
Cc: |
Description
Buenas tardes,
estamos intendando generar el timeSet de las semanas en los que una serie tiene datos:
Para ello hacemos una serie que tiene datos en 2007 y 2009, 2008 omitido.
Nos hacemos el timeSet de una serie donde no es omitido con la función SerTms "timesetDatos ".
Después nos calculamos los lunes de las semanas que tienen algun dato "lunesSemanasConDato ".
Por ultimo creamos un timeSet con Range todos los dias de la semana de las semanas que tienen dato.
Esta última instrucción nos rellena correctamente las semanas de 2007 y 2009, pero los años anteriores y posteriores solo nos deja los lunes, no semanas completas
Serie seriesOrig = Log(SetSumC(SetOfSerie( SubSer(2*CalInd(Y(2007),Diario),y2007m01d01,y2007m12d31), SubSer(2*CalInd(Y(2009),Diario),y2009m01d01,y2009m12d31)))); TimeSet timesetDatos = SerTms(Not(SerIsUnknown(seriesOrig))); TimeSet lunesSemanasConDato = Range(timesetDatos, -6, 0)*WD(1); TimeSet semanasConDatos = Range(lunesSemanasConDato, 0, 6);
Gracias,
Un cordial saludo
Change History (3)
comment:1 Changed 15 years ago by
Milestone: | → Manteinance |
---|---|
Status: | new → accepted |
comment:3 Changed 15 years ago by
Resolution: | → remind |
---|---|
Status: | accepted → closed |
En primer lugar lo malo no es que sólo deje los lunes lo malo es que los deja, cuando debería estar vacío fuera del intervalo de definición de la serie ya que esta no tiene datos fuera de su rango por ser una serie finita.
Por otro lado, efectivamente hay errores conocidos al usar algunas expresiones del álgebra del tiempo sobre el resultado de aplicar la función SerTms a una serie finita, que es un conjunto acotado en un intervalo, y cuando se intenta acceder fuera del intervalo pueden ocurrir cosas raras.
La solución a este problema interno, y un conjunto de problemas relacionados, no es en absoluto trivial, y aún menos si se pretende mantener el nivel de eficiencia actual del álgebra del tiempo. Ya lo estuve intentando durante meses sin dar con ella, pero sí que puedo ofrecer algún parche para sobrellevarlo.
Lo más sencillo es añadir sendos valores falsos en dos fechas fuera del intervalo: una lo bastante anterior y otra lo bastante posterior a las fechas de trabajo para que no interfieran con los resultados. Por ejemplo, siguiendo con el caso propuesto, si en nuestro proyecto no tenemos ningún dato anterior a 2001 ni posterior a 2011 podemos hacer lo siguiente
Si con esto os podéis apañar dejaré el ticket como "remind" por si alguna vez hay tiempo de atacar estos problemas.