ResoluciónEficientedeLazosAlgebraicosen GrandesSistemasDinámicos …kofman/files/tesina... ·...

72
Resolución Eficiente de Lazos Algebraicos en Grandes Sistemas Dinámicos Tesina de Grado Licenciatura en Ciencias de la Computación Autor: Emanuel Soria Legajo: S-3092/9 Director: Federico Bergero Co-Director: Ernesto Kofman Diciembre 2017

Transcript of ResoluciónEficientedeLazosAlgebraicosen GrandesSistemasDinámicos …kofman/files/tesina... ·...

  • Resolución Eficiente de Lazos Algebraicos enGrandes Sistemas Dinámicos

    Tesina de Grado

    Licenciatura en Ciencias de la Computación

    Autor: Emanuel SoriaLegajo: S-3092/9

    Director: Federico BergeroCo-Director: Ernesto Kofman

    Diciembre 2017

  • Dedicado a mi familia y a mi mujer que incondicionalmente me hanacompañado todos estos años ...

  • Resumen

    El modelado de sistemas dinámicos es un área que está teniendo cada vez másimportancia para el desarrollo de nuevas aplicaciones. Actualmente uno delos lenguajes más importantes para poder lleva a cabo esta tarea es Modelica.

    Modelica es un lenguaje orientado a objetos que representa los sistemasdinámicos mediante Ecuaciones Diferenciales Algebraicas(DAE) que luegotransforma en Ecuaciones Diferenciales Ordinarias(ODE) para realizar lasimulación.

    Los sistemas dinámicos pueden contener lazos algebraicos, esto es, ecua-ciones que deben resolverse conjuntamente, lo cual hacen que la transforma-ción de DAE a ODE tenga cierta complejidad. Esto se agrava en modelos degran tamaño, lo cual hace que sean muy difícil o prácticamente imposible deresolver debido a las ecuaciones repetitivas que este contiene.

    Aquí se presenta una metodología para lidiar eficientemente con sistemasdinámicos que contengan lazos algebraicos a gran escala descriptos comomodelos en Modelica. La metodología permite realizar la transformaciónDAE a ODE en el proceso de compilación sin expandir el contenido de lasestructuras repetitivas, obteniendo como resultado que los recursos utilizadospor el compilador sean independientes del tamaño del modelo.

  • 4

  • Índice general

    I Preliminares 7

    1. Introducción 91.1. Modelica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.2. Motivación y Objetivos . . . . . . . . . . . . . . . . . . . . . . 101.3. Trabajo Relacionado . . . . . . . . . . . . . . . . . . . . . . . 111.4. Organización . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2. Marco Teórico 132.1. Sistemas Dinámicos . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.1.1. Conversión DAE a ODE . . . . . . . . . . . . . . . . . 142.2. El lenguaje Modelica . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . 172.2.2. Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . . 212.2.4. Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . 212.2.5. Ecuaciones Repetitivas . . . . . . . . . . . . . . . . . . 232.2.6. Simulación de modelos Modelica . . . . . . . . . . . . 242.2.7. Modelos de gran escala . . . . . . . . . . . . . . . . . . 25

    2.3. El compilador ModelicaCC . . . . . . . . . . . . . . . . . . . 262.3.1. Aplanado . . . . . . . . . . . . . . . . . . . . . . . . . 262.3.2. Transformación a µ-Modelica . . . . . . . . . . . . . . 272.3.3. Causalización . . . . . . . . . . . . . . . . . . . . . . . 272.3.4. Optimización . . . . . . . . . . . . . . . . . . . . . . . 282.3.5. Generación de código y simulación . . . . . . . . . . . 28

    II Aportes Originales 29

    3. Resolución de lazos algebraicos en grandes modelos 313.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2. Idea básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.3. Estructura utilizada . . . . . . . . . . . . . . . . . . . . . . . 343.4. Procesamiento Previo . . . . . . . . . . . . . . . . . . . . . . 34

    5

  • 6 ÍNDICE GENERAL

    3.5. Grafo bipartito . . . . . . . . . . . . . . . . . . . . . . . . . . 353.5.1. Ecuaciones escalares . . . . . . . . . . . . . . . . . . . 363.5.2. Ecuaciones iterativas . . . . . . . . . . . . . . . . . . . 36

    3.6. Macronodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.6.1. Creación . . . . . . . . . . . . . . . . . . . . . . . . . . 383.6.2. Ordenamiento interno . . . . . . . . . . . . . . . . . . 383.6.3. Ordenamiento externo . . . . . . . . . . . . . . . . . . 39

    3.7. Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.8. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    4. Implementación 434.1. Función build_graph . . . . . . . . . . . . . . . . . . . . . . . 464.2. Función build_macro_nodes . . . . . . . . . . . . . . . . . . 474.3. Función resolve_internal_macro_node . . . . . . . . . . . . . 504.4. Función de ordenamiento externo . . . . . . . . . . . . . . . . 50

    5. Ejemplos 535.1. Modelo simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.2. Circuito RLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    6. Análisis de performance 636.1. Modelo simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.2. Circuito RLC . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.3. Análisis de los resultados . . . . . . . . . . . . . . . . . . . . . 64

    III Conclusiones y Trabajo a futuro 65

    7. Conclusiones 67

    8. Trabajo a futuro 69

  • Parte I

    Preliminares

    7

  • Capítulo 1

    Introducción

    Los sistemas dinámicos son sistemas que evolucionan a lo largo de unperiodo de tiempo. Éstos se modelan generalmente utilizando EcuacionesDiferenciales Algebraicas(DAE por su sigla en inglés). Para poder aplicar losdistintos métodos de integración numérica, es necesario realizar la causaliza-ción de las ecuaciones, esto consiste en transformar las DAE en EcuacionesDiferenciales Ordinarias (ODE por su sigla en inglés), es decir, se ordenanvertical y horizontalmente, de manera que el lado izquierdo de cada ecua-ción sea una incógnita y el lado derecho sea una expresión compuesta porvariables conocidas(presentes en alguna ecuación previa).

    En determinadas circunstancias, se presentan modelos en donde se debenresolver dos o más ecuaciones juntas, esto ocurre debido a que hay unainterdependencia entre ellas y ninguna puede resolverse antes que el resto;cuando esto ocurre hay un lazo algebraico presente.

    En varias aplicaciones, los modelos contienen conjuntos muy grandes deecuaciones tal como ocurre, por ejemplo, cuando involucran la discretizaciónespacial de las Ecuaciones Diferenciales Parciales (PDEs). En el contexto desistemas dinámicos de gran escala, la DAE puede contener lazos algebraicosque son partes de estructuras repetitivas que surgen de una descripción demodelos que contienen ecuaciones iteradas. Como el algoritmo de Tarjan [17]tiene complejidad lineal con respecto al número de ecuaciones e incógnitas,el proceso de causalización puede llegar a ser, computacionalmente, muycostoso.

    En esta propuesta se desarrolla un nuevo método, el cual utiliza unarepresentación vectorial del modelo, para hacer la transformación DAE aODE, de estructuras repetitivas que contienen lazos algebraicos evitandoresolver numerosas veces el mismo lazo algebraico. Al momento de escritura,en la literatura, no existe un algoritmo que siga este enfoque para hacer dichatransformación de forma eficiente.

    9

  • 10 CAPÍTULO 1. INTRODUCCIÓN

    1.1. Modelica

    Modelica es un lenguaje orientado a objetos, basado en ecuaciones acau-sales para representar sistemas complejos, y multi-dominio (con componen-tes que pueden ser mecánicos, eléctricos, electrónicos, hidráulicos, térmicos,etc.).

    Además de las características básicas de todo lenguaje orientado a ob-jetos, Modelica contiene herramientas específicas que permiten describir lasrelaciones constitutivas de los distintos componentes de cada modelo y lasrelaciones estructurales que definen la interacción entre dichos componentes.

    De esta manera, el lenguaje permite asociar cada componente de unsistema a una instancia de una clase de Modelica. Adicionalmente, los com-ponentes típicos de los sistemas de distintos dominios de la física y de latécnica pueden agruparse en librerías de clases para ser reutilizados. Exis-te una librería estándar de clases de Modelica, que contiene los principalescomponentes básicos de sistemas eléctricos, mecánicos (translacionales, ro-tacionales y multi-cuerpos), térmicos, state graphs, y diagramas de bloques.Otras librerías (disponibles en la web) contienen componentes de sistemashidráulicos, bond graphs, redes de Petri, etc.

    Los modelos Modelica son acausales. Esto significa que son modelos ba-sados en ecuaciones más que en asignaciones. La principal ventaja de estetipo de modelado es que la dirección de la solución de las ecuaciones es adap-table al flujo de datos del contexto en el que se computa. El flujo de datos sedefine estableciendo qué variables son necesarias como salidas y cuáles sonentradas externas al sistema simulado. La acausalidad de las clases de la bi-blioteca de Modelica las hacen más reutilizables que las clases que contienenasignaciones donde la causalidad entrada-salida es fija.

    Los modelos se describen, generalmente, mediante el acoplamiento demodelos más simples, pero también se pueden simular modelos a gran escalalos cuales están compuestos por grandes conjuntos de ecuaciones dentro debucles que relacionan arreglos de incógnitas.

    1.2. Motivación y Objetivos

    Cuando se desarrolla una nueva tecnología o cuando se están realizan-do cambios que traen mejoras a alguna tecnología existente, el ser humanonecesitó experimentar sobre sistemas reales para poder observar y analizardicho comportamiento.

    Hoy en día, experimentar sobre sistemas reales tiene ciertas desventa-jas, entre las cuales se destacan los grandes costos económicos, el tiemporequerido, la complejidad para desarrollarlo, etc.

    Gracias a la simulación, se pueden abaratar costos, reducir tiempos, redu-cir riesgos, tener control de los parámetros del sistema, escalar los tiempos

  • 1.3. TRABAJO RELACIONADO 11

    del mundo real a tiempos adecuados, entre otras ventajas. Esto es debidoa que los experimentos se realizan en modelos computacionales que luegose pueden aplicar en la vida real. Por dichas ventajas, la simulación pasóa ser un área de investigación muy relevante que va introduciendo mejorasconstantemente.

    A lo largo del tiempo los sistemas que necesitan ser simulados fueroncreciendo, esto hizo que su correspondiente costo computacional tambiénse incremente, para atacar este problema se fueron desarrollando nuevastécnicas de modelado.

    Este trabajo se encuentra enmarcado dentro del proyecto de investiga-ción “Modelado, Simulación y Control en Tiempo Real con Aplicaciones enElectrónica de Potencia” de la Universidad Nacional de Rosario. Uno de losobjetivos del proyecto es el desarrollo de un compilador para el lenguaje demodelado Modelica con los fines de investigar distintos algoritmos en relacióna modelos de gran escala.

    Actualmente, los modelos a gran escala con lazos algebraicos, son re-sueltos mediante técnicas pocos eficientes y muy costosas. Este problema sedebe a que necesitan expandir todo el modelo para luego poder resolverlo.Cuando el sistema es relativamente chico, esto no suele ser un problema,pero a medida que aumenta el tamaño, la complejidad espacial y temporalcrece linealmente. Esto hace que rápidamente el sistema sea muy costoso deresolver.

    El objetivo del presente trabajo es aplicar mejoras en la etapa de causa-lización de modelos a gran escala con sistemas que tienen lazos algebraicos.Se busco una nueva técnica en donde no sea necesario extender el modeloescrito de forma compacta, esto permitiría resolver el problema, una únicavez, para luego extender la solución al resto del modelo, permitiendo aho-rrar poder y tiempo de computo. Se trabajó sobre una nueva implementaciónque hace foco en este tema, se desarrolló un algoritmo que causaliza los gran-des lazos algebraicos sin expandir las estructuras repetitivas presentes en elmodelo lo cual hizo que pueda ser resuelto con una complejidad espacial ytemporal constante. Finalmente el algoritmo se probó sobre varios modelosde gran escala que poseen lazos algebraicos y se comparo su performancecontra soluciones existentes.

    1.3. Trabajo Relacionado

    Las dificultades en el procesamiento de modelos Modelica de gran escalaya ha sido reconocido previamente en diversos trabajos [3, 9, 8]. Algunasaproximaciones han sido propuestas en la literatura para lidiar con modelosde gran escala eficientemente [7, 1]. Éstas se basan en encontrar subestruc-turas comunes en el grafo de incidencia.

    Otro enfoque adoptado es el mostrado en [2] donde la idea es aplicar

  • 12 CAPÍTULO 1. INTRODUCCIÓN

    el algoritmo de Tarjan sobre un grafo vectorizado. Este algoritmo realiza lacausalización sin expandir las estructuras repetitivas lo que permite ahorrarrecursos de CPU y memoria. Dicha implementación aportó mejoras signi-ficativas a esta etapa del modelado, pero esta limitada. Esta limitación sedebe a que no puede resolver sistemas que contengan lazos algebraicos. Lossistemas que cuenten con lazos algebraicos deberán expandirse para poderresolverse comúnmente, lo cual hace que no puedan aprovecharse las mejorasofrecidas por dicho algoritmo.

    1.4. Organización

    En la Parte I se presenta el contexto en el que se desarrolló el trabajo.En la segunda sección se encuentra el marco teórico donde se introducen losconceptos básicos para la elaboración de la tesina, aquí en primer lugar seexplica los aspectos principales de los sistemas dinámicos luego se introducelos aspectos más importantes del lenguaje Modelica, también se explica lasetapas de simulación y conversión DAE a ODE. Finalmente, en el capítulo2.3 se describen los diferentes componentes que componen el compiladorModelicaCC.

    En la Parte II del trabajo se presentan los aportes realizados. En primerlugar, se hace una introducción explicando la idea básica sobre el funcio-namiento del algoritmo, luego se muestra la estructura que debe tener elmodelo y cada una de las etapas del mismo. En el capítulo 4 se encuentra laimplementación de las principales funciones, presentes en las etapas explica-das anteriormente. Se continúa con la resolución detallada de dos ejemplosen el capítulo 5. Luego, se lleva a cabo un análisis comparando el algorit-mo aquí desarrollado con el algoritmo clásico. Finalmente, se describen lasconclusiones y trabajos a futuro.

  • Capítulo 2

    Marco Teórico

    En este capítulo se introducen los conceptos que serán necesario para elresto de la tesina. Se comienza con sistemas dinámicos y la transformaciónde DAEs a ODEs. Luego, se profundizarán algunos conceptos del lenguajeModelica y finalmente se verá el compilador ModelicaCC.

    2.1. Sistemas Dinámicos

    Los sistemas complejos se modelan, generalmente, como el acoplamien-to de sistemas más simples. Todas las herramientas de modelado modernaspermiten describir sistemas simples en términos de ecuaciones elementalesy luego acoplarlas junto con la adición de algunas ecuaciones estructurales.Los modelos continuos se representan generalmente con ecuaciones diferen-ciales, mientras que las ecuaciones estructurales son algebraicas, resultandoel conjunto en una DAE.

    Así, los modelos contienen conjuntos de ecuaciones diferenciales y alge-braicas que pueden escribirse como:

    F (x, ẋ,y, t) = 0

    donde x es el vector de variable de estado, ẋ su derivada respecto al tiempo,y es el vector de variables algebraicas y t el tiempo.

    Aunque los sistemas como el anterior pueden ser simulados usando mé-todos de resolución para DAE [4, 14], normalmente se prefiere convertirlosen conjuntos ODE, donde se pueden usar métodos de integración numéricamás generales y robustos. Este proceso de conversión, llamado causalización,se realiza mediante algoritmos que deciden qué variable debe calcularse apartir de cada ecuación y en qué orden deben ubicarse las ecuaciones paraproducir código de simulación adecuado.

    La conversión a ODE, implica transformar la ecuación anterior en

    ẋ = f(x, t)

    13

  • 14 CAPÍTULO 2. MARCO TEÓRICO

    Aquí, la variable algebraica y se utiliza internamente para el cálculo de lasderivadas de estado ẋ.

    2.1.1. Conversión DAE a ODE

    El modelo original DAE contiene varias ecuaciones que relacionan variasincógnitas, por lo que el principal problema es decidir qué variable descono-cida debe calcularse a partir de que ecuación. También, debe determinarseel orden correcto en el que deben colocarse las ecuaciones.

    Estos problemas son normalmente resueltos usando algoritmos para teo-ría de grafos, como el algoritmo de Tarjan. Se arma un grafo bipartito dondecada ecuación y variable es un nodo, luego si una variable aparece en unaecuación, se crea una arista entre dichos nodos.

    El algoritmo de Tarjan tiene dos resultados. En primer lugar, produceun emparejamiento máximo entre las variables desconocidas y la ecuacionesque se utilizan para resolverlas. En segundo lugar, proporciona un orden deevaluación de las ecuaciones siguiendo un principio de flujo de datos.

    Para aplicar el algoritmo, primero se define un grafo bipartito (no dirigi-do) G = (V, A), con V = E ∪ U donde:

    E es el conjunto de nodos que representan ecuaciones.

    U es el conjunto de nodos que representan las incógnitas.

    A es el conjunto de arcos formado de la siguiente manera: dados dosnodos e ∈ E, y u ∈ U , el arco a = (e, u) ∈ A si la incógnita u esaparece en la ecuación e.

    El algoritmo de causalidad se basa entonces en lo siguiente:

    Si una ecuación tiene sólo una variable desconocida, esa variable debecalcularse en esa ecuación. Por otra parte, como la ecuación no contieneningún otra variable desconocida, se puede colocar en el primer lugardel código de ejecución.

    Análogamente, si cierta variable desconocida sólo aparece en una ecua-ción nos está indicando que debe resolverse con esa ecuación. Además,como la variable desconocida no aparece en ningún otro lugar, la ecua-ción se puede colocar al final de la ejecución del código.

    Una vez que una ecuación se coloca en un determinado lugar pararesolver cierta variable desconocida, la ecuación con la variable puedenser eliminadas, para luego seguir aplicando recursivamente el algoritmoa las restantes variables y ecuaciones.

    En el grafo bipartito, las ecuaciones que contienen sólo una variable des-conocida corresponden a nodos de grado uno. Por lo tanto, el algoritmo

  • 2.1. SISTEMAS DINÁMICOS 15

    funciona haciendo coincidir cada nodo de grado uno con su nodo correspon-diente en el otro lado del grafo. Una vez que se emparejan un par de nodos,estos nodos se eliminan con sus correspondientes aristas y el algoritmo seaplica de nuevo en el grafo resultante.

    Para definir la ubicación de las ecuaciones en el código de ejecución, sedefinen dos índices: eqfirst (para la primer posición) y eqlast (para la últimaposición).

    A continuación, se detallan los pasos del algoritmo de causalización:

    1. Se comienza con eqfirst = 1 y eqlast = N, el número de la primera yúltima ecuación respectivamente. N es el número total de ecuaciones.

    2. Visitar los nodos del grafo hasta que se encuentre un nodo de gradouno v ∈ V .

    3. Suponiendo que v es una ecuación (v = e ∈ E), se procederá de lasiguiente forma:

    a) Si a = (e, u) ∈ A la única arista en la ecuación e. Entonces, udebe calcularse en e y poner la ecuación e en la posición eqfirst.

    b) Remover los nodos u y e junto a todas las aristas conectadas aellos.

    c) Incrementar eqfirst = eqfirst + 1

    4. Por otro lado, si el nodo v es una variable (v = u ∈ U), se procederáde la siguiente manera:

    a) Si a = (e, u) ∈ A es la única arista conectada a la variable u.Entonces, u debe calcularse en e y poner la ecuación en la posicióneqlast.

    b) Remover los nodos u y e junto a todas las aristas conectadas aellos.

    c) Decrementar eqlast = eqlast - 1

    5. Volver al paso 2.

    Para ver una primera aplicación del algoritmo en un ejemplo práctico, seresolverá el modelo Modelica presente en el código 2.1.1.

  • 16 CAPÍTULO 2. MARCO TEÓRICO

    1 model EjemploExpandido2 constant In t eg e r N = 3 ;3 Real I l [N] , Uc2 [N ] ;4 equat ion5 a [ 1 ] ∗ b [ 1 ] = 2 ;6 a [ 2 ] ∗ b [ 2 ] = 2 ;7 a [ 3 ] ∗ b [ 3 ] = 2 ;8 b [ 1 ] ∗ 5 = 10 ;9 b [ 2 ] ∗ 5 = 10 ;

    10 b [ 3 ] ∗ 5 = 10 ;11 end EjemploExpandido ;

    En el modelo hay 6 ecuaciones que son llamadas f1, f2, f3, g1, g2, g3(en el orden que aparecen) y 6 variables a[1], a[2], a[3], b[1], b[2], b[3].En la figura 2.1 se muestra el grafo bipartito asociado.

    (a) (b)

    Figura 2.1: Grafo EjemploExpandido

    Se comienza con el algoritmo, se tiene que eqfirst = 1 y eqlast = 6. Elprimer nodo encontrado de grado 1, como se observa en la figura 2.1a esg3. Entonces a la ecuación g3 se le asigna eqfirst = 1 y se la empareja conla variable b[3]. Luego, como la variable a[3] tiene grado uno se la puedeemparejar con f3 y se le debe asignar eqlast = 6. Luego, en la figura 2.1b,se puede observar que fueron eliminadas las dos aristas anteriores con sus

  • 2.2. EL LENGUAJE MODELICA 17

    respectivos nodos. Se continúa de la misma forma hasta causalizar todas lasvariables, es decir, hasta tener todas las variables asociadas a una ecuación.

    En muchas situaciones se presentan modelos en donde no se puede en-contrar nodos de grado uno para causalizar. Esto puede deberse a que hayun sub-conjunto de ecuaciones e incógnitas que deben ser resueltas juntas.Esto se conoce como lazo algebraico. En este caso el algoritmo presentadofallará.

    La solución a esto es encontrar los sub-conjuntos o ciclos, colapsarlos endistintos macronodos y crear aristas que conectarán estos macronodos con elresto del grafo. Luego de esta transformación se continúa normalmente conel algoritmo.

    Puede suceder que un nodo se desconecte del resto del grafo luego deeliminar algunos arcos durante los pasos de causalización. Esta situación in-dica la presencia de una singularidad estructural en el modelo. En estos casosdebe ser usado un algoritmo de reducción de índice como el de Pantelides[13] antes de continuar con el proceso de causalización.

    Un ejemplo muy simple donde hay un lazo algebraico es el que puedeverse en el código 2.1.1.

    1 model EjemploConLazo2 Real a , b , c ;3 equat ion4 a + b = 5 ; ( f 1 )5 a ∗ b ∗ c = 4 ; ( f 2 )6 c = 2 ; ( f 3 )7 end EjemploConLazo ;

    Cabe aclarar que f1, f2 y f3 se utilizan para poder referenciar a las ecua-ciones, se podría haber usado números o cualquier otra convención.

    Nuevamente en la figura 2.2 se crea el grafo bipartito correspondiente.En este caso, inicialmente se causaliza c con f3. Luego se encuentra un

    ciclo compuesto por f1, f2, a, b los cuales deben colapsarse para formar unnuevo macronodo y se crea una arista que conecta estos macronodos comopuede verse en la figura 2.3.

    Ahora se tiene un macronodo en donde se debe resolver c y otro macro-nodo en donde deben resolverse las variables a y b. Al resolver el macronodocon las variables a y b, si las ecuaciones involucradas son lineales, este pue-de resolverse simbólicamente. En caso contrario, se debe recurrir a algúnmétodo iterativo.

    2.2. El lenguaje Modelica

    2.2.1. Introducción

    Modelica es un lenguaje de programación orientado a objetos que permiteel modelado de sistemas complejos. Estos sistemas pueden tener componentes

  • 18 CAPÍTULO 2. MARCO TEÓRICO

    Figura 2.2: Grafo con lazo no vectorial

    Figura 2.3: Grafo compuesto por los macronodos

    de diversos tipos como pueden ser mecánicos, eléctricos, hidráulico, etc. Ellenguaje no tiene restricciones de uso (licencia Modelica V2) y es desarrolladopor la asociación sin fines de lucro Modelica Asociation.

    Hay varios entornos de desarrollo para Modelica, uno de los más utili-zados es OpenModelica [10] desarrollado por la organización Open SourceModelica Consortium (OSMC). Éste cuenta con un entorno gráfico para eldesarrollo de modelos y librerías con componentes para diversos ámbitos.

    Las características que se pueden destacar en Modelica son:

    Es basado en ecuaciones acausales en lugar de asignación. Esto permiteel modelado acausal que da una mejor reutilización de clases ya que lasecuaciones no especifican una dirección de flujo de datos determinada.Así, una clase Modelica puede adaptarse a más de un contexto de flujode datos.

  • 2.2. EL LENGUAJE MODELICA 19

    Tiene modelado multi-dominio, lo que significa que se pueden describiry conectar componentes del modelo correspondientes a objetos físicosde varios dominios diferentes tales como, por ejemplo, aplicaciones eléc-tricas, mecánicas, termodinámicas, hidráulicas, biológicas y de control.

    Es orientado a objetos lo que facilita la reutilización de los componentesy la evolución de los modelos.

    Estas son las principales propiedades que hacen que Modelica sea potentey fácil de usar, especialmente para el modelado y la simulación de sistemasfísicos.

    2.2.2. Clases

    El lenguaje Modelica maneja las clases similar a cualquier otro lenguajede programación orientado a objetos. Las clases proveen la estructura de losobjetos a través de variables y ecuaciones que definen el comportamiento dela clase.

    Una clase Modelica contiene elementos, siendo el tipo principal de de-claraciones de variables y secciones de ecuaciones. Las variables contienendatos pertenecientes a instancias de la clases, ésta constituyen el almacena-miento de datos de la instancia. Las ecuaciones de una clase especifican elcomportamiento de instancias de esa clase.

    El primer ejemplo será una ecuación diferencial trivial:

    ẋ(t) = a.x(t)

    La variable x es dinámica (variable de estado) que puede cambiar el valora lo largo del tiempo mientras que ẋ es la derivada temporal de x, repre-sentada como der(x) en Modelica. Como todos los programas de Modelica,generalmente llamados modelos, constan de declaraciones de clase, el pro-grama asociado al ejemplo, se declara como una clase que puede verse en elcódigo 2.2.2.

    1 model Example2 Real x ( s t a r t = 1) ;3 parameter Real a = 1 ;4 equat ion5 der (x ) = a∗x ;6 end Example ;

    El modelo contiene una declaración de una clase llamada Example conuna variable y una ecuación. El primer atributo de la clase es la variable x,que se inicializa a un valor inicial de 1 en el momento en que comienza lasimulación. Todas las variables de Modelica tienen un atributo de inicio conun valor predeterminado que normalmente se establece en 0.

    El segundo atributo a es una constante que se inicializa a 1 al principiode la simulación. Esta constante es prefijada por la palabra clave parameter

  • 20 CAPÍTULO 2. MARCO TEÓRICO

    para indicar que es constante durante la simulación, pero es un parámetrodel modelo que se puede cambiar entre simulaciones, esto podría ser, a travésde un comando en el entorno de simulación. Por ejemplo, se podría volvera ejecutar la simulación para un valor diferente de a. Cada variable tieneun tipo que precede a su nombre cuando se declara. En este caso, tanto lavariable x como la variable a son del tipo Real, esto es una variable queevoluciona de forma continua con el tiempo.

    La única ecuación en este ejemplo especifica que la derivada temporalde x es igual a la constante a por x. En Modelica el signo = siempre sig-nifica igualdad y no es una asignación como en muchos otros lenguajes deprogramación. La derivada temporal de una variable se indica mediante lapseudofunción der().

    Ahora se verá un segundo ejemplo, aquí se modelará el péndulo de lafigura (2.4)

    Figura 2.4: Péndulo

    1 model Pendulum "Planar Pendulum"2 constant Real p i = 3 .141592 ;3 parameter Real m=1, g=9.8 , L=0.5 ;4 Real F ;5 output Real x ( s t a r t =0.5) , y ( s t a r t =0) ;6 output Real v_x , v_y ;7 equat ion8 m∗der (v_x) = −(x/L) ∗F;9 m∗der (v_y) = −(y/L) ∗F−m∗g ;

    10 der ( x ) = v_x ;11 der ( y ) = v_y ;12 x^2 + y^2 = L^2;13 end Pendulum ;

    El modelo describe las ecuaciones de movimiento de Newton para la ma-sa del péndulo bajo la influencia de la gravedad, junto con una restricción

  • 2.2. EL LENGUAJE MODELICA 21

    geométrica del hilo, la quinta ecuación, que especifica que su posición (x,y)debe estar en un círculo con Radio L. Las variables v_x y v_y son susvelocidades en las direcciones x e y respectivamente. Lo interesante de estemodelo, es el hecho de que la quinta ecuación es de una ecuación algebraicaque sólo implica fórmulas algebraicas de variables pero sin derivadas. Lasotras cuatro ecuaciones son diferenciales como las del ejemplo anterior. Unaconstante Modelica declarada con el prefijo constant nunca cambia y puedeser sustituida por su valor en los lugares donde ocurra. Finalmente, hay unasección para ecuaciones declarada con la palabra clave equation, contenien-do ecuaciones definen la dinámica del modelo.

    2.2.3. Variables

    Un modelo Modelica está compuesto por variables de diferentes tipos,cada una es usada en distintas circunstancia dependiendo el sistema que seestá simulando.

    Una declaración de una variable está compuesta por:

    Prefijos de tipos: flow, constant, parameter, discrete, input y output.

    Tipo: nombre del tipo de la variable. Puede ser un tipo básico, unaclase o un sinónimo de tipo. Por ejemplo Real, String, Integer, etc.

    Nombre de la variable.

    Dimensión: Modelica permite la definición de arreglos.

    Modificaciones: modifica una instancia de una clase.

    2.2.4. Ecuaciones

    Como se mencionó anteriormente, Modelica es principalmente un lengua-je basado en ecuaciones en contraste con otros lenguajes de programación.Las ecuaciones pueden tener expresiones complejas de ambos lados de laigualdad y expresan una relación entre las variables. Las ecuaciones son másflexibles que las asignaciones, ya que no prescriben una determinada direcciónde flujo de datos o orden de ejecución. Esta es la clave para las capacidadesde modelado físico y el potencial de las clases en Modelica.

    Pensar en ecuaciones es un poco inusual para la mayoría de los progra-madores. En Modelica se tiene que:

    Las declaraciones de asignación en lenguajes convencionales se repre-sentan generalmente como ecuaciones en Modelica.

    Las asignaciones de atributos se representan como ecuaciones.

    Conexiones entre objetos generan ecuaciones.

  • 22 CAPÍTULO 2. MARCO TEÓRICO

    Las ecuaciones son más poderosas que las declaraciones de asignación.Por ejemplo, considere una ecuación de resistencia donde la resistencia mul-tiplicada por la corriente es igual al voltaje v:

    R * i = v

    La ecuación se puede utilizar de tres maneras que corresponden a tresestados de asignación posibles: calcular la corriente a partir de la voltaje yla resistencia, calcular el voltaje de la resistencia y la corriente o calcular laresistencia a partir del voltaje y la corriente. Esto se expresa en las siguientestres sentencias de asignación:

    i := v/Rv := R * iR := v/i

    Las ecuaciones en Modelica se pueden clasificar informalmente en cuatrogrupos diferentes, dependiendo del contexto sintáctico en el cual ocurren:

    Ecuaciones iniciales: especificadas en las secciones de la ecuación ini-cial o como ecuaciones de los atributos de inicio. Estas se utilizan pararesolver el problema de inicialización en el momento de iniciar la simu-lación.

    Ecuaciones normales: que ocurren en secciones de ecuaciones, inclu-yendo la ecuación de conexión, que es una forma especial de ecuación.Estas ecuaciones son válidas durante toda la simulación.

    Ecuaciones de declaración: que forman parte de declaraciones variableso constantes.

    Ecuaciones de modificación: que se utilizan para modificar los atribu-tos.

    Como ya se ha visto en varios ejemplos, las ecuaciones normales apare-cen en secciones de ecuaciones iniciadas por la palabra clave equation yterminan con algún otra palabra clave permitida. La ecuación de resistenciaanterior es un ejemplo de una ecuación normal que se puede colocar en unasección de ecuación. Las ecuaciones de declaración se dan generalmente comoparte de declaraciones de constantes fijas o de parámetros, por ejemplo:

    constant Integer one = 1

    parameter Real mass = 22.5

    Una ecuación siempre se mantiene, lo que significa que nunca cambia devalor durante la simulación. También es posible especificar una ecuación dedeclaración para una variable normal, por ejemplo:

  • 2.2. EL LENGUAJE MODELICA 23

    Real speed = 72.4

    Sin embargo, esto no tiene mucho sentido ya que limitará la variable atener el mismo valor a lo largo del cómputo, actuando efectivamente comouna constante. Por lo tanto, una ecuación de declaración es muy diferentede un inicializador de variable de otros lenguajes.

    Con respecto a las asignaciones de atributo, éstas se especifican típi-camente mediante ecuaciones de modificación. Por ejemplo, si se necesitaespecificar un valor inicial para una variable lo que se hace es definir unaecuación para el atributo start de la variable:

    Real speed (start = 72.4)

    Otro tipo de ecuación que es importante es la ecuación connect. Laecuación connect relaciona dos componentes y es muy utilizada, principal-mente, para conectar diferentes componentes en modelos electrónicos. Estasecuaciones son válidas siempre y cuando los conectores sean del mismo tipo,o entre dos clases con prefijo class y que reúnan las restricciones para ser unconector.

    2.2.5. Ecuaciones Repetitivas

    Las ecuaciones repetitivas surgen de modelos con muchas instancias dealgún componente o con discretizaciones de PDEs. Esto se ve claramente enel ejemplo 2.1.1 presentado anteriormente, aquí el tamaño es N = 3, pero siN se hace suficientemente grande hay una necesidad de expresar el modeloanterior convenientemente como un conjunto de ecuaciones dentro de unaestructura repetitiva. Para estos casos Modelica ofrece un tipo particularde ecuación denominado loop. Notar que esto no es un bucle en el sentidoalgorítmico de la palabra sino que es una forma abreviada de expresar unconjunto de ecuaciones.

    Utilizando lo mencionado anteriormente, el modelo se puede describircomo puede verse en el código 2.1 lo cual representaría el modelo expandidoque se muestra en el código 2.2.

    1 model EjemploConFor2 constant In t eg e r N = 3 ;3 Real a [N] , b [N ] ;4 equat ion5 for i in 1 :N loop6 a [ i ]∗b [ i ] = 2 ;7 b [ i ] ∗ 5 = 10 ;8 end for ;9 end EjemploConFor ;

    Código 2.1: Ejemplo con For

  • 24 CAPÍTULO 2. MARCO TEÓRICO

    1 model EjemploConFor2 constant In t eg e r N = 3 ;3 Real a [N] , b [N ] ;4 equat ion5 a [ 1 ] ∗ b [ 1 ] = 2 ;6 b [ 1 ] ∗ 5 = 10 ;7 a [ 2 ] ∗ b [ 2 ] = 2 ;8 b [ 2 ] ∗ 5 = 10 ;9 a [ 3 ] ∗ b [ 3 ] = 2 ;

    10 b [ 3 ] ∗ 5 = 10 ;11 end EjemploConFor ;

    Código 2.2: Ejemplo expandido

    Además de las ecuaciones que se utilizaron en el ejemplo anterior, hayotros tres tipos de ecuaciones disponibles en Modelica: if-then-else y when.Normalmente se pueden transformar fácilmente en ecuaciones de igualdadequivalentes.

    2.2.6. Simulación de modelos Modelica

    Con el fin de comprender mejor el funcionamiento de Modelica, se haceun resumen del proceso de traducción y ejecución de un modelo, que seilustra en la Figura (2.5).

    El primer paso del proceso de compilación consiste en un análisis sin-táctico del código fuente Modelica del cual se obtiene un árbol sintácticoabstracto. Luego, esta representación se analiza gramaticalmente, se reali-za la verificación de tipos, las clases se heredan y expanden, se realizan lasmodificaciones e instanciaciones correspondientes, las ecuaciones connect seconvierten en ecuaciones comunes, etc. El resultado de este proceso de aná-lisis y traducción es un conjunto plano de ecuaciones, constantes, variables yfunciones. No queda ningún rastro de la estructura de objetos. A continua-ción, se ordenan topológicamente las ecuaciones teniendo en cuenta el flujode datos entre las mismas.

    Luego, un módulo de optimización compuesto por algoritmos de simpli-ficación algebraica, métodos de reducción de índices, etc., elimina la mayoríade las ecuaciones dejando solo un conjunto mínimo que eventualmente va aser resuelto numéricamente. Por ejemplo, si dos variables son sintácticamenteequivalentes solo se conserva una.

    La etapa siguiente consiste en convertir las ecuaciones resultantes enasignaciones. Muchas veces se pueden encontrar ecuaciones que están fuer-temente conectadas, esto significa que para poder hacer dicha conversión, sedebe tratar todas las ecuaciones que están conectadas entre si juntas paraque puedan procesarse simultáneamente. En determinadas situaciones, es-tas mismas ecuaciones son vectoriales y se encuentran dentro de un loopModelica. Aquí las herramientas que se están utilizando actualmente no son

  • 2.2. EL LENGUAJE MODELICA 25

    lo suficientemente apropiadas para poder resolver estos problemas de formaeficiente.

    Finalmente, se genera código en algún lenguaje de programación con-vencional, usualmente C, y se lo enlaza con algún método de integraciónnumérica el cual es el encargado de resolver el sistema de ecuaciones resul-tante, sistema que ya ha sido drásticamente reducido.

    Figura 2.5: Etapas de ejecución de un modelo Modelica

    2.2.7. Modelos de gran escala

    Modelica es un lenguaje muy potente, que se puede utilizar en ámbitosmuy variados, lo que permite el modelado de diferentes tipos de sistemas ypermite unirlos para armar modelos muy heterogéneos.

    Gracias a estas virtudes el campo de aplicación de este lenguaje es enor-me. Unos de los grandes desafíos y objetivo del grupo de investigación dondese realizó esta tesina, es trabajar con grandes modelos de ecuaciones los cua-les están descriptos en el lenguaje modelica de forma compacta gracias a lautilización del loop Modelica.

    En esta tesina se hace foco en modelos a gran escala obtenidos al incre-mentar el tamaño del parámetro del cual depende el for.

    En el algoritmo clásico funciona bien en modelos no vectoriales. Cuandose presentan modelos vectoriales, resolver un modelos con lazos algebraicospresenta una complejidad lineal debido a que tiene que expandir todo elmodelo para luego poder resolverlo.

    Se introducen pequeños cambios al ejemplo 2.1 para hacer una primeraaproximación a problemas que comúnmente se deben resolver en modelos agran escala el cual puede verse en el código 2.2.7.

  • 26 CAPÍTULO 2. MARCO TEÓRICO

    1 model EjemploVectorialConLazo2 constant In t eg e r N = 100 ;3 Real a [N] , b [N ] ;4 equat ion5 for i in 1 :N loop6 a [ i ]∗b [ i ] = 2 ; ( f i )7 a [ i ]+b [ i ] = 4 ; ( g i )8 end for ;9 end EjemploVectorialConLazo ;

    Hay una solución para poder resolver modelos a gran escala [2] sin expan-dir todo, la cual tiene una complejidad constante. Se podría pensar en utilizaresta versión mejorada que aplica sobre modelos con variables vectoriales. Es-to no puede realizarse debido a que esta solución tiene una gran limitación,esto se debe a que solo puede resolver modelos Modelica vectoriales que nocontengan lazos algebraicos.

    2.3. El compilador ModelicaCC

    El compilador ModelicaCC(Modelica C Compiler) está formado por unconjunto de módulos independientes, en donde cada uno tiene a cargo unaetapa diferente del proceso de compilación como se puede ver en la figura2.5. Como se mencionó en 2.2.6, se comienza con un modelo de alto nively luego va pasando por las diferentes etapas del proceso, cada una lo vantransformando hasta llegar a la última etapa del proceso que es donde sehace la simulación. En un principio el modelo contiene clases con ecuacio-nes acausales y desordenadas. Luego se va transformando, obteniendo unsistema aplanado el cual no contiene clases y en donde las ecuaciones estánordenadas. El primer paso de la compilación consiste en el análisis léxico,sintáctico y semántico, luego se procede a hacer un aplanado, se continúacon una transformación al lenguaje µ-Modelica. Luego de esto se realizan lascorrespondientes optimizaciones y finalmente llega la etapa de causalización.

    2.3.1. Aplanado

    Lo primero que debe realizarse es el análisis sintáctico y semántico. Luegose convierte al modelo en uno más simple, reemplazando herencia, clasesy otras estructuras complejas, esta transformación es llamada aplanado oflattening.

    Como se pudo ver, Modelica está orientado a objetos. A través de lasclases se pueden desarrollar distintas capas de abstracción dentro del modelo.El objetivo del proceso de aplanado es eliminar las distintas capas del modelo,dejando un solo nivel jerárquico ya que los métodos de simulación así lorequieren.

  • 2.3. EL COMPILADOR MODELICACC 27

    2.3.2. Transformación a µ-Modelica

    Esta etapa consiste en reescribir el modelo aplanado utilizando un sub-conjunto del lenguaje Modelica denominado µ-Modelica [5]. Esta transfor-mación es necesaria debido a que en la etapa final, para la simulación, seutiliza QSS Solver [6] y éste espera un modelo en lenguaje µ-Modelica.

    µ-Modelica presenta las siguientes restricciones respecto a Modelica:

    El modelo está aplanado.

    Los parámetros son de tipo Real.

    Todas las variables pertenecen al tipo Real y solo hay tres categorías devariables: estados continuos, estados discretos y variables algebraicas.

    Sólo arreglos unidimensionales están permitidos. Los índices de los arre-glos que se encuentran dentro de cláusulas for están restringidos a ex-presiones de la forma: a[i] + b donde a y b son expresiones enteras ei es el índice de iteración.

    La sección equation se compone de:

    • definiciones de derivadas de variables de estado: der(x) = f(x(t), d, a(t), t); en forma ODE explícita.

    • definiciones de variables algebraicas: (a1,..., an) = g(x(t), d,a(t), t) con la restricción de que cada variable algebraica solopuede depender de variables de estado y de otras variables alge-braicas previamente definidas.

    Las discontinuidades se expresan solo por clausulas when y elsewhendentro de la sección algorithm. En ambas casos las condiciones solopueden ser relaciones y, dentro de las clausulas, solo está permitidola asignación de variables discretas y la re-inicialización (reinit) devariables de estado continuas.

    2.3.3. Causalización

    Finalmente, llega la etapa de causalización, aquí se deben ordenar lasecuaciones de manera que cada ecuación contenga del lado derecho una va-riable conocida, es decir, que se resuelva en alguna ecuación previa, y dellado izquierdo contendrá una incógnita. Se tomará el modelo de ejemplo2.1.1, presente al comienzo de la sección Ecuaciones Repetitivas, para reali-zar la causalización.

    Las ecuaciones están expresadas en DAE pueden verse en el código 2.3.3.

  • 28 CAPÍTULO 2. MARCO TEÓRICO

    1 a [ 1 ] ∗ b [ 1 ] = 2 ;2 a [ 2 ] ∗ b [ 2 ] = 2 ;3 a [ 3 ] ∗ b [ 3 ] = 2 ;4 b [ 1 ] ∗ 5 = 10 ;5 b [ 2 ] ∗ 5 = 10 ;6 b [ 3 ] ∗ 5 = 10 ;

    En un ejemplo tan simple como este, para simplificar no se creará el grafobipartito asociado para poder avanzar. Fácilmente se puede transformar lasecuaciones para poder realizar la causalización y obtener la estructura ODE,como se muestra en el código 2.3.3.

    1 b [ 1 ] = 2 ;2 b [ 2 ] = 2 ;3 b [ 3 ] = 2 ;4 a [ 1 ] = 2 / b [ 1 ] ;5 a [ 2 ] = 2 / b [ 2 ] ;6 a [ 3 ] = 2 / b [ 3 ] ;

    Aquí se tiene que la variables vectorial b[i] se calcula en un primer lugar,y luego éstas son variables conocidas para calcular la variable vectorial a[i].

    2.3.4. Optimización

    Normalmente los modelos Modelica contienen miles de ecuaciones trivia-les de la forma a=b, la mayoría provienen de operadores connect. Con elfin de simplificar las tareas de las etapas sucesivas estas variables alias soneliminadas junto con las ecuaciones que las definen. Luego las variables eli-minadas son sustituidas en las otras ecuaciones en las que aparecen por suscorrespondientes alias. Esta operación es llamada antialias.

    2.3.5. Generación de código y simulación

    Los métodos de integración numérica no pueden trabajar directamentecon modelos Modelica. Debido a esto necesitan recibir como entrada unmodelo transformado a ODE. En este punto el modelo fue transformado y seencuentra expresado en ODE. Lo cual es apropiado para poder ser simuladopor una herramienta llamada QSS Solver. Esta herramienta utiliza distintosmétodos de integración numérica para poder llevar a cabo la simulación.

  • Parte II

    Aportes Originales

    29

  • Capítulo 3

    Resolución de lazos algebraicosen grandes modelos

    3.1. Introducción

    En esta sección del trabajo se presenta una nueva técnica para mejorar laetapa de causalización. Se hace foco en los modelos que contienen ecuacionesiterativas, es decir, que forman parte de un for y que juntas forman un lazoalgebraico.

    Aquí se evita expandir las ecuaciones iterativas. En su lugar se utilizaun nuevo tipo de procesamiento. La idea fundamental es resolver los lazosalgebraicos repetidos sólo una vez.

    A continuación, el el código 3.1 se pude ver un ejemplo para apreciarel problema y durante el resto del capítulo será utilizado para ilustrar lasdistintas etapas.

    1 model EjemploVectorialConLazos2 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 for i in 2 :N loop6 a [ i ]∗b [ i ]∗ a [ i −1]/100=4; ( f i )7 end for ;8 for i in 2 :N loop9 a [ i ]∗b [ i ]∗ a [ i −1]∗345=6; ( g i )

    10 end for ;1112 b [ 1 ]=4 ; ( h1 )13 a [N]=2; (hN)14 end EjemploVectorialConLazos

    Código 3.1: Ejemplo vectorial con lazo

    Como se puede observar, se tiene dos for donde cada uno está compuestopor una ecuación que forman un lazo algebraico. Como N=10 se tiene 9 lazosalgebraicos los cuales se resuelven todos de la misma forma.

    31

  • 32CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    Previo a este trabajo, en este tipo de situaciones el procedimiento parapoder realizar la causalización era expandir el loop, para luego realizar lacausalización, obteniendo el modelo presente en el código 3.2.

    1 model EjemploVectorialConLazos2 Real a [N] , b [N ] ;3 parameter In t eg e r N=5;4 equat ion5 a [ 2 ] ∗ b [ 2 ] ∗ a [1 ]/100=4;6 a [ 2 ] ∗ b [ 2 ] ∗ a [1 ]∗345=6;78 a [ 3 ] ∗ b [ 3 ] ∗ a [2 ]/100=4;9 a [ 3 ] ∗ b [ 3 ] ∗ a [2 ]∗345=6;

    1011 a [ 4 ] ∗ b [ 4 ] ∗ a [3 ]/100=4;12 a [ 4 ] ∗ b [ 4 ] ∗ a [3 ]∗345=6;13 .14 .15 .16 a [ 1 0 ] ∗ b [ 1 0 ] ∗ a [9 ]/100=4;17 a [ 1 0 ] ∗ b [ 1 0 ] ∗ a [9 ]∗345=6;1819 b [ 1 ]=4 ;20 a [ 10 ]=2 ;21 end EjemploVectorialConLazos

    Código 3.2: Ejemplo vectorial con lazo expandido

    Si en lugar de tener N = 10, se tiene N = 1000000 el costo pararealizar la causalización es prácticamente inviable debido a que se necesitaríadisponer de computadoras muy potentes para poder resolverlo.

    Existe previo a este trabajo un algoritmo que trata modelos vectoriales,pero éste no puede resolver los modelos vectoriales con lazos algebraicos.Debido a esto, el único camino que actualmente se tiene para poder resolverel modelo es expandirlo completamente para luego poder realizar la causali-zación de cada uno de los lazos algebraicos.

    En determinadas situaciones, cuando en los índices no se tiene opera-ciones, una forma de resolverlo sería pensar las variables vectoriales comoescalares y resolviéndolo de la forma clásica. Pero esto normalmente no su-cede y se presentan situaciones como la que se acaba de exponer en el ejemploanterior.

    3.2. Idea básica

    La idea para atacar el problema se puede ver en la figura 3.1, a continua-ción se explicarán las etapas:

    Hacer un primer procesamiento de los datos para verificar que estándadas las condiciones para aplicar el algoritmo (se explicarán luego).

  • 3.2. IDEA BÁSICA 33

    Figura 3.1: Grafo bipartito

    Armar un grafo bipartito decidiendo para cada variable cuál es el ín-dice que debe utilizarse. En este caso se mantiene información extraen el grafo para representar de forma compacta tanto las ecuacionesrepetitivas como los arreglos. De esta forma, el grafo tendrá un tamañoconstante sin importar el tamaño del modelo.

    Identificar en el grafo bipartito las componentes fuertemente conexas,estas componentes se fusionan en un conjunto que serán llamados ma-cronodos.

    Causalizar cada nodo del grafo con el algoritmo aquí presentado, estose hace en dos etapas. La primera es ordenamiento interno, aquí deberesolverse cada uno de los macronodos individualmente y luego ordena-miento externo, donde se le debe asignar un orden a cada macronodo.

    Finalmente se retorna el resultado.

    Si se está ante un caso donde se tiene los for con el mismo rango y no secuenta con expresiones dentro de los índices, se puede resolver el modelo de laforma clásica, considerando la variable vectorial como escalar. Por el contra-rio, si se tiene todo dentro del mismo rango pero hay alguna operación sobrelos índices, no se puede resolver pensándolo como variables escalares, sinoque es necesario usar el algoritmo que aquí se presenta. El modelo presenteen el código 3.1 no se puede resolver pensando las variables como escalaresdebido a que en (fi) se tiene la presencia de a[i] y a[i-1], en este último setiene una operación en el índice. Aquí es necesario un análisis más complejo.

    En esta clase de modelos lo que normalmente aumenta es el tamaño delfor y no la cantidad de ecuaciones (aunque la cantidad crece indirectamentecon el for). Se puede aprovechar de esta característica para ahorrar procesa-miento de cómputo, resolviendo solamente una vez el problema y replicandola solución a los demás lazos que son parte de la misma iteración.

    Claramente se puede ver que en el código 3.1 hay N-1 lazos algebraicoscompuesto por dos ecuaciones, dos variables y dos índices cada uno. Aquí seresuelve el problema una única vez y luego se extiende la solución al restodel sistema.

  • 34CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    3.3. Estructura utilizada

    Para poder desarrollar el algoritmo se tomó como estructura un mapa, endonde se almacena toda la información asociada al modelo. Un mapa tienela forma: a −→ b donde a es la clave y b es el valor asociada a la clave. Eneste caso el mapa tiene como clave cada una de las ecuaciones y como valorla información que representará la ecuación.

    Esta información se divide en dos partes:

    1. ran: indica el rango que tiene el for, es decir, los valores entre los cualesvariará el índice. En el modelo EjemploVectorialConLazos presente enel código 3.1, este valor será 1:N-1.

    2. var_info: mantiene información sobre las variables que aparecen enla ecuación y cada una de ellas tiene los siguientes dos atributos:

    ran: es el rango de valores en el que varía el índices de una varia-ble cuando existe alguna operación sobre el mismo y contiene lasvariables que están alcanzadas por el índice. Si el índice no tieneoperación alguna, esto estará vacío y el índice variará en los valo-res definidos en el for. En el ejemplo EjemploVectorialConLazosque se encuentra en el código 3.1 la variable a aparece tanto coníndice i e i+1 por lo cual esta propiedad tomará el valor 1,N-1y 2,N, para el caso de la variable b no tiene operación sobre elíndice por lo tanto esta propiedad quedará vacía.constant: indica que una variable aparece con un índice constantedentro del ciclo, por ejemplo en la ecuación (h1) del modelo 3.1esta presente b[1] por lo tanto, para la variable b esta propiedadalmacenará el valor 1.

    3.4. Procesamiento Previo

    Al resolver un sistema, se puede encontrar con el caso que haya variosfor en donde los rangos no coinciden entre sí, en este caso se debe partir losfors en otros for más chicos donde todos los rangos sean iguales. Es decir,todos los rangos de los fors son igual o son distintos, donde ningún rangopuede ser subconjunto de otro y con la intersección vacía entre los mismos.

    Como Modelica es un lenguaje declarativo dicha modificación no alteraen absoluto el sistema. Este es un análisis para verificar que están dadas lasprecondiciones para poder aplicar el algoritmo. Si por algún motivo no puedecumplirse dicha condición el algoritmo termina sin poder aplicarse, ya queésta es una condición necesaria para la correcta ejecución.

    En el ejemplo EjemploVectorialConLazo, presente en el código 3.1, elrango de los dos for es el mismo, debido a esto no es necesario hacer ningúncambio.

  • 3.5. GRAFO BIPARTITO 35

    En el ejemplo presente en 3.3 se puede ver un caso donde los rangos delos for no cumplen dicha condición.

    1 model EjemploCRD2 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 for i in 3 :N loop6 a [ i ]∗b [ i ]=456; ( f i )7 end for ;8 for i in 2 :N loop9 a [ i ]∗b [ i ]∗b [ i −1]∗345=6; ( g i )

    10 end for ;11 a [ 1 ]=234 ; ( h1 )12 b [1 ]=234 ; ( h2 )13 a [ 2 ]=2 ; ( h3 )14 end EjemploCRD ;

    Código 3.3: Ejemplo CRD

    Como se puede ver, el primer rango es [3,N-1] y el segundo [2,N]. Aquíel algoritmo hace la correspondiente transformación, cambiando el rangoy separando las últimas dos ecuaciones, con lo cual se transformaría en elcódigo presente en 3.4.

    1 model EjemploCRDModificado2 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 for i in 3 :N loop6 a [ i ]∗b [ i ]=456; ( f i )7 end for ;89 for i in 3 :N loop

    10 a [ i ]∗b [ i ]∗b [ i −1]∗345=6; ( g i )11 end for ;1213 a [1 ]=234 ; ( h1 )14 b [1 ]=234 ; ( h2 )15 a [ 2 ]=2 ; ( h3 )1617 a [ 2 ] ∗ b [ 2 ] ∗ b [1 ]∗345=6; ( g2 )18 end EjemploCRDModificado ;

    Código 3.4: Ejemplo CRD modificado

    3.5. Grafo bipartito

    Luego de la etapa anterior, se debe crear un grafo bipartito utilizandoel modelo. Este grafo tendrá, por un lado las ecuaciones y por otro lado lasvariables.

  • 36CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    En cada nodo del grafo se guarda información sobre el tipo de nodo (ecua-ciones o variables) y cuál es la variable o ecuación asociada respectivamente.

    El armado del grafo bipartito, fue dividido en dos etapas. En primer lugardeben procesarse las ecuaciones escalares, es decir, las que están fuera de unfor y luego, en segundo lugar, las ecuaciones iterativas

    A continuación se explicarán cada una de estas etapas y la importanciade respetar el orden mencionado anteriormente para armar el grafo bipartito.

    3.5.1. Ecuaciones escalares

    Para tratar las ecuaciones escalares primero se recorre en el mapa dondeesta representado el sistema con las ecuaciones escalares. Con cada una deestas ecuaciones se crea un nodo y luego se crea un nodo para cada variablepertenecientes a dichas ecuaciones. Luego se agregan las aristas, una arista(v,e) esta indicando que la variable v está en la ecuación e. A cada unode los nodos se le define un atributo para indicar si es una ecuación o unavariable. Esta etapa es similar a la del algoritmo clásico.

    Continuando con el ejemplo EjemploVectorialConLazos presente en elcódigo 3.1, se tiene que las primeras ecuaciones en procesarse son h1 y hNdebido a que son la que están afuera del for.

    3.5.2. Ecuaciones iterativas

    Luego se recorren las ecuaciones restantes. Éstas son las ecuaciones queestán dentro bucles for. Aquí se genera un nodo por cada ecuación y uno paracada variable vectorial. Luego se les agregan sus correspondientes aristas.Una arista (v[i],e[i]) esta indicando que la variable v[i], con índice i dadopor el rango del for pertenece a la ecuación e[i]. Cada uno de estos nodoshace referencia a un conjunto de variables o ecuaciones.

    Cuando se tiene una variable la cual aparece varias veces, algunas conoperaciones sobre el índice y otras sin operaciones, se tiene que tomar ladecisión de cual será el índice que debe utilizarse para armar el grafo. Aquíse debe elegir uno de los índices y éste será el que se va a utilizar comoincógnita y el otro índice será considerado como variable conocida. Parahacer esta selección de índice, se deben tomar las variables vectoriales queestán dentro del for y ver si éstas ya fueron utilizadas en el grafo. En casoafirmativo se debe analizar con qué valores fueron utilizados para no volver ausarlo. De esta forma se puede garantizar que cada nodo del grafo representaa variables distintas y que ninguna se repita. De aquí viene la importanciade que las ecuaciones no iterativas sean evaluadas previamente para armarel grafo.

    Esta información sobre el índice seleccionado para cada variable se guardajunto al grafo para que sea utilizada más tarde.

  • 3.6. MACRONODOS 37

    Si se analiza la variable a en las ecuaciones fi y gi en EjemploVectorial-ConLazos presente en el código 3.1, se ve que para la variable vectorial a setiene dos índices, el primero es i (que varía entre 2 y N) y el segundo i-1(que varía entre 1 y N-1).

    Fuera del for se puede ver que la ecuación (hN) en donde la variable aaparece con índice N. Esto fuerza a que dentro del for para la variable a sedeba tomar el índice i-1 como incógnita ya que de tomar el otro índice seestaría resolviendo dentro del for a la variable a[N]. De esta forma se tieneque a[i-1] es la variable a resolver la cual será usada en el grafo y a[i] es lavariable de entrada. Las variables de entrada al lazo deben estar resueltasen un paso previo. Para poder garantizar esto posteriormente se le da ciertoorden de resolución a los macronodos.

    Por lo tanto el grafo del modelo presente en 3.1 quedaría como se ve enla figura 3.2.

    Figura 3.2: Grafo bipartito de EjemploVectorialConLazos

    3.6. Macronodos

    A partir del grafo presente en 3.2 creado en el paso anterior, se procedea crear los macronodos. Un macronodos está compuesto por ecuaciones yvariables escalares o vectoriales cuando las ecuaciones y variables pertenecena un for. Cada macronodo representa a un conjunto que debe resolverse deforma simultánea.

    En primer lugar, se agrupan los nodos que deben resolverse juntos, esdecir, son ecuaciones y variables que dependen entre sí. Luego se le agregainformación extra necesaria para los siguientes pasos.

    En el caso más simple, se da cuando se encuentra un macronodo formadosolamente por dos nodos, uno representará a una variable y el otro a una

  • 38CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    ecuaciones. Éstos serán escalares o vectoriales según corresponda. Esto estáindicando que la variable debe resolverse en dicha ecuación, aquí dicha va-riable queda causalizada y no queda más por hacer. Aquí al tener solamentedos nodos, se tiene que el macronodo no contiene un lazo algebraico ya quepara que esto ocurra se debe tener más de dos ecuaciones que formen partedel mismo macronodo.

    Por otro lado, los macronodos formados por más de dos ecuaciones, es de-cir, que contiene múltiples ecuaciones y variables, forman un lazo algebraico.Estos son los casos interesantes y los que apunta resolver este trabajo.

    En los casos vectoriales, se debe proceder a darle un orden a los ciclos paraextender la solución. Como estos macronodos pueden depender del resultadoque se obtiene de resolver otros macronodos, se le debe dar un orden externoindicando en qué orden deben resolverse.

    A continuación se explicará cada una de estas etapas, profundizando laexplicación con un ejemplo.

    3.6.1. Creación

    Para crear los macronodos se buscan ciclos sobre el grafo bipartito crea-do previamente. Al encontrar un ciclo se lo remueve del grafo y se crea elmacronodo correspondiente. Luego se continúa buscando el siguiente ciclo.Una vez que no se encuentran más ciclos se procede a analizar los nodos res-tantes. Ahora el proceso consiste en encontrar un nodo de grado uno. Unavez localizado se busca su correspondiente nodo adyacente y se quitan ambosdel grafo para crear un nuevo macronodo, se continúa de esta manera hastaque no queden nodos en el grafo.

    Para el caso de EjemploVectorialConLazos presente en el código 3.1 men-cionado anteriormente, los macronodos son:

    M1: fi,gi,a1to9,b2to10

    M2: h1,b1

    M3: hN,a10

    3.6.2. Ordenamiento interno

    Para los macronodos que son parte de un for es necesario dar una di-rección, esta puede ser ascendente o descendente. Esto permite extender lasolución correctamente, garantizando que cada variable que debe resolverseen un punto previo ya esté resuelta cuando se la necesita.

    Para determinar el orden de cada macronodo se toman las ecuaciones yvariables junto al índice que debe ser usado por cada variable y al que debeser considerado como de entrada. Analizando toda esta información se puededecidir si es necesario imponer un orden y cuál debe ser éste.

  • 3.6. MACRONODOS 39

    Si todas las variables tienen solamente un índice (no existe índice deentrada), no hace falta hacer ningún análisis y la solución podrá ser extendidacomenzando desde cualquiera de los dos extremos, ya que en este caso nohay bucles dependientes entre sí.

    Luego, a cada macronodo se le agrega información sobre cuáles son lasvariables de las cuales depende. Esta información será usada en el paso si-guiente para ordenar los macronodos.

    Observando EjemploVectorialConLazos, que se encuentra en el código3.1, el macronodo M1 que contiene las ecuaciones (fi),(gi), la variable acontiene dos índices: i-1 ,i . El índice i es considerado conocido y el índicei-1 como incógnita. Por lo tanto, para poder resolver el índice a[i] se tieneque tener resuelto previamente a[i+1] lo cual esta indicando que el ordenserá descendente. A continuación, solo debemos agregar en el macronodoM1que depende de la variable a[N].

    3.6.3. Ordenamiento externo

    Una vez que fueron ordenados internamente los macronodos, lo que restaes saber qué macronodo debe resolverse antes y cuál después. Para esto serealiza un ordenamiento topológico.

    Para poder lograr esto, se crea un nuevo grafo dirigido donde cada macro-nodo pasa a ser un nodo del grafo. Luego se toma cada uno de los macronodoy se busca cuáles son las variables que deben resolverse fuera del mismo. Paracada una de estas variables se debe encontrar en qué otro macronodo deberesolverse y se agrega una nueva arista dirigida en el grafo con origen en elmacronodo actual y destino, el macronodo encontrado. De esta manera elnuevo grafo está compuesto por aristas A->B, lo cual está indicando que elmacronodo B debe resolverse antes que el macronodo A.

    Si no hay arista entre dos nodos significa que no existe inter-dependenciaalguna entre los macronodos.

    Con este nuevo grafo se procede a crear un orden topológico final.Continuando con EjemploVectorialConLazos, visto en el código 3.1, se

    tienen tres macronodos que deben ser ordenados: M1 , M2 y M3 .En el macronodo M1 cuando i asume el valor de N se tiene que a[N]

    es una variable de entrada para fi,gi . Dicha variable se resuelve en unaecuación que pertenece al macronodo M3 . Debido a esto se tiene que M3debe resolverse antes que M1 .

    En M2 se puede ver que no depende de ningún otra variables ya queno tiene ninguna variable que sea considerada constante. Entonces, el nuevografo esta compuesto por los tres macronodos con una única arista que vade M1 a M3 como se puede observar en la figura 3.3.

    Luego se obtiene el orden topológico final. En ejemplo el orden topológicoes el siguiente: M3, M1, M2.

  • 40CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    Figura 3.3: Macronodos correspondientes a EjemploVectorialConLazos

    3.7. Resultado

    Una vez terminado con los pasos previos se cuenta con un orden de losmacronodos y un orden dentro de cada macronodo lo cual permite generar elcódigo resultante final. Éste será un arreglo ordenado de tuplas compuestasde:

    1. Ecuaciones y variables que deben resolverse juntas. Cuando se tienemás de dos valores, es cuando hay presente un lazo algebraico.

    2. El rango de cada variable: éste será un arreglo con cuatro elementos:variables, inicio del rango, fin del rango y la dirección. Valores posi-bles para la dirección: creciente es 1, decreciente será -1 y cuando nocorresponda ya que no es parte de un for será 0.

    3. Las dependencias. Aquí se tiene información sobre las variables quedeben resolverse fuera del macronodo. Esto estará compuesto por unarreglo de triplas donde en primer lugar se tiene la variable que deberesolverse en otro macronodo luego en segundo y tercer lugar se ob-tiene el inicio y fin de la variable en el caso de sea vectorial. Aunqueeste último punto no es parte del ordenamiento, se utiliza luego parasaber qué variables deben ser entrada para una función C que resuelvenuméricamente el lazo.

    Volviendo al ejemplo EjemploVectorialConLazos, presente en el código3.1, se tiene como resultado final: [([hN,a],([a,N,N,0]),[]), ([fi,gi,a,b],([a,N-1,1,-1],[b,N,2,-1]),[a,10,10]),([h1,b],([1,1,0]),[])]

    ([hN,a],([a,N,N,0]),[]): hN es la ecuación, a es la variables, comienza ytermina en N, no tiene dirección. No depende de ninguna variable.

    ([fi,gi,a,b],([a,N-1,1,-1],[b,N,2,-1]),[a,10,10]): fi,gi son las ecuaciones a,blas variables, a comienza en N-1 y termina en 2 con dirección decre-ciente, b comienza en N, termina en 2 con dirección decreciente. Parapoder resolver se necesita tener resuelto antes a en el valor 10.

    ([h1,b],([1,1,0]),[]): h1 es la ecuación, b es la variables, el rango co-mienza y termina en 1, el atributo de dirección no esta definido ya queno es necesario. No depende de ninguna variable.

  • 3.8. RESTRICCIONES 41

    El cual si lo se transforma en modelo Modelica despejando cada varia-ble de su ecuación correspondiente se obtiene el código que se puede ver en3.5. Cabe aclarar que esta última transformación no fue realizada, el algorit-mo termina retornando la estructura previa la cual contiene la informaciónsuficiente para poder realizarla.

    1 model EjemploVector ia lConLazosResuelto2 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 a [N]=2;6 ( a [N−1] ,b [N] ) = f i_g i ( a [N] )7 for i in N−1:−1:2 loop8 ( a [ i −1] ,b [ i ] ) = f i_g i ( a [ i ] )9 end for

    10 b [ 1 ]=4 ;11 end EjemploVector ia lConLazosResuelto

    Código 3.5: Ejemplo vectorial con lazos resuelto

    En el código se puede ver una función externa fi_gi que recibe comoargumento de entrada a[i] y a partir del mismo resuelve el lazo algebraico.Como se ve, en el código los N-2 lazos algebraicos son resueltos con la mismafunción en vez de generar N-2 funciones distintas. Aquí se ve el beneficio deutilizar el algoritmo planteado.

    3.8. Restricciones

    El algoritmo desarrollado tiene ciertas limitaciones. Algunos modelos, quetienen determinadas características, no son resuelto mediante este algoritmo.Situaciones en donde debido a la estructura del modelo, el algoritmo no puedeaplicarse. Estos casos vienen dados por la estructuras de las ecuaciones queson parte de un sistema iterativo.

    Para que el algoritmo pueda aplicarse el sistema debe tener la siguientecaracterísticas:

    1. solo puedo tener suma o resta de una constante sobre los índices.

    2. solo es aplicable a problemas vectoriales de una sola dimensión.

    3. si en una ecuación fue seleccionado un determinado índice para unavariable vectorial, en el resto de las ecuaciones el índice elegido debecoincidir con el que se tomó previamente. Esta situación puede darsesi solo en algunas ecuaciones del bucle hay índices de la forma i+kcon k natural distinto de cero y fuera del bucle tengo ecuaciones queobligan a elegir ese índice que solo aparece en determinadas ecuacionesdel bucle y no en todas.

  • 42CAPÍTULO 3. RESOLUCIÓN DE LAZOS ALGEBRAICOS EN GRANDES MODELOS

    Un ejemplo como el que sigue no podría resolverse con este algoritmo yaque dentro del bucle, en la ecuación (fi) aparece a[i/2].

    1 model EjemploSinSoluc ion12 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 for i in 1 :N−1 loop6 a [ i ]∗b [ i ]∗ a [ i /2]/100=4; ( f i )7 a [ i ]∗b [ i ]5=6; ( g i )8 end for9

    10 a [ 1 ]=2 ; ( h1 )11 b [N]=234; (hN)12 end EjemploSinSoluc ion1 ;

    Código 3.6: Ejemplo sin solución 1

    Otro ejemplo que no podría resolverse con este algoritmo, es el siguiente,debido a que dentro del mismo bucle aparece a[i+3] y a[i-1].

    1 model EjemploSinSoluc ion22 Real a [N] , b [N ] ;3 parameter In t eg e r N=10;4 equat ion5 for i in 1 :N−1 loop6 a [ i ]∗b [ i ]∗ a [ i +3]/100=4; ( f i )7 a [ i ]∗b [ i ]∗ a [ i −1]∗345=6; ( g i )8 end for9

    10 a [ 1 ]=2 ; ( h1 )11 b [N]=234; (hN)12 end EjemploSinSoluc ion2 ;

    Código 3.7: Ejemplo sin solución 2

    En estos casos el algoritmo termina, devolviendo el correspondiente men-saje de error.

  • Capítulo 4

    Implementación

    En este capítulo se realizará una introducción de la implementación delalgoritmo, se verá la estructura utilizada para la representación de los datos yse mostrarán las principales funciones del algoritmo junto a una descripciónen cada una.

    La implementación del algoritmo fue hecha en el lenguaje de programa-ción Perl y esta disponible en [12].

    Para la representación de los datos se utilizó un Hash, el cual está com-puesta por pares de clave/valor.

    Para la manipulación del grafo se utilizó la librería Graph[11]. Estalibrería ofrece una variedad muy completa para el manejo de grafos.

    Para probar el algoritmo se desarrollaron un conjunto de test usando laslibrerías [16] y [15].

    El modelo inicialmente toma un hash, el cual contiene toda la informa-ción del grafo, definido como se muestra en la sección 3.3. Cabe aclarar queen el presente trabajo el hash es generado manualmente ya que no se haimplementado aún la etapa de lectura y análisis del modelo Modelica.

    En la figura 4.1 se puede ver un resumen con las diferentes etapas delalgoritmo.

    43

  • 44 CAPÍTULO 4. IMPLEMENTACIÓN

    Figura 4.1: Etapas del algoritmo

    A continuación serán explicadas cada una de estas etapas en las cualesfue dividido el algoritmo.

    Procesamiento previo Inicialmente, el modelo es representado por un hash,el cual es tomado por el Preprocessor, que es el encargado de modificarel hash en caso de que tenga varios loop con distintos rangos.

    Generación grafo bipartito A continuación, es procesado por BuildGraphque es el encargado de crear el grafo bipartito y, en caso de que seanecesario, decidir por un índice en cada variable. Esto retorna el grafocreado y los índices seleccionados.

    Construcción de los macronodos Luego, el grafo es tomado por Build-MacroNodes. En esta etapa se retorna un arreglo, donde cada elemento

  • 45

    del arreglo está formado por todos los nodos que son parte de un ma-cronodo, es decir, retorna todos los macronodo del grafo.

    Ordenación interna Ahora es momento del InternalSort: en esta etapa setoma como entrada los macronodos, el grafo con la selección de índicesy el hash original. Esto retorna información que sirve para poder resol-ver el problema una única vez y luego de obtenida esta solución poderextenderla a las demás ecuaciones del lazo correctamente. Esto generaun arreglo en donde cada elemento del arreglo contiene información deun macronodo, la información contenida se divide en:

    equations: es un arreglo que lista las ecuaciones que son parte delmacronodo.

    var_info: variables perteneciente al macronodo. Es un hash, endonde cada clave es una variable presente en el macronodo y co-mo valor asociado a cada clave se tiene la lista de los valoresque debe asumir la variable. Cuando la variable pertenece a unloop, adicionalmente a estos valores, asume el valor del índice.Por ejemplo, las variables A[i], A[1] y A[2] que están dentro delloop, en esta caso se tiene que A tendrá el arreglo [1,2].

    index: hash en donde la clave es una variable y el valor indica elíndice seleccionado, en caso de no pertenecer a un loop el valorserá vacío.

    ran: aquí se tiene información sobre cómo debe resolverse el loop,si el conjunto de macronodos no pertenecen a un loop esto estarávacío, caso contrario indicará:

    • init: valor donde comienza el índice.• end: valor donde termina el índice.• next: será 1 en caso de ser creciente o -1 si es decreciente elloop.

    • vars: las variables alcanzadas por el índice del loop.

    Aquí a la hora de resolver el problema se debe tomar equations,var_info y index para saber cuáles son las ecuaciones y variables in-volucradas y los indices que deben ser usados para resolver el problema.Una vez que el problema está resuelto, debe utilizarse la informaciónde ran para extender la solución al resto de las ecuaciones del for.

    Ordenación externa En este punto se tienen todos los macronodos conla información necesaria para poder resolverlos y extender la solución,pero no se sabe cuál es el orden para ir resolviendo cada uno de losmacronodos. El encargado de hacerlo es SortMacroNodes. En esta eta-pa se toman todos los macronodos junto con el hash original y estable

  • 46 CAPÍTULO 4. IMPLEMENTACIÓN

    el orden que debe respetarse, en caso de que corresponda, para poderresolver los macronodos.

    Ordenación final Finalmente se crea un grafo dirigido usando como nodosa los macronodos y como arista a las dependencias impuestas en elpaso previo, luego usando el método topological_sort de la libreríade Perl se crea un orden topológico final.

    A continuación se pueden ver las principales funciones del algoritmo,junto a una breve descripción de su comportamiento.

    4.1. Función build_graph

    La función causalize es la encargada de realizar la causalización y se en-cuentra dentro del modulo Causalize.pm. Esta función delega comportamien-to en varias funciones, a continuación se puede ver código correspondientea los principales métodos. Se comenzará con build_graph que se encuentradentro del modulo BuildGraph.pm

    1 sub build_graph {2 my %args = va l i d a t e (3 @_,4 {5 in i t_data => 1 ,6 }7 ) ;89 my $graph = Graph : : Undirected−>new( ) ;

    1011 my $in i t_data = $args { in i t_data } ;1213 _build_graph_without_for ( $init_data , $graph ) ;14 _build_graph_with_for ( $init_data , $graph ) ;1516 _build_png ( $graph ) ;1718 return $graph ;19 }

    Código 4.1: Código build_graph

    Como se puede ver en el código 4.1, la función recibe como argumentoel modelo inicial y genera el grafo no dirigido guardándolo en la variable$graph. En primer lugar llama a _build_graph_without_for pasandole co-mo parámetro $init_data y $graph para armar el grafo con todas las ecua-ciones y variables que están fuera de cualquier for, al grafo obtenido junto ainformación extra asociada a cada nodo es guardada en la segunda variableingresada y luego de la misma manera se procesa las variables que estándentro del for mediante _build_graph_with_for, finalmente se exporta un

  • 4.2. FUNCIÓN BUILD_MACRO_NODES 47

    grafo en formato png mediante la función _build_png para clarificar y teneruna imagen de como quedo el grafo asociado al problema.

    4.2. Función build_macro_nodes

    Luego toma el control otra función importante para armar los macrono-dos, ésta es build_macro_nodes que se encuentra dentro del modulo Build-MacroNodes.pm.

    1 sub build_macro_nodes {2 my %args = va l i d a t e (3 @_,4 {5 graph => 1 ,6 }7 ) ;8 my $or ig ina l_graph = $args {graph } ;9 my $graph = $or ig ina l_graph−>deep_copy_graph ;

    1011 my @macro_node = ( ) ;1213 while (my @cycle_nodes = $graph−>find_a_cycle ) {1415 @cycle_nodes = so r t @cycle_nodes ;1617 my @mn_eq = ( ) ;18 my @mn_var = ( ) ;19 my @new_edge = ( ) ;20 my $is_big_macro_node = 1 ;21 fo r each my $node ( @cycle_nodes ) {2223 d i e "Node : $node i s not de f ined type" un l e s s ( $graph−>

    get_vertex_attr ibute ( $node , ’ type ’ ) ) ;2425 i f ( $graph−>get_vertex_attr ibute ( $node , ’ type ’ ) eq

    TYPE_EQ) {26 push @mn_eq, $node ;27 }28 e l s i f ( $graph−>get_vertex_attr ibute ( $node , ’ type ’ ) eq

    TYPE_VAR) {29 push @mn_var , $node ;30 }31 else {32 d i e "Undefined type to node : $node" ;33 }3435 my @successors = $graph−>suc c e s s o r s ( $node ) ;3637 i f ( @successors ) {38 fo r each my $s_node ( @successors ) {39 my $is_in_this_mn = 0 ;40 fo r each my $n ( @cycle_nodes ) {

  • 48 CAPÍTULO 4. IMPLEMENTACIÓN

    41 i f ( $s_node eq $n ) {42 $is_in_this_mn = 1 ;43 l a s t ;44 }45 }46 i f ( ! $is_in_this_mn ) {47 push @new_edge , $s_node ;48 $is_big_macro_node = 0 ;49 }50 }51 }52 }5354 # delete cy c l e55 $graph = $graph−>de l e t e_cyc l e ( @cycle_nodes ) ;56 # delete v e r t i c e s57 $graph = $graph−>de l e t e_ve r t i c e s ( @cycle_nodes ) ;5859 i f ( $is_big_macro_node ) {6061 $graph = $graph−>de l e t e_ve r t i c e s ( @cycle_nodes ) ;6263 @cycle_nodes = map { s p l i t ( "AND" ,$_) } @cycle_nodes ;64 @cycle_nodes = so r t ( @cycle_nodes ) ;65 push @macro_node , \@cycle_nodes ;66 }67 else {6869 my $name_mn_eq = j o i n ( "AND" ,@mn_eq) ;70 my $name_mn_var = j o i n ( "AND" ,@mn_var) ;7172 # add v e r t i c e s73 $graph−>add_vert ices ( $name_mn_eq , $name_mn_var ) ;7475 # se t a t t r i b u t e s76 $graph−>set_vertex_att r ibute ($name_mn_eq , ’ type ’ ,

    TYPE_EQ) ;77 $graph−>set_vertex_att r ibute ($name_mn_var , ’ type ’ ,

    TYPE_VAR) ;7879 # add new edge80 $graph−>add_edge ( $name_mn_eq , $name_mn_var ) ;818283 # add new edge84 fo r each my $node (@new_edge) {85 i f ( $graph−>get_vertex_attr ibute ( $node , ’ type ’ )

    eq TYPE_VAR) {86 $graph−>add_edge ( $node , $name_mn_eq ) ;87 }88 e l s i f ( $graph−>get_vertex_attr ibute ( $node , ’ type ’

    ) eq TYPE_EQ) {89 $graph−>add_edge ( $node , $name_mn_var ) ;90 }

  • 4.2. FUNCIÓN BUILD_MACRO_NODES 49

    91 else {92 d i e "Undefined type to node : $node in new

    edge" ;93 }94 }95 }96 }9798 # these are the nodes that can be c au s a l i z e d99 my @ver t i c e s = $graph−>v e r t i c e s ;

    100101 while ( @ver t i c e s ) {102103 fo r each my $v ( @ver t i c e s ) {104105 i f ( $graph−>degree ( $v ) && $graph−>degree ( $v ) == 1) {106107 my @successors = $graph−>suc c e s s o r s ( $v ) ;108109 my $v2 = s h i f t ( @successors ) ;110111 my @node = ($v , $v2 ) ;112 @node = so r t (@node ) ;113114 @node = map { s p l i t ( "AND" ,$_) } @node ;115 @node = so r t (@node ) ;116117 push @macro_node , \@node ;118119 $graph = $graph−>delete_edge ( $v , $v2 ) ;120121 $graph = $graph−>de l e t e_ve r t i c e s ( $v , $v2 ) ;122 }123 }124125 @ver t i c e s = $graph−>v e r t i c e s ;126 }127128 return \@macro_node ;129 }

    Código 4.2: Código de build_macro_nodes

    Aquí se comienza buscando los ciclos del grafo. Para hacer esta tarea fuenecesario la librería Graph([11]) mencionada anteriormente, en primer lugarse crea una copia del grafo para poder trabajar sobre la misma. Mediantela función find_a_cycle se obtiene un ciclo, luego se verifica que éste seamáximo, en caso de no serlo sigue buscando hasta encontrarlo. Cuando esencontrado, los remueve del grafo, crea un nuevo macronodo con dichos nodosy continúa buscando un nuevo ciclo máxima. Este proceso se repite hastaremover todos los nodos que forman ciclos en el grafo. Cuando no obtiene másciclos, a cada ecuación solo le corresponde una variable. En este punto toma

  • 50 CAPÍTULO 4. IMPLEMENTACIÓN

    cada ecuación con su correspondiente variable, crea un nuevo macronodo conestos dos nodos y los remueve del grafo, continúa por este camino hasta queel grafo queda vacío.

    A continuación corresponde hacer la ordenación interna de los macro-nodos y luego darle un orden a los macronodos. Para darle el orden a losmacronodos, primero se establece qué macronodo debe resolverse antes yluego se le da el orden topologico, esta parte del código es más larga y noaporta mucho agregar dicho código, por lo cual no será incluido(el códigocompleto puede verse en [12])

    4.3. Función resolve_internal_macro_node

    La ordenación interna se hace dentro del modulo ProcessInternalMacro-Nodes.pm en el método resolve_internal_macro_node. Básicamente recibeel modelo inicial($init_data), el grafo($graph) y el conjunto de los macrono-dos($all_macro_node). Luego va tomando de a un macronodo y si es partede un for le genera el correspondiente orden, de forma tal, que si una varia-ble del macronodo depende de otra que está dentro del mismo, esta últimasea resuelta antes.

    4.4. Función de ordenamiento externo

    Ahora se le agrega a cada uno de los macronodos cuáles son las variablesque deben resolverse fuera del mismo con la funciónget_vars_solved_in_other_mn, este método toma el modelos inicial jun-to al conjunto de macronodos ordenado y agrega esa información en cadamacronodos.

    Luego es el momento de indicar si un macronodo depende de algún otro,esta dependencia se basa en que un macronodo resuelve una o varias variablesque luego son utilizadas por otro macronodo. Esto se realiza utilizando elmodulo SortMacroNodes.pm, el cual toma los macronodos devueltos en elpaso anterior y se fija, para cada macronodo, si necesita tener resulta algunavariable. En caso de ser afirmativo busca cuál es el macronodo donde seresuelve dicha variable y guarda dicha dependencia en un arreglo.

    Finalmente, se crea un grafo dirigido utilizando el arreglo que contienelas dependencias entre los macronodos. Cada macronodo pasa a ser un nodoy las dependencias entre los macronodos es una arista dirigida al macronodoque debe resolverse antes, luego se utiliza la función topological_sort dela librería Graph([11]) para crear el orden topológico de los macronodos yretornar todos los datos como se puede ver en el código 4.3.

  • 4.4. FUNCIÓN DE ORDENAMIENTO EXTERNO 51

    1 my $directed_graph = Graph : : Directed−>new( ) ;23 my $macro_nodes ;4 my $ i = 1 ;5 fo r each my $mn (@{$all_macro_node }) {6 $macro_nodes−>{$ i}−>{name} = j o i n ( ’ , ’ , @{$mn}) ;7 $macro_nodes−>{$ i}−>{nodes} = $mn ;8 $directed_graph−>add_vertex ( $ i ) ;9 $ i++;

    10 }1112 fo r each my $g_oder ( @ordered_graph ) {1314 my ( $ f i r s t , $second ) = s p l i t (DELIMITER, $g_oder ) ;1516 my ($f_num , $s_num) ;1718 fo r each my $n ( keys $macro_nodes ) {19 $f_num = $n i f ( j o i n ( ’ , ’ ,@{$macro_nodes−>{$n}−>{

    nodes }}) eq $ f i r s t ) ;20 $s_num = $n i f ( j o i n ( ’ , ’ ,@{$macro_nodes−>{$n}−>{

    nodes }}) eq $second ) ;21 }2223 $directed_graph−>add_edge ($f_num , $s_num) ;24 }2526 my @topo log i ca l_sor t = $directed_graph−>topo l o g i c a l_so r t ;2728 my $macro_nodes_ordered ;2930 my $ j = @topo log i ca l_sor t ;31 fo r each my $ i ( @topo log i ca l_sor t ) {32 $macro_nodes_ordered−>{$ j } = $macro_nodes−>{$ i } ;33 $j−−;34 }3536 my $ r e s u l t = {37 internal_macro_node_ordered => \

    @internal_macro_node_ordered ,38 ordered_graph => \@ordered_graph ,39 t opo l o g i c a l_so r t => [ $macro_nodes_ordered ]40 } ;4142 return $ r e s u l t ;

    Código 4.3: Extracto de código perteneciente a causalize

    En la variable $result se devuelve un hash donde hay suficiente informa-ción para poder interpretar los datos, estos son divididos en:

    internal_macro_node_ordered: están todos los macronodos con su or-den interno que debe respetarse.

  • 52 CAPÍTULO 4. IMPLEMENTACIÓN

    $ordered_graph: las dependencias entre los macronodos.

    $topological_sort: contiene el nombre de cada macronodos y el ordenen que debe ser resuelto.

  • Capítulo 5

    Ejemplos

    A continuación se puede ver un modelo simple el cual fue utilizado paratestear el algoritmo y luego se mostrará un ejemplo un poco más completoel cual trata sobre un circuito eléctrico. Sobre este último se desarrollarántodas las etapas del algoritmo.

    5.1. Modelo simple

    Este es un modelo sintético que no representa ningún modelo real, el cualtiene las propiedades de contener una lazo algebraico dentro de un for, dichomodelo se puede ver en el código 5.1.

    1 model Ejemplo12 constant In t eg e r N = 10 ;3 Real a [N] , b [N ] ;4 equat ion5 for i in 2 :N loop6 a [ i ]∗b [ i ]=8; // f i7 a [ i ]+b [ i ]∗b [ i −1]=20; // g i8 end for ;9

    10 a [ 1 ] ∗ b [ 1 ]=8 ; // f111 a [1 ]+b [1 ]=20 ; //g112 end Ejemplo1

    Código 5.1: Ejemplo1

    El modelo correspondiente asociado se puede ver en el código 5.2.

    1 $example1 = {2 f i => {3 ran => {4 0 => { i n i t => 2 , end => N, vars => [ ’ a ’ , ’ b ’ ] }5 } ,6 var_info => {7 a => {ran => {} , constant => [ ] } ,8 b => {ran => {} , constant => [ ] }

    53

  • 54 CAPÍTULO 5. EJEMPLOS

    9 } ,10 } ,11 g i => {12 ran => {13 0 => { i n i t => 2 , end => N, vars => [ ’ a ’ , ’ b ’ ] }14 } ,15 var_info => {16 a => { ran => {} , constant => [ ] } ,17 b => { ran => {18 0 => { i n i t => 2 , end => N } ,19 −1 => { i n i t => 1 , end => N−1}20 } ,21 constant => [ ]22 }23 } ,24 } ,25 f1 => {26 ran => {} ,27 var_info => {28 a => { ran => {} , constant => [ 1 ] } ,29 b => { ran => {} , constant => [ 1 ] }30 }31 } ,32 g1 => {33 ran => {} ,34 var_info => {35 a => { ran => {} , constant => [ 1 ]36 } ,37 b => { ran => {} , constant => [ 1 ]38 }39 }40 }41 } ;

    Código 5.2: Modelo Ejemplo1

    En la ecuación gi puede observarse que la variables b tiene dos índices,por un lado i y por otro lado i-1.

    Los rangos de los loops son los correctos así que el modelo no debemodificarse. Se crea el grafo bipartito asociado lo cual da como resultado elgrafo presente en la figura 5.1.

    Luego es necesario crear los macronodos asociados al grafo, aquí se veclaramente que hay dos macronodos:

    1. fi,a[2:N],gi,b[2:N]

    2. f1,a[1],g1,b[1]

    En cada uno de estos macronodos hay un lazo algebraico.Ahora se debe dar el orden correspondiente a cada macronodo. Solo el

    primer macronodo debe ser ordenado debido a que es el único que está dentrode un loop. Este orden será creciente debido a que el extremo inferior del

  • 5.1. MODELO SIMPLE 55

    Figura 5.1: Grafo bipartito.

    for, (cuando i es 2) necesita de una variable que debe resolverse fuera y antesdel mismo.

    A continuación se deben ver las dependencias entre los macronodos. Aquíla dependencia encontrada es fi,a[2:N],gi,b[2:N] –>f1,a[1],g1,b[1], lo cual sig-nifica que debe resolverse en primer lugar f1,a[1],g1,b[1] y luego el restantemacronodo.

    Se crea un nuevo grafo con los dos macronodos y la dependencia encon-tradas para poder obtener el orden topológico. En este caso, al no tener másmacronodos involucrados, en primer lugar debe resolverse el macronodo queestá fuera del loop y luego el macronodo está dentro del mismo.

    Finalmente el resultado final obtenido es: ([f1,g1,a,b],([a,1,1,0],[b,1,1,0]),[]),([fi,gi,a,b],([a,2,N,1],[b,2,N,1]),[b,1,1]), donde:

    ([f1,g1,a,b],([a,1,1,0],[b,1,1,0]),[]): f1,g1 son las ecuaciones, a,b son lasvariables, a es evaluado en 1 al igual que b y no hay variable que debaresolverse antes.

    ([fi,gi,a,b],([a,2,N,1],[b,2,N,1]),[b,1,1]): fi,gi son las ecuaciones, a,b lasvariables las cuales deben resolverse comenzando en 2 con direccióncreciente hasta llegar a N. La variable b evaluada en 1 debe resolverseantes de este macronodo.

    El modelo Modelica correspondiente es el que se puede ver en el