scieee AI-readable full text Open interactive document viewer

Simulación y optimización dinámica de redes de agua en Python

Villagrán Corrales, Gonzalo

Abstract

El objetivo del proyecto consiste en el desarrollo de modelos dinámicos de redes de agua a partir del paquete de simulación Epanet y su posterior uso para la optimización de la operación de la misma. Como entorno de desarrollo se ha elegido el entorno Python, por ser de libre distribución y con una gran potencia. Para abordar este objetivo, primero se ha estudiado el modelado de las redes de distribución de agua y se han estudiado técnicas numéricas de integración de las ecuaciones algebraico-diferenciales resultantes. Se ha estudiado también el paquete de simulación numérica de redes agua Epanet. Como primera aportación de este proyecto se ha desarrollado una librería en Python que permite extraer las ecuaciones que definen una red de aguas creada en Epanet. También se ha desarrollado unas rutinas que permiten realizar la simulación de dicha red en Python usando el método de Hardy Cross combinado con el método de integración de Runge Kutta. Los resultados obtenidos se han comprobado con Epanet en una red de prueba. La segunda aportación del proyecto consiste en el planteamiento del problema de control óptimo para la gestión eficiente de la red de agua. Para su resolución se ha utilizado el paquete CaSADi a partir de los modelos de red estudiados en el punto anterior. Esto se ha podido validar en un caso sencillo, quedando como trabajo futuro la creación de una plantilla que permita la resolución del problema de control óptimo para un modelo de red de agua creada en Epanet integrando el desarrollo anterior.

Full text

Simulación y optimización dinámica de redes de agua en Python Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de Tecnologías Industriales Simulación y optimización dinámica de redes de agua en Python Autor: Gonzalo Villagrán Corrales Tutor: Daniel Limón Marruedo Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 II III Trabajo Fin de Grado Grado en Ingenieria de Tecnologías Industriales Simulación y optimización dinámica de redes de agua en Python Autor: Gonzalo Villagrán Corrales Tutor: Daniel Limón Marruedo Catedrático de Universidad Dpto. de Ingenieria de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 IV V Trabajo Fin de Grado: Simulación y optimización dinámica de redes de agua en Python Autor: Gonzalo Villagrán Corrales Tutor: Daniel Limón Marruedo El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2018 El Secretario del Tribunal VI VII A ti mamá por ser mi ejemplo en como ser. A mis compañeros y amigos que me han acompañado en esta etapa. VIII IX Agradecimientos A la primera persona que le debo agradecer es a mi madre por todo el esfuerzo, ayuda y consejos que me has dado, no solo para esto sino a lo largo de la vida. A mis compañeros y amigos que me han acompañado durante todo el camino que hemos hecho, habéis sido parte fundamental en este tiempo. A ti Dani por brindarme la oportunidad y mostrarte tan dispuesto a ayudarme en cualquier cosa, incluso estando en Roma durante el transcurso de este TFG. Y por último a ti Marta, gracias por ser mi apoyo en cada paso que doy. Gonzalo Villagrán Corrales Roma, 2018 XVI ÍNDICE DE TABLAS Tabla 1-1. Modelos para pérdidas de fricción (S.I). 9 Tabla 1-2. Coeficientes de Rugosidad para una tubería nueva. 10 Tabla 1-3. Coeficientes de pérdidas menores. 12 XVII XVIII ÍNDICE DE FIGURAS Figura 1-1. Red de distribución de agua. 2 Figura 1-2. Red ramificada. 3 Figura 1-3. Red mallada. 3 Figura 1-4. Red mixta. 4 Figura 1-5. Esquema de una válvula. 5 Figura 1-6. Esquema continuidad de flujo en un nodo. 7 Figura 1-7. Tipos de elementos donde hay pérdidas menores. 12 Figura 1-8. Grupo de bombas en paralelo. 13 Figura 2-1. Ejemplo red Epanet. 18 Figura 2-2. Características del Reservorio. 18 Figura 2-3. Reservorio. 18 Figura 2-4. Características de la bomba. 19 Figura 2-5. Bomba. 19 Figura 2-6. Características del nodo. 19 Figura 2-7. Nodo. 20 Figura 2-8. Características del tanque. 20 Figura 2-9. Tanque. 20 Figura 2-10. Características de la tubería. 21 Figura 2-11. Tubería. 21 Figura 2-12. Creacion archivo ‘INP’. 22 Figura 3-1. Estructura de los nodos dentro del archivo “.inp”. 24 Figura 3-2. Linea de código donde introducimos nuestro fichero “.inp”. 24 Figura 3-3. Tabla de Butcher. 29 Figura 3-4. Representación gráfica de la red. 31 Figura 3-5. Curva definida por 3 puntos. 33 Figura 3-6. Evolución de la altura de los nodos. 35 Figura 3-7. Evolución de la altura de los reservorios. 36 Figura 3-8. Evolución de la altura del tanque. 36 Figura 3-9. Evolución de los Caudales. 37 Figura 3-10. Evolución caudales de bomba y válvula. 37 Figura 3-11. Evolución de la altura de los nodos. 38 Figura 3-12. Evolución de las alturas de los reservorios. 38 Figura 3-13. Evolución altura del tanque. 39 Figura 3-14. Evolucion de los caudales en las tuberías. 39 Figura 3-15. Evolución caudales bomba y válvula. 40 Figura 4-1. Definición parámetros. 43 XIX Figura 4-2. Punto inicial caudales y alturas. 43 Figura 4-3. Ecuaciones algorítmicas. 44 Figura 4-4. Ecuación de pérdidas. 44 Figura 4-5. Ecuación diferencial. 44 Figura 4-6. Funciones de coste. 44 Figura 4-7. Variables simbólicas. 46 Figura 4-8. Formulación del problema de integración. 46 Figura 4-9. Evolución de las alturas en los nodos. 47 Figura 4-10. Evolución de los caudales en las tuberías. 47 Figura 4-11. Evolución de la altuar en el tanque. 48 Figura 4-12. Evolución de las acciones de control de bomba y válvula. 48 Figura 4-13.Evolución de las alturas en los nodos. 49 Figura 4-14. Evolución de los caudales en las tuberías. 50 Figura 4-15. Evolución de la altuar en el tanque. 50 Figura 4-16. Evolución de las acciones de control de bomba y válvula. 51 XX Simulación y optimización dinámica de redes de agua en Python 1 INTRODUCCIÓN A UNA RED DE DISTRIBUCIÓN DE AGUA l primer punto que debemos de tener claro es la definición de una red de distribución de agua, que consiste en un sistema que permite recoger el agua de un punto de captación o varios y transportarla hasta diversos puntos donde se encuentran los usuarios de la red de abastecimiento. Este proceso se lleva a cabo gracias a los distintos elementos que podremos encontrar dentro de la red. El objetivo final del transporte del agua es que los usuarios de la misma la reciban en unas condiciones óptimas para el uso de cada uno. Por ello, habrá diversas características propias del agua que transportamos, las cuales serán una referencia para poder medir la calidad de este servicio. Entre ellas encontramos algunas como la presión, el caudal, la calidad, la continuidad del servicio, el precio. Debido a estos factores la optimización del proceso de distribución es esencial por todas las partes interesadas, ya que estamos mejorando por una parte el producto que se ofrece y por otra intentamos trabajar en un punto de rendimiento eficiente para la entidad que se dedica a su distribución. El estudio del proceso de la distribución de agua nos podrá dar una mejor visión del ámbito del problema el cual queremos resolver. 1.1. Partes de una red de agua Sabiendo la definición de una red de distribución de agua pasamos a los distintos elementos que componen a la misma red. Encontramos 3 partes diferenciadas dentro del conjunto a estudiar que podemos dividir en redes dependiendo de la misión que desempeñan. En este ejemplo vemos la disposición de una hipotética red de distribución donde podemos observar que el agua del reservorio, después de pasar por la zona de aducción, es capaz de llegar a la red de distribución y así a los usuarios finales. E “Un viaje de diez mil kilómetros empieza por un solo paso.” - Proverbio chino - 2 Simulación y optimización dinámica de redes de agua en Python 2 1.1.1 Red de captación Es la parte donde se realiza la labor de la extracción del agua. Esta tarea se realiza en zonas diferentes y dependiendo de la zona donde extraigamos el agua lo podemos clasificar. El agua se puede extraer de la superficie, de acuíferos subterráneos, de manantiales naturales, de aljibes o del mar. La captación del agua es donde empieza la red de abastecimiento. Las aguas subterráneas se captan con pozos o galerías de extracción, mientras que para el caso que se encuentre en la superficie se utilizan bocatomas, galerías filtrantes, paralelas o perpendiculares. Para el almacenamiento del agua se utilizan por ejemplo embalses que almacenaran el agua proveniente de ríos, arroyos y de esta manera proveen un caudal todo el año. 1.1.2 Red de aducción Es el tramo de canal abierto o cerrado el cual consiste en conectar el punto de captación de agua con el de tratamiento o almacenamiento de la misma. Estos tramos para transportar el agua serán los diversos tuneles, canales o tuberías cuyas características dependerán de los distintos factores que determinan el transporte de agua, es decir, el medio ambiente, el volumen de agua, el presupuesto disponible… 1.1.3 Red de distribución Es el principal objetivo de nuestro estudio, es la red que distribuye el agua desde la acometida de la aducción hasta los usuarios finales para objetivos diversos públicos, comercial, industrial… Este tipo de red se ven condicionadas sobretodo por el crecimiento desordenado y poco planificado de los nucleos urbanos. Es decir, el desarrollo de estas redes se ve condicionada por algunos factores como la topología del terreno, la disposición del nucleo urbano, asi como, de acometidas para la lucha contra incendios y riego. Figura 1-1. Red de distribución de agua. 3 Simulación y optimización dinámica de redes de agua en Python 3 Podremos clasificar la red de distribución dependiendo de la forma en la que se ha expandido. Tendremos 3 grupos diferenciados:  Red Ramificada: Su principal característica es que el agua solo puede circular en un sentido y se va ampliando añadiendo tuberías secundarias, terciarias… siendo cada vez de menor tamaño las tuberías que se van añadiendo a la red. Resultan especialmente utiles para pequeñas poblaciones o pueblos aislados debido a su bajo costo y sencillez. Figura 1-2. Red ramificada.  Red mallada: En este tipo de red el agua puede tomar diferentes sentidos debido a la forma que se le asigna al circuito de agua. Este tipo de configuración resulta útil cuando hay averias en una tubería, ya que gracias a la forma de la red, el fallo se puede aislar sin interrumpir el servicio de abastecimiento. Figura 1-3. Red mallada. 4 Simulación y optimización dinámica de redes de agua en Python 4  Red Mixta: Por último nos encontramos este tipo de configuración que corresponde a la mezcla de las dos anteriormente dichas siendo esta su configuración. Figura 1-4. Red mixta. 1.2. Componentes de una red de distribución de agua Una vez visto la descripción y los tipos de red de distribución que podemos encontrar procedemos a definir los distintos elementos que se hallan en el mismo y caracterizan el sistema que estamos estudiando. Estos componentes se dispondrán a lo largo de la red dependiendo de las necesidades que tengamos para asegurar un transporte de agua eficaz para asegurar la calidad del producto al final de su recorrido. 1.2.1. Tuberías a presión Se define por estar compuesta por 2 o más tubos ensamblados de tal forma que permita la circulación del fluido que estamos tratando. Por la tubería circula el agua de el punto de mayor presión hacia el de menor presión, están llenas en todo momento. En el recorrido de la tubería se suelen incorporar válvulas de corte o antiretorno. Es el entramado de la tubería existen pérdidas de carga que estudiaremos con detalle más adelante. La elección del material para crear la tubería se hará viendo las distintas características que necesitamos por parte del elemento para satisfacer las necesidades y objetivos del componente. Dentro de estos objetivos que ha de satisfacer la tubería encontramos la resistencia mecánica, durabilidad, resistencia a la corrosión, capacidad de conducción, economía, facilidad de conexión y reparación, y, especialmente, la conservación de la calidad del agua. La resistencia mecánica es un elemento importante a la hora de considerar que tipo de material necesitamos ya quela tubería se verá sometida a una gran cantidad de cargas tanto externas y también internas, por ejemplo, presión hidrostática. A la hora de elegir el material para construir la tubería se pueden usar una gama de materiales tales como plástico, hierro, acero, fundición, hormigón, cerámica… Que se escogerá dependiendo de las restricciones que la tubería tenga que satisfacer. 1.2.2. Bombas Reciben energía con el fin de elevar la carga de presión del agua para que esta fluya por la tubería. Muchos de sistemas de distribución de agua incorporan bombas en el sistema para trasladar el agua o mantener presiones 5 Simulación y optimización dinámica de redes de agua en Python 5 que sean requeridas en diversos tramos. Gracias a estas bombas se nos permite realizar tareas como:  Elevar el agua desde un terreno superficial o incluso subterráneo, hasta las plantas de almacenamiento, tratamiento o directamente a la red de distribución.  Incremento de la presión en zonas especificas del sistema.  Transporte en unidades de tratamiento, remover solidos que se han depositado con el paso del tiempo, retrolavado de filtros… Las bombas normalmente están accionadas electrónicamente, por ello se pueden parar o encender en momentos determinados, por ejemplo, cuando el nivel del tanque supere o sea menor que un determinado punto de control o cuando la presión que tenemos en un nudo caiga por debajo de un cierto umbral. Algunos tipos de bomba que realizan estas funciones son:  Bombas de velocidad fija.  Bombas de velocidad variable.  Bombas de aceleración variable. 1.2.3. Válvulas Son dispositivos con la función de detener, iniciar o controlar las características del flujo dentro de los conductos de presión, se utilizan para regular el caudal y la presión. Los podemos encontrar dependiendo de la manera en que se accionen de diversos tipos como manuales, automáticos o semiautomático. Una válvula se compone de un cuerpo y partes internas que son los que toman parte en regular el flujo. Luego tendremos un servomotor o actuador que modifican la posición del obturador dependiendo de la señal de control que llegue. Figura 1-5. Esquema de una válvula. Las válvulas se pueden clasificar de distintos tipos de forma dependiendo de las características y su función, en este caso al trabajar con el software EPANET, clasificaremos las mismas teniendo en cuenta los elementos que estarán a disposición a la hora de trabajar con el software en cuestión. Dividimos los tipos válvulas en:  Válvulas Reductoras de Presión.  Válvulas Sostenedoras de Presión.  Válvulas de Rotura de Carga.  Válvulas Limitadoras de Caudal.  Válvulas Reguladoras por Estrangulación.  Válvulas de Propósito General. Las válvulas reductoras de presión tienen la misión de limitar la presión en un punto de la red de distribución que la contenga. Tiene 3 estados en los que puede trabajar para llevar a cabo su objetivo: 12 Simulación y optimización dinámica de redes de agua en Python 12 𝑚= K 12.1𝐷4 (1–17) Donde: ℎ𝑚 Pérdidas menores 𝑚 Coeficiente de pérdidas menores basado en el caudal 𝐾 Coeficiente de pérdidas menores basado en la pieza Donde K dependerá del elemento y es una constante que determinamos experimentalmente. Figura 1-7. Tipos de elementos donde hay pérdidas menores. Tabla 1-3. Coeficientes de pérdidas menores. Accesorios Coeficientes de pérdidas menores Válvula de Globo, totalmente abierta 10.0 Válvula de Ángulo, totalmente abierta 5.0 Válvula de Retención de Clapeta, totalmente abierta 2.5 Válvula de Compuerta, totalmente abierta 0.2 Codo de radio pequeño 0.9 Codo de radio medio 0.8 Codo de radio grande 0.6 Codo a 45° 0.4 Codo cerrado con inversión del flujo 2.2 Te estándar - dirección de paso 0.6 Té Estándar – flujo desviado 1.8 Entrada Brusca 0.5 13 Simulación y optimización dinámica de redes de agua en Python 13 Salida brusca 1.0 Entonces podemos determinar las pérdidas totales en la red de distribución de agua como: ℎ𝑇=∑ℎ𝑚𝑡+ ∑ℎ𝐿𝑡 (1–18) Donde: ℎ𝑚𝑡 Pérdidas menores totales ℎ𝐿𝑡 Pérdidas por fricción totales ℎ𝑇 Pérdidas totales 1.3.3.2. Bombas La característica más importante para definir el comportamiento de una bomba es su curva característica. Esta curva determina una relación entre la altura y el caudal que desarrolla una bomba a su velocidad nominal. Esta curva tiene la particularidad de que a cuanto más caudal, más disminuye la altura de impulsión, es decir la energía aportada al caudal total. Trabajaremos con 2 tipos de bombas: bombas de velocidad fija y bombas de velocidad variable. El aumento de presión en bombas con velocidad fija se define como: ∆ℎ=ℎ𝑑−ℎ𝑠 𝐷𝑜𝑛𝑑𝑒 ℎ𝑑≥ℎ𝑠 Siendo: ∆ℎ Es el salto de presión ℎ𝑑 Presión en el cabezal de entrega ℎ𝑠 Presión en el cabezal de succión (1–19) Figura 1-8. Grupo de bombas en paralelo. Como se muestra en la figura, las bombas se pueden disponer también en paralelo, así sus caudales van a parar a una tubería que comparten ambos y obteniendo un mayor caudal. Modelaremos el problema de tal forma que: 14 Simulación y optimización dinámica de redes de agua en Python 14 ∆ℎ=𝑔(𝑞,𝑢) Donde: ∆ℎ Es el salto de presión 𝑢 Número de bombas que están encendidas (u = 1, …, U) 𝑞 Flujo total bombeado por el grupo de bombas (1–20) La característica de 𝑔(𝑞,𝑢) no es de tipo lineal, por ello utilizaremos una aproximación por una función cuadrática. 𝑔(𝑞,𝑢)={A(𝑞𝑢)2+B(qu)+C u≠0 0 u=0 Donde: 𝐴<0 Es el salto de presión 𝐵≤0 Coeficiente del componente lineal del modelo de la bomba (flujo operativo estable) 𝐶>0 Cota de cierre (apagado) (1–21) En el caso de que tengamos bombas con velocidad variable el modelo a utilizar es: ∆ℎ=𝑔(𝑞,𝑢,𝑠) (1–22) 𝑠=𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑑𝑒 𝑜𝑝𝑒𝑟𝑎𝑐𝑖ó𝑛 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑛𝑜𝑚𝑖𝑛𝑎𝑙 (1–23) Donde: 0<𝑠≤1 Factor de velocidad de la bomba (1 para bombas de velocidad fija) Entonces escribimos la ecuación de nuevo ahora con: 𝑔(𝑞,𝑢)={A(𝑞𝑢)2+B(qu)+C u≠0 0 u=0 (1–24) 15 Simulación y optimización dinámica de redes de agua en Python 15 1.3.3.3. Válvulas Dentro del análisis hidráulico que hacemos al sistema bajo estudio determinamos las pérdidas de carga para un caudal determinado como: 𝐻𝑖−𝐻𝑗=∆hij=rQij n+mQij 2 (1–25) Donde: 𝐻𝑖 Altura piezométrica en el nudo de inicio i 𝐻𝑗 Altura piezométrica en el nudo final j ∆hij Pérdida de carga en la válvula r Coeficiente de resistencia m Coeficiente de pérdidas menores n Exponente de caudal Qij Caudal del nodo i al nodo j Las válvulas pueden cambiar de estado y de consigna según las distintas características en las válvulas. Las válvulas abiertas se les asigna un valor del coeficiente r calculado bajo el supuesto de que la válvula actúa como una tubería lisa (f = 0,02), cuya longitud es dos veces el diámetro de la válvula: ∆ℎ=𝑔(𝑞,𝑢,𝑠) (1–26) ∆ℎ𝑖𝑗=2𝑥82.7𝑥106𝑥𝑓 𝐷5𝑥𝑄𝑖𝑗2 (1–27) Las líneas cerradas se supone que obedecen a una relación de pédidas lineal con un factor de resistencia muy grande ∆ℎ𝑖𝑗=108𝑥𝑄𝑖𝑗2 (1–28) 1.3.3.4. Reservorio Al trabajar con la hipótesis de que son elementos externos con una capacidad ilimitada, adoptamos la siguiente ecuación: 𝐻𝑖=𝐻𝑒=𝑐𝑡𝑒 (1–29) 16 Simulación y optimización dinámica de redes de agua en Python 16 1.3.3.5. Tanques Son elementos los cuales se ven afectados con la evolución en el tiempo del sistema. Consideramos que la geometría del tanque solo puede ser de tipo cilíndrico, determinando la característica del componente como: 𝑆𝑑𝐻𝑖 𝑑𝑡=𝑄𝑖𝑗 (1–30) Donde: 𝑆 Sección del tanque 𝑑𝐻𝑖 𝑑𝑡 Variación de la altura en el tiempo 𝑄𝑖𝑗 Caudal 1.3.3.6. Emisor Simula el flujo de salida a través de una tobera o un orificio que descargan a la atmósfera. El caudal descargado es proporcional a la raíz cuadrada de la presión y al coeficiente de descarga. Este caudal variará dependiendo de la presión existente en el nodo. Se representa: 𝑙𝑞𝑖=𝐶𝑝∝ Donde: 𝑙𝑞𝑖 Flujo de pérdidas en el nodo 𝐶 Coeficiente de descarga 𝑝 Presión disponible en el nodo ∝ Exponente de la presión. (1–31) 17 Simulación y optimización dinámica de redes de agua en Python 17 2. EPANET l software que utilizaremos como referencia para obtener los parámetros de los elementos que conforman la red de distribución de agua será Epanet, una herramienta capaz de simular a lo largo del tiempo la evolución de nuestro sistema en estudio. La razón por la que usamos este software es gracias a que nos permite hacer análisis hidráulicos de redes de tuberías a partir de las características físicas de las tuberías y dinámicas de los nudos para obtener la presión y los caudales en nodos y tuberías respectivamente. Incluyendo también el desarrollo de otros elementos que conforman la caracterización de la red de agua como la calidad del agua, parte que en el desarrollo del trabajo no se verá comprometida ya que nos centraremos siempre en el análisis de caudales y alturas. 2.1.1. Descripción de la red de agua Para poder observar la evolución de la red de agua a lo largo del tiempo, necesitaremos tanto poder describir el sistema en nuestro programa como luego integración para observar cómo cambian los parámetros que determinan la física del problema. En el anterior punto del trabajo, se ha desarrollado las distintas ecuaciones matemáticas que serán las que usará Epanet para integrar la solución del problema a lo largo del tiempo, y así como las que utilizaremos nosotros posteriormente para simular nuestro problema a lo largo del tiempo. Gracias a las opciones que nos ofrece Epanet, podemos imponer las características de los elementos descritos a lo largo del primer punto del documento, que serán los objetos que utilicemos. Epanet nos permite crear el sistema objetivo dentro de un entorno gráfico, es decir, seleccionamos los distintos elementos que caracterizan la red introduciéndolos en un mapa donde una vez elegidos los distintos objetos con los que trabajaremos, solo nos falta unirlos entre ellos teniendo en cuenta siempre las ecuaciones de continuidad, lo que quiere decir que la forma en que unamos los elementos es esencial para el desarrollo del problema, y por último introduciendo las características de los diversos elementos que podemos encontrar dentro del mapa que hayamos creado. El siguiente ejemplo, es la ilustración de una red de agua genérica donde podemos encontrar los diversos componentes con los que trabajaremos a lo largo de nuestro proyecto: E “El pensamiento es el corcel, la razón el jinete" Aurore Dupin 18 Simulación y optimización dinámica de redes de agua en Python 18 Figura 2-1. Ejemplo red Epanet. Definimos los componentes que conforman nuestra red de agua, donde podemos acceder seleccionando el objeto y haciendo doble click, y la correspondencia gráfica dentro del mapa:  Reservorio Figura 2-2. Características del Reservorio. Figura 2-3. Reservorio. 19 Simulación y optimización dinámica de redes de agua en Python 19  Bomba Figura 2-4. Características de la bomba. Figura 2-5. Bomba.  Nodo Figura 2-6. Características del nodo. 20 Simulación y optimización dinámica de redes de agua en Python 20 Figura 2-7. Nodo.  Tanque Figura 2-8. Características del tanque. Figura 2-9. Tanque. 21 Simulación y optimización dinámica de redes de agua en Python 21  Tubería Figura 2-10. Características de la tubería. Figura 2-11. Tubería. 2.1.2. Datos de la red Una vez ya tenemos definido nuestro problema a resolver, introducimos en una de las funciones claves que nos ofrece Epanet. Nos referimos a la creación de un tipo de archivo “Ejemplo.inp”, la cual nos permite trabajar con los datos generados en la caracterización de la red del software. Es decir, tenemos dos partes diferenciadas a la hora de trabajar con Epanet para el desarrollo de nuestra actividad. La primera, como está explicado en el anterior punto, será la creación de nuestro mapa con los distintos elementos que caracerizan a la red. El siguiente paso,después de crear esta red y tener nuestro archivo de tipo “Ejemplo.net”, será crear el archivo.inp, ya que gracias a las características del mismo nos permite a nosotros utilizar los datos que genera el programa para nuestro estudio personal. La creación del archivo en cuestión se realiza con la función de Epanet ‘Exportar’ en la siguiente figura se ilustra como crear el archivo donde encontraremos los diferentes datos que usaremos para caracterizar a nuestra red. 28 Simulación y optimización dinámica de redes de agua en Python 28 𝐺3 Matriz de que contiene características de válvulas y bombas. 𝐺4 Matriz que contiene las pérdidas según H-W en las tuberías. 𝑄 Caudales que definen al sistema Las matrices que acabamos de mencionar dependen de diferentes elementos, en este caso 𝐺4 solo depende de como hemos definido los coeficientes de pérdidas en las tuberías, en cambio 𝐺1, 𝐺2, 𝐺3 contienen información sobre la curva característica de la bomba y sobre las pérdidas de carga respectivas a la válvula, teniendo en cuenta sus acciones de control. En definitiva, utilizamos el modelo matemático usado por Epanet de los elementos, mientras que el sistema de ecuaciones que utilizamos para modelar la red que planteamos resuelven el mismo problema, pero nosotros expresamos las mismas de otra manera para mayor comodidad tanto a la hora del cálculo como a la de analizar las diferentes partes de las ecuaciones. 3.1.3. Integración numérica de las ecuaciones del modelo Una vez construido el modelo mediante las distintas matrices que lo conforman, se va a proceder a integrar numéricamente las ecuaciones algebraico diferenciales que lo describen. El metodo escogido para la integración del sistema a lo largo del tiempo serán el método Hardy Cross para la resolución de las ecuaciones algebráicas de balance y el método Runge Kutta para la integración de las ecuaciones diferenciales. 3.1.3.1. Hardy Cross Es un método de resolución de las ecuaciones algebraicas que componen nuestro problema. En nuestros programas el desarrollo de este método está contenido en al archivo “CrossHardy.py”. Se asume que la actuación u y las alturas de los tanques Hx son datos de entrada del algoritmo. El método es un método iterativo, es decir, en el que en cada iteración k+1, a partir de una estimación de caudal 𝑄𝑘 se determina 𝑄𝑘+1= 𝑄𝑘+ ∆𝑄𝑘 a partir del cálculo del gradiente de 𝐺(𝑄𝑘,𝑢), 𝑇𝑘, que es fácil de calcular. Por ejemplo para un caudal: |𝑄𝑘+1|n−1 𝑄𝑘+1≌|𝑄𝑘| 𝑛−1𝑄𝑘+𝑛|𝑄𝑘| 𝑛−1Δ𝑄𝑘 (3–07) Siguiendo un desarrollo en serie de Taylor, se puede escribir 𝐺(𝑄𝑘+1,𝑢)≌ G(𝑄𝑘,u)+ 𝑇𝑘Δ𝑄𝑘 (3–08) Entonces las ecuaciones se pueden reescribir como: 𝐴𝑄𝑘+𝐴Δ𝑄𝑘=𝐷 (3–09) 𝐴𝑇𝐻𝑘+1+{G(𝑄𝑘,u)+ 𝑇𝑘Δ𝑄𝑘}+𝑇𝑘Δ𝑄𝑘+𝐴𝑟𝑇𝐻𝑟+𝐴𝑡𝑇𝐻𝑥=0 (3–10) Nos quedaría resolver el sistema lineal que planteamos: (𝐴 0 𝑇𝑘𝐴𝑇)(Δ𝑄𝑘 𝐻𝑘+1)=( −𝐴𝑄𝑘−𝐷 −G(𝑄𝑘,u)−𝐴𝑟𝑇𝐻𝑟−𝐴𝑡𝑇𝐻𝑥) (3–11) 29 Simulación y optimización dinámica de redes de agua en Python 29 Se determina ∆𝑄𝑘 y se actualiza 𝑄𝑘+1=𝑄𝑘+Δ𝑄𝑘 (3–12) Se itera hasta que ∆𝑄𝑘 sea muy pequeño. 3.1.3.2. El método de Runge Kutta Analizaremos la solución de la ecuacion diferencial, utilizaremos el método de Runge Kutta de orden 4 consiguiendo la solucion a partir de las soluciones obtenidas en las ecuaciones algebraicas que hemos estudiado antes. Un problema de valor inicial que aproximamos: 𝑥𝑘+1=𝑥𝑘+ℎ𝑘∑𝑏𝑖∗𝑘𝑖 4 𝑖=1 (3–13) 𝑧𝑖=H[𝑥𝑘+ℎ𝑘∑𝑎𝑖𝑗𝑘𝑗,𝑢(𝑡𝑘+𝑐𝑖ℎ𝑘)] 𝑖−1 𝑗=1 (3–14) 𝑘𝑖=f[𝑥𝑘+ℎ𝑘∑𝑎𝑖𝑗𝑘𝑗,𝑧𝑖,𝑢(𝑡𝑘+𝑐𝑖ℎ𝑘)] 𝑖−1 𝑗=1 (3–15) Utilizaremos la Tabla de Butcher: {𝑎𝑖𝑗},{𝑏𝑖},{𝑐𝑖} (3–16) Figura 3-3. Tabla de Butcher. Definimos 𝑘𝑖 de forma recursiva: 30 Simulación y optimización dinámica de redes de agua en Python 30 𝑘1=f(𝑥𝑘,𝑢(𝑡𝑘)) (3–17) 𝑘2=f(𝑥𝑘+12ℎ𝑘𝑘1,𝑢(𝑡𝑘+12ℎ𝑘)) (3–18) 𝑘3=f(𝑥𝑘,+12ℎ𝑘𝑘2,𝑢(𝑡𝑘+12ℎ𝑘)) (3–19) 𝑘4=f(𝑥𝑘+ℎ𝑘𝑘3,𝑢(𝑡𝑘+ℎ𝑘)) (3–20) Entonces se calcula: 𝑥𝑘+1=𝑥𝑘+ℎ𝑘(16𝑘1+13𝑘2+13𝑘3+16𝑘4) (3–21) 3.2. Ejemplo práctico Representamos el caso de estudio de una red genérica que planteamos, en este caso el ejemplo de red que analizamos es una red que contiene 2 reservorios, 1 válvula, 1 bomba, 1 tanque, 5 nodos y una demanda en uno de los nodos. Durante el desarrollo de este punto estudiaremos tanto el estudio matemático de las ecuaciones que caracterízan el sistema, como analizaremos el ejemplo dentro del código desarrollado en Python y en Epanet para poder visualizar los resultados que nos ofrecen y discutirlos. 31 Simulación y optimización dinámica de redes de agua en Python 31 La red que proponemos para el caso de estudio es: Figura 3-4. Representación gráfica de la red. Iniciamos con la definición de los parámetros del sistema, parte importante ya que lo ideal es que el sistema se estabilice a lo largo del tiempo. 3.2.1. Definición del Sistema  Nodos Respecto a los nodos, la característica que nos interesa es la demanda que corresponde a cada nodo, en nuestro caso: 𝑁5∶𝐷5=12 [LPS]  Reservorios En lo que respecta a los embalses, definimos la altura que al suponerse masas de agua de gran tamaño, trabajamos con estas alturas como invariables. 𝑅1=30[𝑚] 𝑅2=10[𝑚]  Tanques Los tanques serán espacios donde el agua puede variar dependiendo de las características dinámicas de la red y que definimos también por las características físicas del deposito, definiremos: 𝑁𝑖𝑣𝑒𝑙 𝑖𝑛𝑖𝑐𝑖𝑎𝑙 𝑑𝑒𝑙 𝑡𝑎𝑛𝑞𝑢𝑒∶𝐼𝑁𝑖=17 [𝑚] 𝑁𝑖𝑣𝑒𝑙 𝑚í𝑛𝑖𝑚𝑜 𝑑𝑒𝑙 𝑡𝑎𝑛𝑞𝑢𝑒: 𝐼𝑚𝑖𝑛=2 [𝑚] 32 Simulación y optimización dinámica de redes de agua en Python 32 𝑁𝑖𝑣𝑒𝑙 𝑚á𝑥𝑖𝑚𝑜 𝑑𝑒𝑙 𝑡𝑎𝑛𝑞𝑢𝑒:𝐼𝑚𝑎𝑥=20 [𝑚] 𝐷𝑖á𝑚𝑒𝑡𝑟𝑜:𝐷=10 [𝑚]  Tuberías En la definicion de estos elementos resulta fundamental el sentido del flujo, que será indispensable para la definicion del sistema y sus signos. Tubería Nodo inicial Nodo final T1 N1 N2 T5 N3 N2 T2 N2 N4 T4 N4 N5 T3 N4 D1 Definimos todas las tuberías con las mismas características: 𝐿𝑜𝑛𝑔𝑖𝑡𝑢𝑑=𝐿𝑜𝑛𝑔𝑡𝑢=400[𝑚] 𝐷𝑖𝑎𝑚𝑒𝑡𝑟𝑜=𝐷𝑖𝑎𝑚𝑡𝑢=100[𝑚𝑚] 𝑅𝑢𝑔𝑜𝑠𝑖𝑑𝑎𝑑=𝑅𝑢𝑔𝑡𝑢=150 [𝐶𝑜𝑒𝑓𝑖𝑐𝑖𝑒𝑛𝑡𝑒 𝐻−𝑊]  Bombas Las características de las bombas vienen a partir de la curva característica y del sentido que elijamos para la misma. El primer paso que seguimos para definirla es concretar la dirección del flujo. Nodo Inicial Nodo Final R2 N3 La curva que utilizamos es la curva de 3 puntos, que viene determinada por: Caudal[LPS] Altura[m] 0 40 5 25 8 2 33 Simulación y optimización dinámica de redes de agua en Python 33 Figura 3-5. Curva definida por 3 puntos.  Válvulas Como hemos mencionado antes, las válvulas que vamos a utilizar en nuestro trabajo serán las reguladoras, para definir correctamente la válvula definimos la dirección del flujo y sus parámetros internos. Nodo Inicial Nodo Final R1 N1 𝐷𝑖𝑎𝑚𝑒𝑡𝑟𝑜=𝐷𝑖𝑎𝑚𝑣𝑎𝑙=100[𝑚𝑚] 𝐶𝑜𝑛𝑠𝑖𝑔𝑛𝑎=𝑇𝑖𝑝𝑣𝑎𝑙=40[𝐶𝑜𝑒𝑓𝑖𝑐𝑖𝑒𝑛𝑡𝑒 𝑑𝑒 𝑝é𝑟𝑑𝑖𝑑𝑎𝑠] 3.2.2. Planteamiento de las ecuaciones Aplicamos el sistema de ecuaciones que hemos desarrollado en el punto 3.1.2, con lo cual quedarían:  Ecuaciones algebraicas 𝐴𝑄=𝐷 (3–02) ( −1 0 0 0 0 1 0 1 1 −1 0 0 0 0 0 −1 0 0 0 0 1 0 0 1 1 −1 0 0 0 0 0 1 0 0 0 ) ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) = ( 0000 𝐷5 ) 𝐴𝑇𝐻+G(𝑄,u)+𝐴𝑟𝑇𝐻𝑟+𝐴𝑡𝑇𝐻𝑥=0 (3–03) 34 Simulación y optimización dinámica de redes de agua en Python 34 ( −1 0 0 0 0 1 0 1 1 −1 0 0 0 0 0 −1 0 0 0 0 1 0 0 1 1 −1 0 0 0 0 0 1 0 0 0 ) 𝑇 ( 𝐻𝑁1 𝐻𝑁2 𝐻𝑁3 𝐻𝑁4 𝐻𝑁5 ) +𝐺(𝑄,𝑢)+ ( 0 0 0 0 0 0 0 0 0 0 −1 0 0 −1 ) (𝐻𝑅1 𝐻𝑅2)+ ( 0000100 ) (𝐻𝑥)=0 G(𝑄,u)=𝐺1(𝑢)+𝐺2(𝑢).∗𝑄+𝐺3(𝑢).𝑄∗𝑄+𝐺4|𝑄|^0.852.∗𝑄 (3–04) G(𝑄,u)= ( 000000 −40∗𝑢𝑏𝑜𝑚𝑏𝑎 ) + ( 000000 0.083∗𝑢𝑏𝑜𝑚𝑏𝑎 ) ∗ ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) + ( 00000 0.033∗𝑢𝑣á𝑙𝑣𝑢𝑙𝑎 0.583∗𝑢𝑏𝑜𝑚𝑏𝑎 ) ∗ ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) ∗ ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) + ( 0.0823 0.0823 0.0823 0.0823 0.0823 00 ) | | ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) | | ^0.852∗ ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 )  Ecuaciones diferenciales 𝑑𝐻𝑥 𝑑𝑡 =𝐵𝑄 (3–01) 𝑑𝐻𝑥 𝑑𝑡 =(0 0 0 0 0.04587 0 0) ( 𝑄𝑁1𝑁2 𝑄𝑁3𝑁2 𝑄𝑁2𝑁4 𝑄𝑁4𝑁5 𝑄𝑁4𝐷1 𝑄𝑅1𝑁1 𝑄𝑅2𝑁3 ) Dejamos planteadas las ecuaciones que modelan el sistema, y que nos permitirán analizar la dinámica del mismo a lo largo del tiempo. 35 Simulación y optimización dinámica de redes de agua en Python 35 3.2.3. Evolución en el tiempo del Sistema En este apartado desarrollamos la aplicación del método de simulación que hemos visto a lo largo de todo el cápitulo, partiendo de los datos hasta el método de iteración que utilizamos para realizarlo. La simulación que vamos a realizar consiste en nuestro caso leer el archivo “D14.inp”, con nuestro programa “Obtenerdatos.py” como hemos descrito antes. Este archivo tiene la función de simular la red de agua que hemos visto en el ejemplo anterior durante un periodo de 300 horas y forzando al sistema a tener una demanda constante de 14 en el N5 durante el transcurso de la simulación. 3.2.3.1. Simulación en Spyder La evolución de los datos que obtenemos en nuestro código desarrollado en Spyder, los obtenemos con el programa llamado “Graficas.py”, el cual será el encargado como su propio nombre indica, de mostrarnos las gráficas de las características físicas que estudiamos dentro del proyecto. Obtenemos las siguientes representaciones gráficas:  Conexiones en la red Figura 3-6. Evolución de la altura de los nodos. 36 Simulación y optimización dinámica de redes de agua en Python 36  Reservorios Figura 3-7. Evolución de la altura de los reservorios.  Tanque Figura 3-8. Evolución de la altura del tanque. 37 Simulación y optimización dinámica de redes de agua en Python 37  Tuberías Figura 3-9. Evolución de los Caudales.  Bomba y válvula Figura 3-10. Evolución caudales de bomba y válvula. 44 Simulación y optimización dinámica de redes de agua en Python 44 El siguiente paso consiste en definir las ecuaciones que determinan nuestro problema en nuestro caso, vienen definidas dentro de las funciones “Algorit.py”, “Gfun.py”, “Ode.py” y “Funcoste.py”. Lo que encontramos dentro de estos scripts son las ecuaciones que definen al sistema específico que estamos estudiando y la función de coste que nuestro problema de control óptimo quiere minimizar. En esta última función la comentaremos un poco más a fondo a continuación. Entonces las ecuaciones del ejemplo quedarían como: Figura 4-3. Ecuaciones algebráicas. Figura 4-4. Ecuación de pérdidas. Figura 4-5. Ecuación diferencial. Figura 4-6. Funciones de coste. En las funciones de coste podemos ver que nosotros utilizamos una referida a una Qopt y Hopt determinadas, estas son la H y Q de equilibrio para una demanda de 14, con esto queremos forzar al sistema a llegar a este punto de equilibrio que conseguimos en la simulación del sistema anteriormente. 45 Simulación y optimización dinámica de redes de agua en Python 45 Estas alturas de referencia y caudales de referencia representan en la realidad, unas condiciones de equilibrio en las cuales la red trabaja eficazmente, por ello las incluimos dentro de nuestra función de coste. Podemos observar como también incluimos en la función de coste el parámetro de control de bomba y válvula, ya que lo queremos minimizar a través de la matriz de coste que acompaña al término. Cualquiera de las otras funciones de coste que vienen expresadas dentro de la Figura 4-6 es válida, solamente que el problema en estudio cambiaría ya que la función objetivo a minimizar dependería de una altura óptima para el tanque y no de las conexiones o caudales en las tuberías. Una vez ya estudiadas las funciones y los parámetros que vamos a utilizar pasamos a las restricciones que imponemos para que las condiciones de nuestro ejemplo anterior se ajusten a la dinámica que tiene que seguir el problema planteado en CasADi, estas restricciones de las que estamos hablando consisten en:  La restricción del tanque el cual tiene una altura mínima y máxima, en este caso son condiciones físicas del tanque debidas a sus condiciones de funcionamiento: 𝑙𝑏𝑥=2 𝑢𝑏𝑥=20 Donde: 𝑙𝑏𝑥 Restricción inferior de x. 𝑢𝑏𝑥 Restricción superior de x.  Tenemos las restricciones referidas a las alturas y caudales, las cuales vienen determinadas por la física del problema y las referencias que hemos cogido: 𝑙𝑏𝐻𝑧=0 𝑢𝑏𝐻𝑧=∞ 𝑙𝑏𝑄𝑧=−∞ 𝑢𝑏𝑄𝑧=∞ Donde: 𝑙𝑏𝐻𝑧 Vector de restricciónes inferiores de las alturas. 𝑢𝑏𝐻𝑧 Vector de restricciónes superiores de las alturas. 𝑙𝑏𝑄𝑧 Vector de restricciónes inferiores de los caudales. 𝑢𝑏𝑄𝑧 Vector de restricciónes superiores de los caudales. El sentido de estas restricciones es que no contemplamos ninguna para la dinámica del problema excepto que las alturas no pueden ser negativas, ya que esto según como hemos definido nuestro problema es físicamente imposible. El tamaño de los vectores de restricciones en este caso será igual al número de nodos referidos a las alturas y para los caudales a la cantidad de ramas que encontremos en el sistema, que como hemos mencionado en capítulos anteriores, las ramas son la suma de tuberías, bombas y válvulas, que en conjunto componen todo el entramado de líneas que forman la red. 46 Simulación y optimización dinámica de redes de agua en Python 46  Por último estudiamos las restricciones de las acciones de control, que vienen determinadas por: 𝑙𝑏𝑢=0 𝑢𝑏𝑢=∞ Donde: 𝑙𝑏𝑢 Vector de restricciones inferiores de u. 𝑢𝑏𝑢 Vector de restricciones superiores de u. Esto indica que no ponemos restricciones para las acciones de control ni de válvulas (primera componente) ni de bombas (segundo componente). Lo única restricción que imponemos es la inferior, ya que no permitimos cambiar el signo de las acciones de control. Antes de empezar con la llamada a las funciones que hemos definido antes y con la integración en el tiempo, tenemos que definir las varibles simbólicas con las que trabajará casadi, que en este caso son: Figura 4-7. Variables simbólicas. Una vez ya tenemos definido nuestro problema, podemos empezar la iteración dentro de CasADi. Esto lo haremos definiendo el problema de integración que tenemos que resolver. En este caso es necesario formular el DAE (differential-algebraic system of equations), y elegir el método de iteración que queramos, una vez hecho esto ya tenemos nuestro problema preparado para intentar buscar una solución óptima con todos los requisitos que hemos determinado a lo largo del problema. Figura 4-8. Formulación del problema de integración. El tipo de sistema que estamos tratando se trata de un RTO, por lo cual le añadiremos a nuestro sistema una condición de solución cíclica dentro de nuestro periodo, así el programa inicia en un punto y acaba al final del tiempo de estudio en el mismo. Al introducir los datos que hemos definido en el programa, nos calcula una trayectoria en el tiempo para todas las variables que conciernen al sistema. A continuación vemos la evolución de las variables objetivo con el tiempo:  Conexiones en la red 47 Simulación y optimización dinámica de redes de agua en Python 47 Figura 4-9. Evolución de las alturas en los nodos.  Caudales Figura 4-10. Evolución de los caudales en las tuberías. 48 Simulación y optimización dinámica de redes de agua en Python 48  Tanque  Acciones de control Figura 4-12. Evolución de las acciones de control de bomba y válvula. Ahora con el mismo ejemplo y utilizando los mismos parámetros a excepción de una variación referida a la matriz de costes de las acciones de control, ejecutamos el CasADi que tenemos y observamos la variación en el tiempo de las variables de la red. La matriz en cuestión que afecta al control es la matriz R, que tiene dos componentes, la primera componente Figura 4-11. Evolución de la altuar en el tanque. 49 Simulación y optimización dinámica de redes de agua en Python 49 que afecta al control de la válvula mientras el segundo es el que acompaña el término de control de la bomba, al cambiar, el número de la matriz de costes dentro de R el sistema varía intentado alcanzar una solución óptima del problema minimizando las variables que podemos cambiar. 𝑅=(50 0 0 5) Donde: 𝑅 Matriz de coste que afecta a las acciones de control.  Conexiones en la red Figura 4-13.Evolución de las alturas en los nodos. 50 Simulación y optimización dinámica de redes de agua en Python 50  Caudales Figura 4-14. Evolución de los caudales en las tuberías.  Tanque Figura 4-15. Evolución de la altuar en el tanque. 51 Simulación y optimización dinámica de redes de agua en Python 51  Acciones de control Figura 4-16. Evolución de las acciones de control de bomba y válvula. Vemos que al contrario que en este caso, el problema intenta minimizar el coste minimizando la acción de la válvula ya que el coste de este elemento es alto comparado con el resto del sistema. Entonces provoca una variación mayor que en la primera simulación ya que obliga a las demás variables a cambiar debido a que esta vez la acción de control referida a la válvula efectua el menor impacto posible dentro del modelo. 52 Simulación y optimización dinámica de redes de agua en Python 52 CONCLUSIONES En el desarrollo del trabajo hemos estudiado con profundidad el modelo de la red de agua y su simulación dentro del lenguaje Python. A lo largo del trabajo de fin de grado, se le ha dado mucha importancia al modelado de la red, ya que es un punto clave para confiar en los datos que obtenemos dentro de la simulación en Spyder. Podemos fiarnos de los resultados obtenidos en nuestro código ya que en la comparación con los resultados que nos ofrece Epanet, salen soluciones casi exactamente iguales. Entonces podemos determinar que tanto como nuestro modelado como el método de integración del sistema es correcto. El sistema de simulación se ha realizado para una red genérica que contenga válvulas reguladoras y estaciones de bombas, siempre y cuando sigamos la pauta de como introducir estos elementos dentro del código. Lo demás elementos se contemplan en su totalidad. El desarrollo del código esta realizado en Python, un lenguaje que resulta ideal para el tratamiento de los datos que hemos ido obteniendo gracias a sus funciones y a sus bibliotecas tanto gráficas como matemáticas que nos han permitido un gran abanico de posibilidades a la hora de las simulaciones. Dentro del control óptimo podemos determinar que hemos conseguido un punto de equilibrio el cual hemos obtenido previamente en nuestro modelo simulado, así podemos determinar que al asemejarse los resultados que hemos obtenido, se encuentra verdaderamente una pauta de control para el sistema en estudio. En el estudio del paquete CasADi, llegamos a la conclusión de que es una herramienta muy potente a la hora de buscar soluciones óptimas de sistemas. Pero resulta complicado encontrar condiciones de equilibrio para la red de distribución de agua, debido a esto, muchas veces sino introducimos unas condiciones realistas y adecuadas, el motor de cálculo no es capaz de conseguir una solución viable para el sistema. En las líneas futuras se puede estudiar adaptar el código de simulación para cualquier tipo de bomba y válvula. En el apartado temporal se puede investigar la introducción en el modelado de la simulación de demandas variables, asimilando más el programa a una situación realista. Para el desarrollo del control óptimo podrían estudiarse más tipos de redes con sus características definidas, que puedan alcanzar un punto de equilibrio estable. También podría incluirse la generalización del modelo de CasADi para cualquier red de distribución de agua en lugar de usar solo la red del ejemplo que hemos estudiado. 53 Simulación y optimización dinámica de redes de agua en Python 53 REFERENCIAS [1] Rafael Molía, «Módulo: Abastecimiento y saneamiento urbanos» [2] Comisión Nacional del Agua (Mexico) , «Manual de agua potable, alcantarillado y saneamiento Diseño de Redes de Distribución de Agua Potable» [3] María del Mar García Alcaraz, «Modelación y simulación de redes hidráulicas a presión mediante herramientas informáticas», 2006 Cartagena. [4] Gemma Elena Molina López «Modelización con Epanet de las redes de transporte de agua potable de la ciudad de Cartagena» [5] María José Pinto Toapanta «Optimización Dinámica en Tiempo Real de Redes de Distribución» [6] Lewis A. Rossman, «EPANET 2 MANUAL DE USUARIO, versión 2.0 vE, Traducción: Grupo Multidisciplinar de modelación de fluidos, Universidad de Valencia.» [7] Rubén Martí, Tania Rodríguez, José Luis Pitarch, Daniel Sarabia, César de Prada «Optimización Diámica mediante diferenciación automática usando Ecosimpro y Casadi» [8] Juan Carlos Gutiérrez Araújo «Historia de los metodos de análisis y modelos computacinoales para análisis de redes de distribución a presión»