Novedades de la versión 1.1.6


Tags:

Este artículo enumera las características y ventajas de la versión v1.1.6, el objetivo no es documentarlas exhaustivamente, más bien proporciona simplemente una descripción de las características para los programadores de Tol.

El lanzamiento final de Tol 1.1.6 fue hecho el 13 de noviembre de 2007.

Resolución de bugs

Existe un informe detallado sobre el estado actual de los bugs de TOL, que puede resumirse así:

  • Desde la puesta en marcha del desarrollo tras la publicación de la versión 1.1.5, se han resuelto los siguientes 45 errores de TOL
  • Permanecen pendientes de resolución 10 errores de TOL.
    Pulse aquí para ver los que continúan actualmente en dicho estado.
  • Están postergados 19 bugs de TOL para decidir sobre qué hacer en cada caso.
    Pulse aquí para ver los que continúan actualmente en dicho estado.

Cambios internos reseñables

Los siguientes cambios introducidos en la implementación interna de TOL, le proporcionan una mayor robustez y eficiencia con respecto a la versión 1.1.5, con ahorros de entorno a un 25% de CPU que pueden alcanzar el 50% o más según el tipo de código ejecutado, tal y como se puede observar en el informe de evolución de TOL.

  • Se han reemplazado los buscadores internos como mapeador ad-hoc de la tabla de símbolos globales, y los buscadores de funciones especiales, estructuras, gramáticas, etc.; por el hash_map de Google que introduce mayor limpieza y rapidez en los accesos
  • Se ha acelerado el mecanismo de asignación de memoria de objetos pequeños que son la mayoría en la evaluación de TOL.
  • El tipo BDat para representar números reales se ha simplificado y homologado con el tipo double de C para facilitar su uso interno y en llamadas a librerías externas como la GSL, BLAS, etc.; al poder usar el casting directo en lugar de funciones de transformación mucho más lentas.
  • Se reducen las construcciones de objetos static en la línea de declaración C++ para evitar problemas con el orden de creación de los mismos en la carga inicial, lo cual producía a menudo errores muy difíciles de detectar.
  • Se han corregido algunos errores de tipo memory leak reduciéndose el consumo de memoria en determinadas circunstancias sobre todo en ciertos ciclados largos.

Kernel

  • Cuando el resultado de evaluar la condición de las funciones If y Case da desconocido se interrumpe la evaluación y se devuelve el objeto desconocido correspondiente al tipo de datos a devolver.
  • La función Parser devuelve ahora información acerca de los paréntesis de la expresión original en cada token para permitir la creación de la función pseudo-inversa Unparse.
  • La función Text Grammar(Anything) devuelve "Struct" si se le pasa una estructura.
  • Se ha implementado, aunque está aún en periodo de pruebas, un nuevo tipo de datos llamado NameBlock que pronto será de vital importancia en el desarrollo de TOL. Para saber más acerca de este tema pulse aquí.

StdLib

La librería estándar de TOL pasa a llamarse StdLib desapareciendo la hasta ahora InitLibrary a la cual incluye por el momento de forma íntegra para asegurar la compatibilidad hacia atrás. En próximas versiones la StdLib debe alcanzar un mayor grado de madurez y organización gracias a los NameBlock y otras ventajas en el campo de la modularidad que están aún pendientes.

StdLib incluye además otra serie de nuevas incorporaciones entre las que destacan

  • Estimadores bayesianos de modelos lineales, probit y ARIMA vectoriales, todos ellos con inputs jerárquicos, información a priori y restricciones lineales.
  • Un AIA más robusto que el que se proporciona built-in con TOL.
  • La función CheckTOLRelease chequea si existen nuevas versiones de TOL para Windows y avisa al usuario de TOLBase.
  • Nuevas funciones como HasUnknown, HasPosInf, HasNegInf, HasAllFinite, CheckBST, CheckBDT, CheckBMT, IncludeLocalTol, PlainNamedObjects, y un largo etcétera.

Álgebra de conjuntos

  • Nueva función Set Append(Set old, Set newElements) para añadir elementos de una forma más eficiente que con Set old := old << newElements
  • Nueva función Set EvalSetOfCode(Set funciones, Anything arg) que devuelve el conjunto de las evaluaciones sucesivas de un conjunto de funciones tomando el mismo argumento. Se trata de la función complementaria de EvalSet
  • Nuevo operador :: de acceso por nombre a elementos de un conjunto más cómodo de usar y con mejor apariencia que [""]
  • Nueva función Real SetIndexByName(Set s) para indexar los elementos de un conjunto tal que todos ellos tengan nombre único y no vacío. Una vez indexado las búsquedas con :: y [""] serán de complejidad O(1) por estar basado el índice en el hash_map de Google.

Aritmética real

  • Nuevas funciones Real IsPosInf(Real x), Real IsNegInf(Real x), Real IsFinite(Real x)
  • Nuevo comportamiento en comparaciones de desconocidos e infinitos:
    Ningún número por desconocido que sea puede ser mayor que +infinito, lo cual permite afirmar que

        ? >  +Inf == false; 
        ? <= +Inf == true; 

    Ningún número por desconocido que sea puede ser menor que -infinito, lo cual permite afirmar que

        ? <  -Inf == false; 
        ? >= -Inf == true; 

Álgebra lineal real

  • Nuevas funciones PreProdDiag y PostProdDiag para el producto virtual por matrices diagonales.
  • Nuevas funciones SubTriang y SetTriang para el almacenamiento optimizado de matrices triangulares.
  • Nueva función TrSolve basada en la función dtrsm BLAS (level-3) para la resolución eficiente de sistemas triangulares.
  • Nuevas funciones Matrix Sign(Matrix m), Matrix SetSum(Set s), Real MatMin(Matrix m), Real MatMax(Matrix m), .
  • Cuando Choleski no funciona muestra un mensaje de warning.

Interpolación y aproximación de funciones reales

Se han implementado API's para el uso en TOL de funciones de interpolación y aproximación de funciones reales

  • La API de GSL permite usar las funciones de interpolación de GSL mediante las funciones de generación escalar gsl_interp y vectorial gsl_vector_interp, con las cuales se crean a su vez funciones TOL que devuelven Real y Matrix respectivamente. Los tipos de interpolación admitidos son Lineal, Polinomial, Spline Cúbico y Spline Akima. Estos dos últimos pueden ser o no periódicos.
  • La API de AlgLib permite usar las funciones de interpolación y aproximación por mínimos cuadrados de AlgLib mediante las funciones de generación escalar AlgLib.Interp.Scalar y vectorial AlgLib.Interp.Vector, con las cuales se crean a su vez funciones TOL que devuelven Real y Matrix respectivamente. Los tipos de interpolación admitidos son Lineal, Racional Baricéntrica, Spline Cúbico y Spline Akima mientras que los de aproximación por mínimos cuadrados pueden ser Spline, Chebychev o Polinomial. AlgLib es en general más eficiente que GSL tanto en CPU como en RAM y además permite almacenar toda la información necesaria en OIS con la función AlgLib.Interp.Vector.CreateWorkSpace. Para restaurarla posteriormente se emplea AlgLib.Interp.Vector.LoadWorkSpace.

Funciones de Estadística y Probabilidad

  • Se han corregido los estadísticos R2, de Pearson y de correlación parcial
  • Nueva función UniKerDnsEstOptBnw, abreviatura de Univariate Kernel Density Estimation with Optimal Bandwith Un programa desarrollado por Vikas C. Raykar bajo la licencia Lessr GPL y disponible aquí.
  • Nueva función RandMultinomial basada en la función de GSL gsl_ran_multinomial.
  • Se ha mejorado de forma considerable el comportamiento, la variedad de argumentos admitidos y la documentación de la función GibbsConstrainedMNorm

Input/output

Acceso a bases de datos
  • Se han resuelto varios bugs especialmente relacionados con los tipos numéricos particulares
  • EN concreto, el tipo de datos MYSQL_TYPE_NEWDECIMAL está disponible para ser tratado adecuadamente desde TOL pero sólo para la versión del servidor de MySQL MYSQL_VERSION_ID >= 50024
Ficheros
  • Se ha aumentado de 16384 a 1048576 el tamaño límite por línea en ficheros BDT, BST y BMT. Cuando el tamaño se excede salta un mensaje de error para que se solucione y no pase desapercibido.
  • Las matrices en BMT pueden ya almacenar datos desconocidos y de diferente longitud de texto para cada celda
  • Nueva función MatAppendFile para añadir filas a una matriz en formato binario BBM
  • Nueva función MatReadCell para acceder a una celda concreta de una matriz en formato binario BBM
  • Corregido el error de campo final no delimitado en BDT's
OIS
  • Para las imágenes de módulos OIS con itegridad referencial (Ois.Module) ya se almacena la información del archivo de origen de cada objeto para que sea visible desde el interfaz de TOLBase.
  • Sólo se harán globales los símbolos que no creen conflicto. En cualquier caso se aconseja la carga en ámbito local siempre que se pueda.
  • Se han deshabilitado ciertos mensajes de aviso que sólo tienen importancia a nivel de depuración interna de TOL.
  • Si existe una variable de entorno del sistema operativo de nombre Ois.DefRoot, la variable TOL del mismo nombre tomará de ella su valor, para facilitar así la configuración personalizada más adecuada en cada caso sin tocar código TOL que pueda afectar a otros usuarios.

Languages

Inicio de sesión de usuario

sponsored by

profit.pngminitc.png

Distribuir

Distribuir contenido