Tutorial de optimización - KPI de script personalizado, ejemplo 2 - Lectura del KPI EUI mediante EpNet (C#) y eppy (Python)
Las herramientas de optimización, análisis paramétrico y análisis de incertidumbre y sensibilidad de DesignBuilder ofrecen numerosos indicadores clave de rendimiento (KPI) para evaluar variantes de diseño, pero a veces necesitas crear tus propios KPI. Este ejemplo muestra cómo escribir un script C# o Python que lea cualquier resultado de EnergyPlus y lo vincule a un objetivo de optimización.
El tutorial busca las variaciones de diseño con prestaciones óptimas basadas en intensidad de uso de energía (EUI), minimizando a la vez el coste de construcción. Las versiones actuales de DesignBuilder no incluyen un KPI EUI integrado, por lo que se muestra cómo acceder a ese resultado de EnergyPlus mediante un script.
Se identificarán los ajustes óptimos de Window To Wall %, tipo de acristalamiento y longitud de voladizo que proporcionen el menor EUI manteniendo los costes lo más bajos posible. Se utilizan costes de componentes y otros ajustes predeterminados para centrarse en el KPI personalizado.
El modelo tiene un sistema VRF y utiliza HVAC Detallado para que EnergyPlus calcule un valor EUI realista. HVAC Simple no permite incluir el consumo HVAC en el EUI notificado por EnergyPlus. Se utiliza la plantilla HVAC VRF predeterminada.
Paso 1 - Crear un modelo base
1. Crea un modelo nuevo situado en London Gatwick.
2. Añade un edificio con los ajustes predeterminados y dibuja un bloque rectangular de 20m por 10m y una altura de 3.5m, como se muestra a continuación.
3. Carga la plantilla de actividad Generic Office Area a nivel de edificio en la pestaña Actividad.
4. Ve a la pestaña Iluminación y activa el control de iluminación. Esto crea una relación compleja entre la configuración de fachada y los consumos de calefacción, refrigeración e iluminación, que sería muy difícil prever sin una optimización.
5. Establece la opción de modelo HVAC Detallado y carga la plantilla predeterminada VRF with HR and DOAS HVAC.
Paso 2 - Ejecutar una simulación estándar
Haz clic en Simulación y ejecuta una simulación anual base. Como el modelo es sencillo puedes seleccionar resultados horarios. Selecciona también resultados mensuales, necesarios para la optimización. Comprueba los resultados horarios del periodo para verificar el comportamiento esperado, incluidas las temperaturas del edificio y los periodos de funcionamiento. Ajusta el modelo y repite hasta estar satisfecho con los resultados horarios.
Paso 3 - Configurar los objetivos de optimización
1. Abre el cuadro Ajustes paramétricos haciendo clic en el icono
de la barra de herramientas y establece Tipo de análisis en la pestaña Análisis en 2-Optimización.
2. Ve a la pestaña Objetivos y añade 2 objetivos nuevos para el coste de construcción y EUI. Puedes editar los existentes o eliminarlos primero y crear 2 nuevos. Los pasos se describen a continuación.
EUI
Para crear el objetivo «EUI» debes crear un resultado resumido o KPI. Haz clic en KPI objetivo para abrir la lista de resultados resumidos existentes en el panel de información. El KPI «EUI» aún no aparecerá; créalo seleccionando el resultado Custom Script existente de la lista de KPI, haciendo clic en el icono Crear copia del elemento resaltado de la barra de información y editando la copia. Aplica los siguientes ajustes en el cuadro Resultado resumido.
Nota importante: El nombre «EUI (kWh/m2)» introducido aquí debe coincidir con el texto escrito en el campo 0 del registro añadido a la tabla «ParamResultsTmp» del script. Puedes copiar el nombre y guardarlo en un lugar accesible para utilizarlo al escribir el script.
Guarda el KPI creado y selecciónalo en el cuadro Objetivos de optimización .
Denomina el objetivo «EUI». Este nombre es solo para tu referencia y, a diferencia del nombre del resultado resumido, no necesita coincidir con ningún otro. Selecciona la opción 1-Mín de mínimo/máximo para indicar que deseas minimizar EUI. El cuadro debería parecerse a la captura siguiente.
Coste de capital
Crea ahora el objetivo de coste. Es más sencillo porque podemos utilizar un KPI estándar.
Selecciona el KPI Coste de capital (Capex total) y denomina el objetivo «Capital Cost». Selecciona la opción 1-Mín de mínimo/máximo para indicar que deseas minimizar EUI. El cuadro debería parecerse a la captura siguiente.
Una vez definidos ambos objetivos, la pestaña Objetivos debería quedar así:
Paso 4 - Configurar las variables de optimización
Configura las variables de diseño. Las 3 variables son:
- Window to Wall % - entre 20% y 80% con paso de optimización de 1%.
- Tipo de acristalamiento - selecciona los sistemas mostrados en el cuadro Orden de variables :

- Sombra local - selecciona los sistemas mostrados en el cuadro Orden de variables :

Una vez definidas las 3 variables, la pestaña Variables debería quedar así:
Paso 5 - Escribir el script de KPI personalizado
La siguiente tarea es escribir el script que incorporará el resultado EUI al sistema de lectura de resultados paramétricos. Los pasos son:
1. Haz clic en el icono Scripts
de la barra de herramientas para abrir el gestor de scripts y marca la casilla Activar scripts .
2. Haz clic en el elemento de selección Script. En el panel de información de la derecha aparecerá una lista de scripts existentes.
3. Según escribas el script en C# o Python, haz clic en la categoría CS-Script o Python-Script y pulsa el icono Añadir elemento nuevo de la barra de información para abrir el cuadro de edición de scripts.
4. Copia y pega el script siguiente en la ventana de script. En resumen, el archivo de salida eplustbl.csv se carga en la biblioteca EpNet si utilizas CS-Script o en la biblioteca eppy si utilizas Python; se abre la tabla LEED «EAp2-17a. Energy Use Intensity - Electricity» y se carga el subtotal EUI de electricidad. El script lo escribe en una tabla temporal que DesignBuilder utiliza para recoger los resultados de scripts personalizados de cada simulación. El edificio del ejemplo utiliza exclusivamente electricidad, por lo que EUI de electricidad es también el EUI total.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DB.Api;
using DB.Extensibility.Contracts;
using EpNet;
using EpNet.Results;
namespace DB.Extensibility.Scripts
{
public class RunCustomScript : ScriptBase, IScript
{
public override void AfterEnergySimulation ()
{
// called after simulation is finished but before results are loaded to DB
var tablePath = ApiEnvironment.EnergyPlusFolder + @"eplustbl.csv";
if (File.Exists(tablePath)) {
var tableReader = new TableReader(tablePath);
if (tableReader != null) {
// open the LEED EUI Electricity results table
ResultTable EUITable = tableReader.GetTable("EAp2-17a. Energy Use Intensity - Electricity");
// read the sub total for EUI Electricity
string EUI = EUITable.Rows[7][1].ToString();
// store results in the site level "ParamResultsTmp" table, one record per result
Site site = ApiEnvironment.Site;
Table table = site.GetTable("ParamResultsTmp");
// field 0 is the Name of the corresponding SummaryResults record, field 1 is the result
Record record = table.AddRecord();
record[0] = "EUI (kWh/m2)";
record[1] = EUI;
} else {
MessageBox.Show(@"Error creating TableReader");
}
} else {
MessageBox.Show(@"File does not exist " + tablePath);
}
}
}
}
import ctypes
from os import path
from eppy.results import fasthtml
def show_message(title, text):
ctypes.windll.user32.MessageBoxW(0, text, title, 0)
def after_energy_simulation():
table_path = api_environment.EnergyPlusFolder + "eplustbl.htm"
if path.exists(table_path):
with open(table_path, "r") as filehandle:
eui_table = fasthtml.tablebyname(filehandle, "EAp2-17a. Energy Use Intensity - Electricity")
eui_table_content = eui_table[1]
eui = str(eui_table_content[8][1])
site = api_environment.Site
table = site.GetTable("ParamResultsTmp")
record = table.AddRecord()
record[0] = "EUI (kWh/m2)"
record[1] = eui
else:
show_message("Information", "File does not exist " + table_path)
Consejo: Los scripts EUI de ejemplo y los KPI y objetivos de optimización asociados pueden adaptarse fácilmente para informar de cualquier resultado incluido en los archivos de salida .csv de EnergyPlus para EpNet o .htm para eppy mediante las modificaciones apropiadas.
Consejo: Para ahorrar tiempo puedes copiar el script anterior y pegarlo en el cuadro.
Consejo: El DesignBuilderSoftware \ db-scripts repositorio Github incluye las versiones más recientes del script anterior y otros scripts de tutoriales y ejemplos de DesignBuilder.
Paso 6 - Volver a ejecutar una simulación estándar
Haz clic en Simulación y pulsa actualizar para ejecutar de nuevo una simulación anual base. Antes de pulsar Aceptar, asegúrate de generar los resultados LEED Summary, necesarios para el script personalizado.
Paso 7 - Ejecutar la optimización
Ve a la pestaña Optimización + UA/SA de la pantalla Simulación y pulsa el icono Actualizar de la barra de herramientas para abrir el cuadro Opciones de cálculo de optimización y aplica los ajustes siguientes, iguales o similares a los predeterminados.
Pulsa el botón Iniciar para ejecutar las simulaciones de optimización.
Una vez que la optimización haya convergido y cierres el cuadro Opciones de cálculo, deberías ver resultados similares a los siguientes en la pantalla principal.
Los resultados que muestran el equilibrio entre EUI y coste de capital dependen mucho de los costes de los componentes, especialmente acristalamiento, paredes exteriores y voladizos. Con los costes predeterminados de este modelo, para la mejor prestación energética de 111.4 kWh/m2 hay que invertir 319,173 GBP con 45% WWR, doble acristalamiento bajo emisivo y voladizos de 1.5m.
Los gráficos de Pareto muestran rendimientos decrecientes del ahorro energético al aumentar el acristalamiento y la longitud de los voladizos para reducir EUI. Se pueden ahorrar costes reduciendo ambos, con un posible punto de equilibrio mostrado en la captura: 23% WWR, doble acristalamiento bajo emisivo y sin sombra, que mantiene los costes y EUI bajos en 114.8 kWh/m2.
Efecto del modelado HVAC en la optimización del diseño de la envolvente
Este ejemplo es esencialmente igual al anterior de KPI personalizado, pero se basa en a) un sistema VRF en lugar de Unitary Heat Cool y b) el objetivo es minimizar «EUI» en lugar de «Total system energy». Es interesante observar que los resultados de este ejemplo son más sencillos y señalan una configuración concreta, mientras que los del sistema VRF con EUI como objetivo presentan más matices. ¿Por qué crees que sucede?
Una posible explicación es que el sistema Unitary Heat Cool consume bastante más energía que el sistema VRF, al menos en parte porque el sistema de DesignBuilder Unitary Heat Cool introduce tasas de renovación de aire exterior por ventilación mecánica mayores que la plantilla predeterminada VRF with DOAS , por lo que las cargas de calefacción y refrigeración dominan sobre las de iluminación y otras. Esta diferencia influirá en las conclusiones del análisis.
Para probar esta idea, carga un sistema Unitary Heat Cool en lugar del sistema VRF y observa los resultados. ¿Qué sistema produce mayores EUI? ¿Se recomiendan las mismas configuraciones óptimas de fachada?
Consejo: Una conclusión para quien haya completado ambos tutoriales es que, incluso al analizar solo variables de envolvente o fachada, el tipo de sistema HVAC puede influir en las decisiones. Si sabes que el diseño utilizará un sistema VRF, configúralo en el modelo de optimización para incluir el equilibrio adecuado entre calefacción y refrigeración. Si solo consideras cargas de zona, pierdes la diferencia entre los rendimientos de ambos sistemas. Piensa detenidamente en lo que indican los resultados y en las hipótesis incorporadas. Siempre ayuda comprender bien el modelo base y sus resultados antes de optimizar.









