intensificación en electricidad
Post on 19-Jul-2022
15 Views
Preview:
TRANSCRIPT
Equation Chapter 1 Section 1
Proyecto Fin de Grado
Grado en Ingeniería de las Tecnologías Industriales
Intensificación en Electricidad
Impacto en el Mercado Diario de Nuevas Estrategias
de Ofertas del Régimen Especial
Autor: Ángel Berzal Pérez-Solano
Tutores: Juan Manuel Roldán Fernández
Ángel Luis Trigo García
Departamento de Ingeniería Eléctrica
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2016
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
2
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
3
Proyecto Fin de Grado
Grado en Ingeniería de las Tecnologías Industriales
Intensificación en Electricidad
Impacto en el Mercado Diario de Nuevas
Estrategias de Ofertas del Régimen Especial
Autor:
Ángel Berzal Pérez-Solano
Tutores:
Juan Manuel Roldán Fernández
Ángel Luis Trigo García
Departamento de Ingeniería Eléctrica
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2016
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
4
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
5
Resumen
La actividad de producción de energía eléctrica a partir de fuentes de energía renovables, reviste una
importancia fundamental en la consecución de los objetivos de mejora del medio ambiente, seguridad del
abastecimiento energético y desarrollo tecnológico e innovación.
Durante los últimos años se ha producido un desarrollo muy importante de las tecnologías de
producción de energía eléctrica a partir de estas fuentes, que integraban el anteriormente denominado régimen
especial. Este crecimiento fue posible, en parte, gracias a la existencia de sucesivos marcos normativos de
apoyo que establecían incentivos económicos a la producción de energía eléctrica con dichas tecnologías.
Este entorno favorable, propició la rápida superación de las previsiones iniciales, lo que unido a la
progresiva reducción de los costes tecnológicos hizo necesario, en garantía tanto del principio de rentabilidad
razonable como de la propia sostenibilidad financiera del sistema, acometer modificaciones en el marco
normativo, dando lugar a la aprobación del Real Decreto 413/2014, del 6 de junio por el que se regula la
actividad de producción de energía eléctrica a partir de fuentes de energía renovables, cogeneración y residuos.
Esta nueva regulación plantea un nuevo contexto, en el que estas unidades de generación se equiparan
en el mercado eléctrico al resto de tecnologías convencionales, debiendo de actualizar sus estrategias de oferta
en los mercados diarios.
En el presente trabajo se pretende componer posibles escenarios y estudiar el impacto de los mismos
en el Mercado Eléctrico de la Energía
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
6
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
7
Abstract
The energy activity production from renewable energy sources is of fundamental importance in
achieving the objectives of improving the environment, security of energy supply and technological
development and innovation.
In recent years there has been a very important development of technologies in electricity production
from these sources, which formerly made up the special regime. This growth was possible due to the existence
of successive regulatory frameworks established to support the electricity production from these sources with
economic incentives.
This favorable environment, led to the rapid improvement of the initial forecasts, which together with
the progressive reduction of technology costs guaranteed the principle of reasonable profitability and financial
sustainability of the system itself, there has been changes to the regulatory framework, leading to the approval
of Royal Decree 413/201, of June 6 in which the activity production regulates electricity from renewable
energy sources, cogeneration and waste.
This new regulation raises a new context in which these generating units are equivalent in the
electricity market to other conventional technologies, having to update their bidding strategies in the daily
markets.
In this proyect the aim is to compose scenarios and study the impact there would be on the Electric
Energy Market.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
8
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
9
Índice
Resumen 5
Abstract 7
Índice 9
Índice de Tablas 11
Índice de Figuras 13
1 Introducción 15
1.1 Justificación 15
1.2 Objetivos 15
2 Mercado Eléctrico 17
3 Marco Regulatorio y Normativo 21
4 Casación del Mercado Diario mediante curvas de oferta y demanda agregada 25
5 Planteamiento y Ejecución 29
5.1 Datos de partida 30
5.2 Determinación de unidades de Régimen Especial 31
5.3 Modificación de precios y simulación de la casación 33
5.4 Presentación y tratamiento de resultados 37
6 Casos de Estudio y Análisis de Resultados 39
6.1 Caso Cero 39
6.2 Análisis anual para toda unidad de régimen especial 41
6.2.1 Caso 1: Cambio de precio de oferta a 5 €/MWh 41
6.2.2 Casos 2, 3 y 4: Cambio de precios de oferta a 10, 15 y 20 €/MWh 43
6.3 Análisis estacional 47
6.3.1 Primavera 47
6.3.2 Verano 49
6.3.3 Otoño 50
6.3.4 Invierno 52
6.4 Análisis económico 53
7 Conclusiones 57
8 Líneas Futuras 59
9 Bibliografía y Fuentes 61
10 Anexos 63
10.1 Función “CreaListaNombresCab” 63
10.2 Función “ImportCAB” 64
10.3 Función “SOLOPotenciasCAB” 65
10.4 Función “UnidadesSINspace” 67
10.5 Función “SacaUdsyPots” 68
10.6 Función “UnidadesSNSR” 68
10.7 Función “PMax” 69
10.8 Función “SumaPyUNIT” 71
10.9 Función “MayYmenFINAL” 71
10.10 Función “CreaListaNombres” 72
10.11 Función “pruebacurvaagregada4” 73
10.12 Función “SimpleMatch2” 77
10.13 Script “CambiaOrigFINAL” 78
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
10
10.14 Script “pruebacurvaagregada5” 80
10.15 Función “CambiapreciosM” 85
10.16 Función “PruebaEstacionalfuncion” 88
10.17 Función “CambiosEnergiaFinal” 97
10.18 Función “Beneficios” 101
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
11
ÍNDICE DE TABLAS
Tabla 1: Resultados CASO 1 .................................................................................................................................... 42
Tabla 2: Resultados CASO 2 .................................................................................................................................... 44
Tabla 3: Resultados CASO 3 .................................................................................................................................... 44
Tabla 4: Resultados CASO 4 .................................................................................................................................... 44
Tabla 5: Resultados PRIMAVERA ......................................................................................................................... 49
Tabla 6: Resultados VERANO ................................................................................................................................ 50
Tabla 7: Resultados OTOÑO ................................................................................................................................... 51
Tabla 8: Resultados INVIERNO .............................................................................................................................. 52
Tabla 9: Resultados “Beneficios” ............................................................................................................................ 54
Tabla 10: Precio Medio de Retribución Real 2014 ................................................................................................. 55
Tabla 11: Resultados Precio Medio Retribución Total para los casos de estudio ................................................. 56
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
12
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
13
ÍNDICE DE FIGURAS
Figura 1: Ejemplo curvas agregadas de oferta y demanda en la hora 21 del 26/02/2014 .................................... 19
Figura 2: Evolución de la Retribución Regulada en España .................................................................................. 22
Figura 3: Ilustración del desplazamiento vertical de curvas ................................................................................... 25
Figura 4: Ejemplo caso PMODIFICADO > PORIGINAL ...................................................................................................... 26
Figura 5: Ilustración del desplazamiento horizontal de curvas .............................................................................. 27
Figura 6: Ejemplo PMODIFICADO <= PORIGINAL ............................................................................................................ 27
Figura 7: Ejemplo de reordenamiento de curvas ..................................................................................................... 28
Figura 8: Diagrama de flujo esquemático del proceso de obtención de resultados .............................................. 29
Figura 9: Extracto de reglamento de OMIE para disposición de ficheros CAB ................................................... 31
Figura 10: Diagrama de flujo esquemático de la determinación de unidades de Régimen Especial ................... 32
Figura 11: Diagrama de flujo esquemático del proceso de modificación de precios ........................................... 34
Figura 12: Diagrama de flujo esquemático para el proceso de simulación de la casación ................................... 34
Figura 13: Ejemplo de “corte limpio” ...................................................................................................................... 35
Figura 14: Ejemplo de corte horizontal .................................................................................................................... 36
Figura 15 : Ejemplo de corte vertical ....................................................................................................................... 36
Figura 16: Distribución de precios horarios CASO 0 ............................................................................................. 39
Figura 17: Ejemplo acoplamiento horario. Hora 5 del 10/12/2014 ....................................................................... 40
Figura 18: Distribución de precios horarios CASO 1 ............................................................................................. 41
Figura 19: Ejemplo aclaratorio ................................................................................................................................. 42
Figura 20: Ejemplo aclaratorio 2 .............................................................................................................................. 43
Figura 21: Representación del % Horas que cambian de precio ............................................................................ 45
Figura 22: Representación del % Aumento del precio medio ................................................................................ 45
Figura 23: Distribución de precios horarios CASO 2 ............................................................................................. 46
Figura 24: Distribución de precios horarios CASO 3 ............................................................................................. 46
Figura 25: Distribución de precios horarios CASO 4 ............................................................................................. 46
Figura 26: Distribución de precios horarios PRIMAVERA .................................................................................. 47
Figura 27: Distribución precios horarios y energía casada PRIMAVERA ........................................................... 48
Figura 28: Distribución precios horarios y energía casada 24horas PRIMAVERA ............................................. 48
Figura 29: Precio Original vs %Cubierto Demanda por Régimen Especial ......................................................... 49
Figura 30: Distribución de precios horarios VERANO .......................................................................................... 50
Figura 31: Distribución de precios horarios OTOÑO ............................................................................................. 51
Figura 32: Distribución precios horarios y energía casada OTOÑO ..................................................................... 51
Figura 33: Distribución de precios horarios INVIERNO ....................................................................................... 52
Figura 34: Evolución Aumento de Ingresos TOTAL ............................................................................................. 54
Figura 35: Comparación Aumento de Ingresos TOTAL y Retribución Específica Anual 2014 ......................... 55
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
14
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
15
1 INTRODUCCIÓN
1.1 Justificación
Las fuentes de energía de origen renovable representan en España alrededor del 35% de la tecnología
de generación energética total instalada y cubren entre el 35% y el 40% de la demanda de energía anual. Las
grandes ventajas que representan este tipo de tecnologías, como la de ser fuentes de energía teóricamente
inagotables o la de ser energías limpias para el Medio Ambiente, incitan a invertir en ellas y desarrollarlas. Sin
embargo, la incertidumbre respecto a la disposición del recurso y sus bajos rendimientos, presentan un gran
inconveniente para la competitividad de las mismas frente a otro tipo de tecnologías más maduras y que
pueden asegurar una disposición inmediata de energía en un mercado liberalizado de energía eléctrica.
Para promover y rentabilizar su uso y gestión, el Gobierno de España propuso un sistema de
retribución específico para estas tecnologías, basado en un sistema de primas variables según ciertos factores.
Por tanto, los productores que hicieran uso de este medio para desarrollar su negocio, aparte del precio
marcado por la casación de mercado correspondiente, verían incrementado sus ingresos para hacer frente a
dicha baja rentabilidad inicial.
Durante el año 2013 fue anunciado por el Gobierno de España un cambio en la concesión de estas
ayudas, donde se certifica la modificación del sistema de primas que llevaba en vigor hasta la fecha. Frente a
este nuevo contexto surge la cuestión sobre la posición a la que quedan relegadas estas unidades dentro del
mercado diario de energía eléctrica. Se plantea pues, un nuevo escenario para estos generadores de origen
renovable. Si bien las reglas de oferta y demanda del mercado diario permanecen inalteradas, este cambio
origina que estas unidades, catalogadas como Régimen Especial, se enfrenten al mercado con objetivos
diferentes.
Se justifica así este estudio, en el cual quedan expuestas posibles estrategias de oferta de energía que
podrían ser asumidas por estos generadores, pertenecientes al antiguo Régimen Especial, para desarrollar un
papel competitivo frente a otro tipo de tecnologías dentro del mercado eléctrico
1.2 Objetivos
En el presente trabajo se trata de estudiar el impacto que puede tener este cambio de régimen
retributivo en el mercado eléctrico de la energía. Para ello se presentan y analizan una serie de posibles
escenarios en los que las unidades identificadas como Régimen Especial alteran sus estrategias de venta de
energía para hacer frente al objetivo fundamental de cualquier empresa: maximizar beneficios.
Se utilizan para ello de los datos de mercado para el año 2014. Si bien este estudio podría realizarse
para cualquier año, se ha escogido el año 2014 por ser el año posterior al anuncio del citado cambio normativo.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
16
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
17
2 MERCADO ELÉCTRICO
Siendo el fin de este proyecto el estudio de diversas situaciones de casación del mercado eléctrico,
resulta necesario realizar una introducción a éste. Sin objeto de profundizar en aspectos que puedan ser
irrelevantes para la comprensión de este complejo sistema, se intentará explicar la historia y funcionamiento
del mismo lo más brevemente posible.
Hasta el año 1997 el sistema eléctrico español estaba estructurado como un sistema regulado en el que
el Gobierno establecía el precio de la electricidad, que remuneraba la totalidad de los costes incurridos
(principalmente generación, transporte y distribución de la electricidad) a un conjunto de compañías eléctricas
privadas. En búsqueda de una mayor eficiencia conjunta del sector, se promulgó la Ley 54/1997 de 27 de
noviembre del Sector Eléctrico (como transposición de la Directiva 96/92/CE de 19 de diciembre de 1996 ),
que liberalizaba el mercado eléctrico en España, introduciendo así la competencia entre compañías y
dividiendo el sector en generación, transporte, distribución y comercialización.
La estructura legal y comercial del sistema eléctrico español se basa en el reconocimiento de dos tipos
de actividades: actividades parcialmente liberalizadas (generación y comercialización) y actividades reguladas
(transporte y distribución). El término “mercado eléctrico” se refiere al conjunto de actividades libres y está
constituido por dos sectores principalmente: el mercado minorista (o comercialización) a los clientes finales y
el mercado mayorista de la electricidad (el MIBEL).
El Mercado Ibérico de la Electricidad (MIBEL) es el mercado eléctrico mayorista en el cual se
encuentran incluidos tanto España como Portugal , como resultado de un proceso de cooperación desarrollado
por los gobiernos de ambos países con el fin de promover la integración de los sistemas eléctricos de los
mismos. Este mercado mayorista está constituido por una serie de distintos mercados donde los “agentes de
mercado” (productores de electricidad, distribuidores, comercializadores y consumidores cualificados)
compran y venden energía eléctrica. Estos mercados pueden ser mercados bilaterales o mercados organizados.
Dentro de los mercados organizados destacan dos tipos de organización, los mercados spot y los mercados a
plazo. Los primeros se caracterizan por negociar una entrega del producto de manera inmediata. En cambio, en
los mercados a plazo se negocian entregas de energía en el futuro.
Los mercados organizados integrantes del MIBEL se encuentran regulados por el Operador del
Mercado Ibérico (OMI), el cual, a su vez, pasa a convertirse en una entidad compuesta por dos sociedades (una
por cada país): OMIE (polo español), donde se negocian productos de corto plazo (para el día siguiente y
durante el mismo día de negociación) y OMIP (polo portugués), donde se negocian productos de más largo
plazo
El Operador del Mercado Ibérico Español (OMIE) es el responsable de la gestión económica del
sistema referida a los mercados diario e intradiario. Le corresponde recibir las ofertas de venta y de adquisición
de energía eléctrica, efectuando la gestión de las mismas, así como la liquidación de todas las operaciones de
los mercados diario e intradiario.
La Secretaría de Estado de Energía, por medio de la Resolución de 27 de enero de 2014, regula las
reglas de funcionamiento del mercado diario e intradiario de producción de energía eléctrica. Se hace
referencia también al artículo 3.10 de la Ley 24/2013, de 26 de diciembre, donde quedan aprobadas las reglas
de mercado y se regula los términos en los que se desarrolla la gestión económica y técnica del sistema.
De entre todos los mercados organizados destaca el Mercado Diario, gestionado por OMIE. Su
función es efectuar las transacciones de energía eléctrica para el día siguiente. Para ello, los agentes de
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
18
mercado, compradores y vendedores, presentan ofertas de venta y adquisición de energía eléctrica en dicho
mercado diario. Este procedimiento se conoce como día D-1, pues el precio de la energía y el volumen de ésta
quedan fijados en un horizonte horario para el día posterior al de la sesión. Los precios quedan programados
diariamente en 24 períodos que se corresponden con la Hora Europea Central (CET). Este precio es marcado
por el punto de equilibrio entre las curvas de la oferta agregada de compra y de venta de energía. Para este
proceso de casación, el operador de mercado ejecuta un algoritmo que recibe el nombre de Euphemia. Este
algoritmo tiene como objetivo maximizar el bienestar de mercado, definiendo el mismo como una suma del
beneficio de ofertas de compra y ofertas de venta.
Una vez que el proceso de mercado diario concluye y, por tanto, se fija el precio y la cantidad de
energía para cada hora, tiene lugar un procedimiento de restricción técnica. En dicho proceso, el operador del
sistema, que en nuestro país es Red Eléctrica de España (REE), se encarga de estudiar la viabilidad técnica
para formalizar la cumplimentación de los contratos establecidos en el mercado diario. Una vez que este
operador del sistema aprueba las transacciones, el proceso de casación prosigue con la aparición de los
mercados intradiarios.
Para una gestión en periodos de tiempo más estrechos existen los citados mercados intradiarios. Son
también conocidos como mercados de ajustes y se llevan a cabo en el día en curso. Tienen por objeto
configurar un programa definitivo y viable de precio y volumen de energía mediante la presentación de ofertas
de compra y venta de la misma, disponiendo de hasta 6 sesiones para lograrlo. Se corrigen las imperfecciones
que puedan quedar en el programa, se terminan de programar las interconexiones, se atienden las incidencias y
se reprograman aquellas en las que fuese necesario.
Los agentes de mercados que actúan como compradores son comercializadores, consumidores
directos y consumidores de último recurso. Estos agentes, al igual que las unidades de venta, disponen como
plazo máximo para presentar dichas ofertas hasta las 12.00 del día.
Se puede diferenciar entre dos tipos de presentaciones de ofertas, ofertas sencillas y ofertas complejas.
En las ofertas sencillas el agente de compra hace llegar al operador de mercado una expresión de precio y
cantidad de energía para cada tramo horario, pudiendo llegar a dividirse cada hora hasta en 25 tramos. Por su
parte en las ofertas complejas, los agentes, aparte de cumplir con los requisitos exigidos en las ofertas simples,
determinan algunas condiciones como indivisibilidad, ingresos mínimos, parada programada o condición de
gradiente de carga. La importancia de estos factores reside en que pueden determinar la casación, o no, de la
unidad, llegando a no realizarse la misma si no se cumplieran algunos de los objetivos marcados.
La estructura del mercado diario es la de un mercado marginalista en el que todas las ventas o
compras de energía se retribuyen, para cada hora, al precio final de casación para dicha hora. Esto quiere decir
que la última unidad que se necesite para satisfacer la demanda va a ser la que establezca el precio al que se les
pagará a todas las demás que hayan entrado en la casación. Este sistema de mercado induce a que los
participantes del mismo oferten su coste marginal de producción.
Los agentes compradores y vendedores pueden acudir al mercado mayorista con independencia de
que estén en España o en Portugal. Sus ofertas de compra y venta son aceptadas atendiendo a su orden de
mérito económico, hasta que la interconexión entre España y Portugal se ocupa totalmente. Si en una cierta
hora del día la capacidad de la interconexión es suficiente para permitir el flujo de electricidad negociado por
los agentes, el precio de la electricidad en esa hora será el mismo para España y Portugal. Si por el contrario,
en esa hora la interconexión se ocupa totalmente, en ese momento el algoritmo para la fijación del precio se
ejecuta de manera separada de tal forma que aparece una diferencia de precios entre ambos países.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
19
El mecanismo descrito para la formación del precio de la electricidad en el mercado diario de España
y Portugal se conoce como “market splitting”, y es el mismo mecanismo que se utiliza a nivel Europeo.
Durante el año 2014 el 90 % del tiempo el precio de la electricidad fue igual en España que en Portugal, lo
que muestra un correcto funcionamiento de la integración del mercado ibérico.
Figura 1: Ejemplo curvas agregadas de oferta y demanda en la hora 21 del 26/02/2014
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
20
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
21
3 MARCO REGULATORIO Y NORMATIVO
La justificación de este proyecto, como ya se introdujo, está basada en un cambio normativo del
sistema de primas. Debido a este cambio, las unidades de generación de origen renovable han visto alterada las
condiciones y políticas que regulan este sistema de incentivación. La intención de este apartado no es más que
el análisis de la posición que toman dichas unidades en el nuevo marco jurídico. A su vez, debido a su interés,
es posible comparar el papel de estas unidades previo al cambio normativo y posterior a este.
La normativa de referencia en el ámbito nacional sobre el régimen especial de la energía eléctrica ha
ido variando con el transcurso de los años. La primera regulación de las energías de origen renovable fue la
Ley 82/1980, de 30 de diciembre, sobre conservación de energía. El objeto de la Ley consistía en establecer
una serie de acciones dirigidas a optimizar, potenciar y promover la transformación de la energía y las energías
renovables. La razón de ser de estas acciones radica en la necesidad de reducir la dependencia energética que
España tenía del exterior.
La primera definición del Régimen Especial aparece en la Ley 40/1994, de 30 de diciembre, de
ordenación del Sistema Eléctrico Nacional, donde queda definida como “la energía producida en régimen que
se califica de especial atendiendo a su carácter accesorio de otra actividad industrial, a la energía primaria
utilizada, o a su reducida potencia”, produciéndose así el asentamiento de las fases jurídicas y económicas de
ésta tecnología.
Tras este primer esbozo del Régimen Especial se han dispuesto diversas medidas para promover su
uso por encima de otras alternativas. Así como el cumplimiento de determinados objetivos, fijados con
especial interés desde determinadas instituciones y organismos comunitarios e internacionales, como por
ejemplo la reducción de la producción de gases de efecto invernadero. Por esto, se ha ido desarrollando un
marco normativo específico sobre el Régimen Especial en el que puede apreciarse una evolución en su
tratamiento económico y legislativo.
Se encuentra de esta manera la Ley 54/1997, de 27 de noviembre, del Sector Eléctrico, donde el
Régimen Especial quedó definido como “instalaciones cuya potencia instalada no supere los 50 MW”. Esta
Ley propone la distinción entre las producciones de energía ordinaria, que no hacen uso de fuentes de origen
renovables, y las de Régimen Especial. También establece el marco económico por el que se rigen todas las
unidades en cuanto a las retribuciones obtenibles.
Debido al interés general, ya mencionado, en el uso de tecnología limpia, aparece el Real Decreto
841/2002, de 2 de agosto, por el que se regula para las instalaciones de producción de energía eléctrica de
Régimen Especial su incentivación en la participación en el mercado de producción, determinadas
obligaciones de información de sus previsiones de producción, y la adquisición por los comercializadores de
su energía eléctrica producida. En este Real Decreto se establece la obligación, para todas las instalaciones de
potencia mayor de 50MW, de participar en el mercado eléctrico, quedando así enmarcadas dentro del régimen
ordinario.
El Real Decreto 2818/1998, de 23 de diciembre, sobre producción de energía eléctrica por
instalaciones abastecidas por recursos o fuentes de energía renovables, residuos y cogeneración, se aprueba
como desarrollo reglamentario de algunos aspectos de la antes mencionada Ley 54/1997. Dicho Real Decreto
tiene por objeto determinar una prima anual del sector renovable. Posteriormente, el Real Decreto 436/2004, se
encargará de actualizar las condiciones que previamente se regularon por los Real Decreto y Ley anteriores,
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
22
haciendo especial referencia a la actualización anual de las primas. A su vez, estableció dos alternativas que
los productores de régimen especial tienen para la remuneración de la energía eléctrica generada:
Negociar directamente con una empresa distribuidora, vendiéndole energía a precio regulado. Dicha
tarifa dependería de la potencia de la planta y de la edad de la misma.
Acudir al mercado eléctrico a vender su energía como cualquier otro productor. En este caso se
percibiría el precio de mercado y una prima.
Figura 2: Evolución de la Retribución Regulada en España
Es en 2009 cuando el Gobierno anuncia el déficit tarifario existente en ese momento. Se muestra en la
Figura 2 la evolución del total de primas anuales que han ido obteniendo los generadores renovables. La
importante magnitud que éstas habían alcanzado, era, según el propio Gobierno, la principal causa de dicho
déficit tarifario.
Para frenar e intentar remediar de una manera efectiva este acuciante problema, se han planteado
diversas modificaciones del sistema de retribución de primas como por ejemplo el Real Decreto-ley 9/2013, de
12 de julio, por el que se adoptan medidas urgentes para garantizar la estabilidad financiera del sistema
eléctrico, que entre otros aspectos, establece un nuevo régimen retributivo para las instalaciones de generación
de energía renovable, cogeneración y residuos y una serie de principios retributivos adicionales para el
transporte y distribución de energía eléctrica, dejando obsoleto el modelo de incentivo previo que estaba
vigente desde la Ley 54/1997.
En definitiva, los continuos cambios normativos han supuesto una importante distorsión en el normal
funcionamiento del sistema eléctrico, necesaria de corregir para aportar la estabilidad regulatoria que la
actividad eléctrica necesita. Esta seguridad regulatoria, unida a la necesidad de acometer las reformas
necesarias para garantizar la sostenibilidad del sistema a largo plazo y de resolver las señaladas deficiencias
existentes en el funcionamiento del sistema, dieron lugar a la aprobación de una reforma global del sector,
basada en un nuevo régimen de ingresos y gastos del sistema eléctrico, que tratará de devolver al sistema una
sostenibilidad financiera perdida hace largo tiempo y cuya erradicación no se ha conseguido hasta la fecha
mediante la adopción de medidas parciales.
Por todo esto nace la actual Ley 24/2013, de 26 de diciembre, del Sector Eléctrico, que señala: “tiene
como finalidad básica establecer la regulación del sector eléctrico garantizando el suministro eléctrico con
los niveles necesarios de calidad y al mínimo coste posible, asegurar la sostenibilidad económica y financiera
0
2000
4000
6000
8000
10000
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015Ret
rib
uci
ón
( m
illo
nes
€)
Año
Evolución de la Retribución Regulada en España
Prima anual
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
23
del sistema y permitir un nivel de competencia efectiva en el sector eléctrico, todo ello dentro de los principios
de protección medioambiental de una sociedad moderna.”
Esta Ley del Sector Eléctrico mantenía el régimen retributivo del Real Decreto-ley 9/2013, hasta que,
finalmente, aparece el Real Decreto 413/2014, de 6 de junio, por el que se regula la actividad de producción de
energía eléctrica a partir de fuentes de energías renovables, cogeneración y residuos, estableciéndose un nuevo
procedimiento de cálculo de las primas percibidas.
De acuerdo con este nuevo marco, las instalaciones podrán percibir durante su vida útil regulatoria,
adicionalmente a la retribución por la venta de la energía valorada al precio del mercado, una retribución
específica compuesta por un término por unidad de potencia instalada que cubra, cuando proceda, los costes de
inversión para cada instalación tipo que no puedan ser recuperados por la venta de la energía en el mercado, al
que se denomina retribución a la inversión, y un término a la operación que cubra, en su caso, la diferencia
entre los costes de explotación y los ingresos por la participación en el mercado de producción de dicha
instalación tipo, al que se denomina retribución a la operación.
La vida útil regulatoria de cada instalación está determinada por tecnologías, y contempla desde 20
años para la eólica hasta un máximo de 30 para la fotovoltaica, considerando como fecha de inicio para la
contabilización el 1 de enero del año siguiente al de la autorización de explotación definitiva de la instalación.
Con todo esto se concluye que, a expensas de nuevos cambios en el marco normativo, existe ya una
fecha límite a partir de la cual se dejarán de pagar retribuciones adicionales a las unidades de tecnologías de
origen renovable.
Resulta pues interesante intentar dilucidar qué futuro escenario acontecerá en el mercado diario
cuando estos generadores del antiguo Régimen Especial se encuentren con el requisito de rentabilizar sus
inversiones y generar mayores beneficios. Conocido el objetivo de este estudio, queda argumentada la
justificación del mismo.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
24
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
25
4 CASACIÓN DEL MERCADO DIARIO MEDIANTE
CURVAS DE OFERTA Y DEMANDA AGREGADA
El comportamiento esperado por el mercado al modificar las ofertas del Régimen Especial va a ser
muy similar al estudiado en el artículo publicado por el Departamento de Ingeniería Eléctrica de la
Universidad de Sevilla: “Impact of Renewable Generation in the Spanish Electricity Market” [11]
.
El método utilizado en este artículo ha sido uno similar al procedimiento usado por OMIE, con el
propósito de analizar cualquier escenario considerado. La información básica es la generación por orden de
mérito económico horaria y las curvas de demanda simples agregadas horarias, obtenidas de los datos
históricos disponibles en la página web de OMIE.
Teóricamente, al tener una curva escalonada Energía/Precio, una modificación del precio en cualquier
tramo de la curva de oferta de energía (integración de una cantidad de energía renovable a precio 0€/MWh en
la Figura 3) va a provocar un desplazamiento vertical de la misma que dará lugar a un nuevo punto de corte. Al
considerar la curva de demanda de energía inelástica (no sufre alteraciones significativas ante variaciones de
precio) ese nuevo punto de corte equivaldrá al nuevo precio de mercado.
Figura 3: Ilustración del desplazamiento vertical de curvas
Cuando se desarrollen nuevos escenarios de generación haciendo cambios en las curvas de energía, es
necesario tener en cuenta la hipótesis de que las ofertas de otros agentes van a permanecer inalteradas cuando
se introduzcan o se eliminen nuevas ofertas de generación. Afortunadamente esta hipótesis puede ser
considerada satisfecha, ya que cada agente de mercado (de oferta y de compra) elabora sus ofertas sin conocer
las ofertas de los otros agentes.
Resumiendo, se puede afirmar de acuerdo a esta teoría que, al integrar una cantidad de energía como
Pre
cio
de
l me
rcad
o m
ayo
rist
a (€
/MW
h)
Energía generada y demanda (MWh)
Oferta original Demada original Oferta Modificada
Energía a precio 0€/MWh
Precio Modificado
Precio Original
ΔRenovable
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
26
oferta de venta a precio menor que el precio original, se evidencia un desplazamiento de la curva de oferta
simple de energía hacia abajo provocando una disminución del precio de mercado.
Habiendo planteado ya el concepto teórico, resulta importante aclarar que en este estudio se está
trabajando con procedimientos de casación simple para curvas con condiciones de oferta complejas. Este
aspecto va a influir en el movimiento de las curvas, ya que, al no tener en cuenta las condiciones complejas de
la oferta, no se incluyen o extraen unidades del mercado. Lo lógico sería que, si se aumentan los precios de
oferta de un determinado grupo de unidades, estas pudieran quedarse fuera de la casación al existir ofertas
intermedias que pudieran ocupar su lugar tras la reordenación de ofertas. En este proyecto no se tienen en
cuenta las ofertas que pudieran entrar en la nueva casación, luego el movimiento de curvas esperado será algo
diferente. Se podrán distinguir dos situaciones distintas tras la reordenación de ofertas según el valor del precio
de ofertas modificado y el precio original de casación:
PMODIFICADO > PORIGINAL
Figura 4: Ejemplo caso PMODIFICADO > PORIGINAL
Al producirse el caso de la Figura 4, donde se evidencia un incremento del precio de oferta de un
grupo de unidades que inicialmente estaban ofertando a precio aceptante hasta un precio modificado mayor
que el precio original de casación, existirá un reordenamiento en sentido ascendente de las ofertas de venta de
energía que situará a estas ofertas modificadas en el punto de corte con la curva de demanda, siendo ellas las
que fijen el nuevo precio de mercado y cantidad de energía negociada. Se produce pues un movimiento
horizontal de la parte de la curva de oferta situada originalmente a la izquierda del punto de corte original,
ocupando la zona de corte con la curva de demanda el nuevo bloque de energía ofertada al nuevo precio
modificado.
Pre
cio
de
l me
rcad
o m
ayo
rist
a (€
/MW
h)
Energía generada y demandada (MWh)
Oferta modificada Demanda original Oferta original
Energía a precio 0€/MWh
Δ P
reci
o O
fert
a R
eno
vab
le
P y E originales
ΔP
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
27
Figura 5: Ilustración del desplazamiento horizontal de curvas
Esta va a ser la situación final esperada cuando se modifiquen los precios de un grupo de ofertas de
venta de energía (Régimen Especial en este caso) en el que estos precios modificados sean mayores que el
precio original de casación para una hora concreta. Se evidencia pues un aumento del precio final de casación
y una disminución de la energía final casada. Al ser las unidades de Régimen Especial las que modifican sus
ofertas, resulta lógico aceptar que la disminución de energía casada va a provenir de estos generadores, es
decir; parte de la energía de las unidades de Régimen Especial, que modifican el precio de sus ofertas de venta
de energía a un valor mayor del original de casación, no va a ser casada.
PMODIFICADO <= PORIGINAL
Figura 6: Ejemplo PMODIFICADO <= PORIGINAL
Pre
cio
de
l me
rcad
o m
ayo
rist
a (€
/MW
h)
Energía generada y demandada (MWh)
Oferta modificada Demanda Original Oferta original
Energía a precio 0€/MWh
Desplazamiento
Desplazamiento
Pre
cio
de
l me
rcad
o m
ayo
rist
a (€
/MW
h)
Energía generada y demandada (MWh)
Oferta modificada Demanda original Oferta original
Energía a precio 0€/MWh
ΔP
reci
o R
eno
vab
le
ΔP
P y E originales
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
28
Al producirse el caso de la Figura 6 donde se evidencia un incremento del precio de oferta de un
grupo de unidades que inicialmente estaban ofertando a precio aceptante hasta un precio modificado menor
que el precio original de casación, existirá un reordenamiento en sentido ascendente de las ofertas de venta de
energía que no va a influir sobre el precio final de casación, ya que afectará exclusivamente a las ofertas cuyos
valores de precio sean menores que los modificados. Se produce pues un movimiento horizontal de parte de la
curva que no afecta a las ofertas que determinan el punto de corte entre curvas, manteniéndose los valores de
precio y cantidad de energía final de casación inalterados.
Figura 7: Ejemplo de reordenamiento de curvas
Esta va a ser la situación final esperada cuando se modifiquen los precios de un grupo de ofertas de
venta de energía (Régimen Especial en este caso) en el que estos precios modificados sean menores o iguales
que el precio original de casación para una hora concreta. Se evidencia pues que no existe repercusión alguna
en el precio final de casación o la cantidad de energía negociada.
Pre
cio
de
l me
rcad
o m
ayo
rist
a (€
/MW
h)
Energía generada y demandada (MWh)
Oferta modificada Demanda original Oferta original
Energía a precio 0€/MWh
Desplazamiento
Inalterado
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
29
5 PLANTEAMIENTO Y EJECUCIÓN
El estudio llevado a cabo en este trabajo, se basa en analizar el resultado de diferentes situaciones de
casaciones diarias en el mercado eléctrico. Se simulan posibles escenarios viables donde las unidades de
Régimen Especial alteran los precios de las ofertas de venta de energía que presentan en el mercado diario.
Posteriormente se realiza un análisis de estos resultados, determinando la idoneidad de esta estrategia para la
propia unidad y para el mercado en su conjunto.
Para todo esto se hace uso del software Matlab, en el que se han programado una serie de funciones y
algoritmos, basados en el método de corte de curvas agregadas complejas introducido anteriormente, capaces
de implementar el citado proceso. Diferentes detalles y aspectos relevantes de estos algoritmos se irán
comentando a lo largo de este estudio.
Se presentan a continuación los pasos que van a seguirse para llegar a obtener los resultados. Todos
los datos iniciales de los que se vale este proyecto para estudiar las diferentes estrategias de oferta están
recogidos en la página web del Operador del Mercado Ibérico de Energía, Polo Español (OMIE). Estos datos
son totalmente públicos y de libre acceso para cualquier usuario.
Figura 8: Diagrama de flujo esquemático del proceso de obtención de resultados
Una vez se hayan obtenido los datos iniciales de entrada, se habrán de seleccionar los que interesen y
disposicionarlos de forma que se pueda trabajar con ellos de manera sencilla en Matlab. Con estos datos y
conforme a ciertos criterios previamente seleccionados, se tratará de identificar todas las unidades catalogadas
como Régimen Especial para poder modificar exclusivamente la oferta de las mismas.
Conociendo ya las unidades objetivo, se procede a modificar sus precios de ofertas de venta de
energía durante todo el año y se realiza la simulación de la casación, ejecutándose las funciones
específicamente creadas para este fin y obteniéndose, para cada hora del año, una reproducción fiable de los
resultados para el proceso de casación real que hubiera tenido lugar si los precios de las ofertas de venta casada
de las unidades seleccionadas hubieran sido los prefijados para el estudio.
Finalmente, una vez se cuenta con los resultados y tras ser tratados para su correcta disposición, estos
son presentados y analizados para cada caso en particular.
Determinación de unidades de Régimen Especial
Modificación de precios de oferta
Simulación de la casación
Obtención de resultados
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
30
5.1 Datos de partida
Los datos de los que se dispone son los valores de todas las ofertas de venta y de compra realizadas
para cada hora por cada agente que participe en el mercado, recogidos en la página web del OMIE para el año
de estudio, 2014.
Estos datos pueden encontrarse en los ficheros reconocibles como PBC, nombrados como
“curva_pbc_uof_aaaammdd”. Los ficheros PBC contienen, para cada día del año, los precios horarios y
cantidades de energía de todas las ofertas de compra y venta, ofertadas y casadas.
Se almacenan estos datos en estructuras de datos de Matlab para cada día, por lo que tendremos 365
estructuras nombradas en formato “aaaa/mm/dd”, compuestas cada una de ellas por 4 subestructuras
detalladas a continuación:
VC: Será la subestructura Venta Casada con los valores de oferta de venta que han casado tras
aplicar condiciones complejas.
VO: Será la subestructura Venta Ofertada con los valores de oferta de venta simple.
CC: Será la subestructura Compra Casada con los valores de oferta de compra que han casado
tras aplicar condiciones complejas.
CO: Será la subestructura Compra Ofertada con los valores de oferta de compra simple.
Cada una de estas subestructuras está formada por 7 submatrices igualmente indexadas de las cuales
sólo se utilizan las 4 siguientes:
UnitName: Submatriz con los nombres de las unidades que han casado/ofertado para cada
hora.
Precio: Submatriz con los valores de precio casado/ofertado por cada unidad para cada hora.
Energy: Submatriz con los valores de energía casada/ofertada por cada unidad para cada hora.
Hour: Submatriz con los valores de las horas.
Así pues si, por ejemplo, se quiere acceder al contenido de unidades, precio y energía de compra que
se ha casado a la hora tres, sólo hay que acceder a la estructura CC.hora y aislar los índices de datos con valor
igual a tres, entonces CC.UnitName, CC.Energy y CC.Precio mostrarán, para dichos índices, los datos que se
quieren utilizar.
Los datos de los cuales se ha obtenido la información necesaria para identificar las unidades de
Régimen Especial son los que se encuentran en los ficheros reconocibles como CAB.
En los ficheros CAB, nombrados como “cab_aaaammdd” viene recogida la información de cabecera
de las ofertas que se presentaron a mercado diario. Los datos aparecen distribuidos por filas según la unidad y
por columnas según el dato a mostrar. La disposición de los mismos es fija y viene recogida en el reglamento
de OMIE. En los ficheros CAB encontramos muchos datos relativos a las condiciones de oferta compleja de
las unidades de venta de energía, pero la única información que se va a extraer para este trabajo es el código de
la unidad ofertante y el valor de potencia máxima.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
31
Figura 9: Extracto de reglamento de OMIE para disposición de ficheros CAB
5.2 Determinación de unidades de Régimen Especial
Conocido el propósito de este trabajo, resulta inherente al mismo la necesidad de identificar y
seleccionar aquellas unidades catalogadas como Régimen Especial. Este proceso, en apariencia sencillo,
resulta bastante tedioso teniendo en cuenta que no existe ninguna fuente de información clara y precisa acerca
de la tecnología utilizada por las unidades de venta de energía a la cual se pueda recurrir.
Para realizar pues, el proceso de clasificación de unidades de Régimen Especial, se establecen unas
hipótesis de partida referentes a los datos de que disponemos:
1. Se consideran unidades de venta de energía de origen renovable aquellas que ofertan durante
todo el año su energía a precio 0 €/MWh
2. Se consideran unidades exclusivamente de potencia máxima mayor o igual que 15MW.
La primera hipótesis se justifica ya que sólo las centrales nucleares y las unidades de origen renovable
venden durante todo el año su energía a precio aceptante, es decir, a 0 €/MWh, por sus características técnicas
y retributivas: las primeras por su baja capacidad de parada y las segundas por su incapacidad de almacenaje
de energía primaria y su privilegiado régimen retributivo basado en las primas. Este dato puede resultar
llamativo un principio, pero hay que tener en cuenta que, como ya se introdujo en la explicación del mercado
eléctrico, al tratarse de un sistema de mercado marginalista, el precio al que se retribuye a todas las unidades
que han casado su energía en una hora determinada es el precio marcado por la última unidad necesaria para
cubrir la demanda en esa hora, luego se induce a dichas unidades a ofertar la energía a su coste marginal de
producción, que resulta ser 0 €/MWh al no tener costes variables significativos.
La segunda hipótesis se justifica ya que resulta importante filtrar dentro de las unidades de origen
renovable las de pequeña potencia como plantas de cogeneración o pequeños huertos solares, y las de gran
potencia como parques eólicos o plantas termosolares. Estas últimas, al ser las de mayor potencia y por tanto
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
32
mayor producción de energía, son las que realmente pueden marcar diferencias en el mercado eléctrico
modificando sus ofertas.
A continuación se muestra un diagrama de flujo que esquematiza el proceso de determinación de
unidades de Régimen Especial:
Figura 10: Diagrama de flujo esquemático de la determinación de unidades de Régimen Especial
A continuación se detallan las funciones implementadas en Matlab utilizadas para ejecutar el filtrado
de unidades:
Función "CreaListaNombrescab" [10.1]
para crear todos los nombres de los ficheros CAB en formato
CAB_aaaammdd para poder leerlos después.
Función "import_cab" [10.2]
para leer los códigos de cada unidad.
Función "SOLOPotenciasCAB" [10.3]
para leer exclusivamente la columna de potencias del fichero
CAB.
Leer precio ofertado durante todo el año POF
Extraer códigos de unidad y potencias máximas PMÁX
Es unidad de Régimen Especial
¿ PMÁX > 15MW?
FIN
FIN
FIN
NO
NO
NO
SI
SI
¿Es nuclear?
SI
¿ POF > 0 ?
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
33
Función "UnidadesSINspace" [10.4]
. Está función se usa para disposicionar los datos de manera sencilla
y fácilmente accesible. Simplemente lee un fichero de texto y almacena sus datos en un vector tipo
cell.
Función "SacaUdsyPots" [10.5]
. Función que combina las cuatro funciones anteriores para leer todos
los ficheros CAB del año y almacenar todas las unidades y sus respectivas potencias en los vectores
tipo cell 'unidades' y ‘potencias’. Tener en cuenta que aquí están almacenadas todas las unidades de
todos los CAB, luego casi todas están repetidas.
Función “UnidadesSNSR” [10.6]
. Con esta función se eliminan de la lista las unidades nucleares, ya
que el código de unidad de éstas sí es conocido. También se eliminan las unidades repetidas para dejar
una única lista con el total de unidades que han participado en el mercado durante el año
Función “PMax” [10.7]
. Se observa en los ficheros CAB que la potencia máxima de ciertas unidades
varía durante el año, normalmente incrementándose. Este cambio es producido por modificaciones
técnicas en las unidades como la inclusión de nuevos grupos generadores. La función “PMax” asigna
a cada unidad la potencia máxima que haya registrado en los ficheros CAB durante el año y organiza
un listado con las unidades de potencia mayor o igual a 15MW.
Función “SumaPyUNIT” [10.8]
. Esta función recibe la lista de unidades obtenida en “PMax” y accede
a los datos de oferta simple de todo el año de éstas para almacenarlos en una matriz que será
posteriormente tratada por la función “MayYmenFINAL”.
Función “MayYmenFINAL” [10.9]
. Esta última función realiza el filtrado de unidades que durante todo
el año han ofertado su energía a precio aceptante 0€/MWh y proporciona la lista final de unidades que
recibirá el algoritmo de simulación para poder modificar su oferta.
5.3 Modificación de precios y simulación de la casación
Se muestran a continuación dos diagramas de flujos que esquematizan los procesos de modificación
de precios y simulación de la casación:
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
34
Figura 11: Diagrama de flujo esquemático del proceso de modificación de precios
Figura 12: Diagrama de flujo esquemático para el proceso de simulación de la casación
SI
Leer precio de oferta “i” de las “N” ofertas de venta casadas en una hora -> VC.Precio(i)
VC.Precio(i)=P
Pasar a simulación de casación
FIN
i=i+1
NO
SI
NO ¿i=N?
¿Es de R.E?
Obtención ofertas de venta modificadas
Reordenación ofertas de menor a mayor precio
Creación curvas escalonadas de oferta y demanda
Obtención del punto de corte (Energía, Precio)
¿Situación excepcional?
Aplicar criterios para situaciones excepcionales
FIN
FIN
SI
NO
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
35
Una vez se disponen de los datos de oferta de venta y compra, simple y casada, para todas las horas
del año y de la lista de unidades catalogadas como Régimen Especial, disposicionado todo en un formato
manejable e intuitivo, se puede ejecutar la función “CambiaPreciosM(P)” [10.15]
, que recibe un precio P al que
modifica los precios de cada oferta de venta de energía de las unidades listadas, y simula la casación del
mercado diario para las 8760 horas del año.
Durante el proceso de casación existen determinadas situaciones de corte de curvas que es preciso
comentar. Hay que tener en cuenta que, al ser las curvas agregadas de venta y adquisición de energía eléctrica
curvas discretas por escalones, pueden existir, y existen, situaciones en el que el cruce de ambas curvas se
produzca en un tramo horizontal o vertical, accediéndose así a un abanico de infinitas soluciones de las cuales
sólo se puede elegir una. Este tipo de indeterminaciones se resolverán aplicando los “criterios para
situaciones excepcionales” mencionados en la Figura 12.
Estos “criterios excepcionales” van a depender del tipo de corte entre curvas. Se puede diferenciar
entre tres tipos de corte:
Corte Limpio: Se llama corte limpio en este estudio al corte producido entre un tramo de curva
vertical y otro horizontal como el ilustrado en la Figura 13.
Figura 13: Ejemplo de “corte limpio”
Corte horizontal: Se llama en este estudio corte horizontal al corte producido entre dos tramos
horizontales de oferta y demanda. Ver Figura 14.
Pre
cio
(€
/MW
h)
Energía (MWh)
Oferta Demanda
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
36
Figura 14: Ejemplo de corte horizontal
Corte vertical: Se llama en este estudio corte vertical al corte producido entre dos tramos
verticales de oferta y demanda. Ver Figura 15
Figura 15 : Ejemplo de corte vertical
Resulta fácilmente deducible que las situaciones excepcionales van a producirse cuando existan cortes
horizontales o verticales, ya que son los que generan más de un punto de corte. Cuando el corte sea horizontal
existirán diferentes valores de energía para un mismo precio y cuando sea vertical tendremos diferentes
precios para un mismo valor de energía.
Se aplican diferentes criterios para determinar el punto de corte según exista un corte horizontal o uno
vertical:
Pre
cio
(€
/MW
h)
Energía (MWh)
Oferta Demanda
Pre
cio
(€
/MW
h)
Energía (MWh)
Oferta Demanda
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
37
Caso de corte horizontal: En el caso que se produzca un corte horizontal (varios valores de
energía para un mismo precio) se procede escogiendo la última oferta de venta de energía, si
existe un exceso de ofertas de compra de la misma, o la última oferta de compra de energía en
caso contrario.
Caso de corte vertical: En el caso que se produzca un corte vertical (varios precios para un
mismo valor de energía), se procede escogiendo el precio de la última oferta de venta o
adquisición de energía según criterios de “bienestar de mercado”.
Cabe mencionar que estos criterios no han sido definidos al azar, si bien son muy parecidos a los
utilizados por OMIE en la resolución de este tipo de indeterminaciones en el reparto de energía del programa
horario. Al no disponer de los citados criterios de “bienestar de mercado”, se han fijado en caso de corte
vertical las últimas ofertas de venta o adquisición de energía atendiendo a los resultados reales casados durante
el año.
5.4 Presentación y tratamiento de resultados
Tras la búsqueda, interpretación y tratamiento de los datos, el paso siguiente que toma este estudio no
es más que el análisis de distintos posibles escenarios que pudieran darse en el mercado diario.
Previamente a la presentación de los escenarios, se introduce en este punto la manera en la que se van
a tratar los resultados obtenidos además de la forma en la que se presentan tras el algoritmo de simulación.
La función “CambiaPreciosM(P)” [10.15]
retorna una estructura llamada “ValoresCasadosPX”, donde
“X” es, para cada caso, el precio al que se modifican las ofertas de venta de energía de las unidades
seleccionadas. La estructura está formada por cuatro submatrices tipo celda de 8760 filas por una columna
cada una. Estas submatrices son:
“dia”: Contiene los valores de los días.
“hora”: Contiene los valores de las horas.
“PrecioCasado”: Contiene los valores del precio final casado para cada hora.
“EnergíaCasada”: Contiene los valores de la energía final casada para cada hora.
Estas estructuras representan los verdaderos resultados de este estudio, si bien para analizarlos se usan
funciones previamente diseñadas para según qué tipo de análisis.
Para el análisis estacional, se hace uso de la función “PruebaEstacionalFuncion” [10.16]
, que, aparte de
devolver la diferencia entre los valores reales y simulados de precio y energía por horas, agrupa los índices de
cada grupo de horas por estaciones y ejecuta una serie de cálculos que resultan interesantes para su posterior
estudio.
Para el análisis económico se utilizan las funciones “CambiosEnergiaFinal” [10.17]
y “Beneficios” [10.18]
, las cuales se comentarán más adelante dado el motivo de las mismas.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
38
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
39
6 CASOS DE ESTUDIO Y ANÁLISIS DE
RESULTADOS
6.1 Caso Cero
Este primer escenario simula la situación original del Mercado Eléctrico sin haber realizado ninguna
modificación en la oferta. Este caso servirá de referencia comparativa para los próximos escenarios. Los
resultados reales están recogidos en la página web del operador de mercado, por lo que su simulación valdrá
para evaluar la exactitud del código.
Aunque el Mercado Ibérico de la Electricidad está formado por España y Portugal, los datos y
resultados mostrados son sólo para España en caso de “market splitting”. Esto resulta un inconveniente a la
hora de cuantificar la energía casada, ya que no se dispone de los datos reales divididos de esta manera.
Se muestra en la Figura 16 la distribución de precios horarios anual obtenida tras la simulación:
Figura 16: Distribución de precios horarios CASO 0
El precio medio anual obtenido en la simulación ha sido de 42,148€/MWh. Según OMIE el precio
medio aritmético anual de la casación del mercado diario, sólo para España, en el año 2014 fue
42,130€/MWh. Se observa entonces un error relativo del 0,043%. Considerando que estamos analizando las
8760 horas del año, este error resulta muy aceptable.
Cabe mencionar que el algoritmo está prefijado para que los resultados obtenidos sean lo más
parecido posible a los reales, como ya se comentó anteriormente, teniendo en cuenta las ofertas de venta o
compra casadas originalmente en caso de corte vertical. La diferencia entre los mismos radica en que el propio
algoritmo no es capaz de prever situaciones como la que se muestra en la Figura 17:
0
20
40
60
80
100
120
1
46
2
92
3
13
84
18
45
23
06
27
67
32
28
36
89
41
50
46
11
50
72
55
33
59
94
64
55
69
16
73
77
78
38
82
99
87
60Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 0
Precio Casado Precio Medio
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
40
Figura 17: Ejemplo acoplamiento horario. Hora 5 del 10/12/2014
Como puede observarse en la Figura 17 aparece una “anomalía” en el ordenamiento de la curva
agregada de oferta de energía. El inicio de la curva en lugar de ser a precio 0€/MW es a 32,4€/MW cuando ese
día, a esa hora, el precio final de casación fue de 31,09€/MW. Esto significa que entró en la casación una
oferta de energía a un precio mayor que el final de mercado.
El origen de esta “anomalía” reside en el acoplamiento horario de las condiciones complejas de la
oferta tales como las condiciones de rampa entre horas, ingresos mínimos o bloques de ofertas indivisibles.
Hay que destacar que, en este estudio, las curvas que se están manejando en el mismo son curvas de oferta
compleja, de las cuales se desconocen este tipo de condiciones. Si el algoritmo de casación de OMIE
(Euphemia) casó ese día, a esa hora, esa oferta de energía probablemente fue porque resultaba la oferta más
adecuada atendiendo a los objetivos de bienestar de mercado y mérito económico.
Este tipo de situaciones se dan en entre un 4% y 5% de las horas totales del año y el error final que producen,
como ya se ha comentado, no es significativo.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
41
6.2 Análisis anual para toda unidad de régimen especial
Como punto de partida del estudio se plantea la hipótesis de que toda unidad que haga uso de recursos
renovables haga modificar su precio de venta de energía. Tradicionalmente, como ya se ha visto, éste ha sido
un precio aceptante de 0€/MWh. Se estudian un total de cuatro casos en donde se proponen diferentes precios
que podrían simular escenarios reales. Partiendo de un precio de 5 €/MWh, y pasando por 10 €/MWh y 15
€/MWh hasta alcanzar los 20 €/MWh por oferta del último caso.
En los siguientes subapartados se procede a mostrar los casos de estudio y los resultados más
significativos obtenidos para cada uno de ellos.
6.2.1 Caso 1: Cambio de precio de oferta a 5 €/MWh
El primer caso de estudio ha sido aquel en el que se han modificado los precios de oferta de venta de energía
de las unidades de Régimen Especial de 0€/MWh a 5€/MWh. Se muestra a continuación la distribución de
precios obtenida para las 8760 horas del año:
Figura 18: Distribución de precios horarios CASO 1
Como se puede advertir en la Figura 18 ha ocurrido lo que se esperaba, las horas que originalmente
casaron a precio menor de 5 €/MWh han aumentado su precio hasta este valor quedando las demás inalteradas.
El precio mínimo de casación del mercado ha pasado pues de 0 €/MWh hasta 5 €/MWh. Se entiende entonces
que la demanda base del mercado, generalmente cubierta por las centrales nucleares, no fue cubierta a ninguna
hora del año exclusivamente por unidades no renovables. Siempre hizo falta alguna unidad de origen
renovable de las estudiadas para satisfacer la demanda de energía. Esto proporciona una idea de lo integradas
que se encuentran este tipo de unidades en el sistema y el mercado eléctrico y el impacto que tienen en el
precio de mercado.
Se muestran en la Tabla 1 los resultados más significativos para el caso de estudio:
0
20
40
60
80
100
120
1
46
2
92
3
13
84
18
45
23
06
27
67
32
28
36
89
41
50
46
11
50
72
55
33
59
94
64
55
69
16
73
77
78
38
82
99
87
60Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 1
Precio Casado Original Precio Casado P5 Precio Medio
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
42
Horas que cambian
precio
% Horas que cambian
precio
%Horas que no cambian
precio
Precio Medio Anual Original
(€/MWh)
Precio Medio Anual Caso 1
(€/MWh)
%Aumento Precio Medio
Anual
492,000 5,614 94,384 42,148 42,349 0,477
Horas que cambian energía
%Horas que cambian energía
%Horas que no cambian
energía
Energía Casada Anual Original
(miles de GWh)
Energía Casada Anual Caso 1
(miles de GWh)
%Disminución Energía Casada
Anual
456,000 5,205 94,795 221,055 220,557 0,225
Tabla 1: Resultados CASO 1
Al observar los resultados se puede apreciar que el número de horas que han cambiado de precio final
de casación ha sido de 492, representando estas un 5,614% de las horas totales del año. Sin embargo, la
influencia que ha tenido este cambio en el precio medio anual ha supuesto solamente un aumento del mismo
del 0,477%.
Si se analiza la tabla de resultados más detenidamente, se advierte una situación que se repetirá en
todos los casos de estudio y es que el número de horas que cambian de precio es mayor que el de horas que
cambian de energía. Existen pues, horas que cambian de precio pero no de energía casada. La explicación de
este hecho se encuentra en que dichas horas han sufrido originalmente un corte vertical, en el que, como ya se
introdujo en la explicación del método de casación, las últimas ofertas de venta y de compra han concurrido a
un mismo valor de energía pero a diferente precio. Al aplicar los criterios apropiados para el corte vertical, la
última oferta casada, de venta o compra indistintamente, escogida para marcar el precio final de casación fue
originalmente a precio menor del modificado pero, casualmente, la otra última oferta que no fue escogida fue
concretamente de un precio igual al modificado, aunque ambas negociaban la misma energía (corte vertical).
Tras la reordenación de ofertas, se producirá un nuevo corte pero esta vez horizontal, donde el precio
equivaldrá al modificado y la energía se obtendrá según los criterios apropiados para el corte horizontal.
Existirán pues situaciones en las que el nuevo corte horizontal fije la energía casada según aquella última
oferta original no escogida inicialmente, provocando que el precio final de casación cambie pero no la energía
negociada.
Figura 19: Ejemplo aclaratorio
Pre
cio
(€
/MW
h)
Energía (MWh)
Demanda Oferta modificada Oferta original
Última oferta de compra
Última oferta de venta
Indeterminación
ΔP
reci
o R
eno
vab
le
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
43
Ejemplificando la situación: Imagine una hora cualquiera, como la de la Figura 19, cuyo precio final
de casación se resolvió originalmente mediante un corte vertical (se aplican criterios de bienestar de mercado
para fijar el precio) en el que la última oferta de venta de energía fue a 3,3 €/MWh y la última oferta de compra
de energía fue de 5 €/MWh. Si el precio original de casación fue de 3,3 €/MWh significa que se escogió la
última oferta de venta de energía (tras aplicar los criterios de corte vertical), siendo ésta la que terminó
marcando el precio final de casación para dicha hora.
Si ahora se modifica el precio final mediante el proceso de variación de precios de oferta del
Régimen Especial, tras el reordenamiento de ofertas, la situación resultante equivaldría a un nuevo corte
horizontal (como el de la Figura 20) en el que el precio queda fijado pero no la energía, luego, como ya se
comentó en el método de casación de curvas, se escoge la nueva última oferta de compra o venta de energía
según exista un exceso de ofertas de venta o adquisición de energía. En el ejemplo, ha resultado que existe un
exceso de ofertas de venta de energía, luego el valor de energía que completa el punto de corte es el de la
última oferta de compra original. Se explica así que el precio de dicha hora se haya visto modificado pero no la
energía casada durante la misma.
Figura 20: Ejemplo aclaratorio 2
6.2.2 Casos 2, 3 y 4: Cambio de precios de oferta a 10, 15 y 20 €/MWh
Para que el análisis de resultados del estudio no resulte demasiado repetitivo, el resto de casos se van a
presentar en modo comparativo en lugar de realizar un análisis caso a caso.
A continuación se muestran los resultados más significativos obtenidos para los casos 2, 3 y 4:
Pre
cio
(€
/MW
h)
Energía (MWh)
Demanda Oferta modificada Oferta original
Nuevo corte horizontal
Desplazamiento
Desplazamiento
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
44
Caso 2. Cambio de oferta a precio 10 €/MWh
Horas que cambian
precio
% Horas que cambian
precio
%Horas que no cambian
precio
Precio Medio Anual Original
(€/MWh)
Precio Medio Anual Caso 2
(€/MWh)
%Aumento Precio Medio
Anual
790 9,018 90,982 42,148 42,733 1,389
Horas que cambian energía
%Horas que cambian energía
%Horas que no cambian
energía
Energía Casada Anual Original
(miles de GWh)
Energía Casada Anual Caso 2
(miles de GWh)
%Disminución Energía Casada
Anual
776 8,858 91,141 221,055 220,202 0,386
Tabla 2: Resultados CASO 2
Caso 3. Cambio de oferta a precio 15 €/MWh
Horas que cambian
precio
% Horas que cambian
precio
%Horas que no cambian
precio
Precio Medio Anual Original
(€/MWh)
Precio Medio Anual Caso 3
(€/MWh)
%Aumento Precio Medio
Anual
1040 11,872 88,128 42,148 43,265 2,650
Horas que cambian energía
%Horas que cambian energía
%Horas que no cambian
energía
Energía Casada Anual Original
(miles de GWh)
Energía Casada Anual Caso 3
(miles de GWh)
%Disminución Energía Casada
Anual
1007 11,495 88,505 221,055 219,832 0,553
Tabla 3: Resultados CASO 3
Caso 4. Cambio de oferta a precio 20 €/MWh
Horas que cambian
precio
% Horas que cambian
precio
%Horas que no cambian
precio
Precio Medio Anual Original
(€/MWh)
Precio Medio Anual Caso 4
(€/MWh)
%Aumento Precio Medio Anual
1259 14,372 85,628 42,148 43,932 4,232
Horas que cambian energía
%Horas que cambian energía
%Horas que no cambian
energía
Energía Casada Anual Original
(miles de GWh)
Energía Casada Anual Caso 4
(miles de GWh)
%Disminución Energía Casada
Anual
1241 14,167 85,833 221,055 219,320 0,785
Tabla 4: Resultados CASO 4
Analizando las tablas de resultados se puede observar como el porcentaje de aumento de precio medio
crece a mayor ritmo que el porcentaje de horas que cambian de precio. Esto se debe a que para cada caso, se va
recortando más el número de horas que realmente disminuyen el precio medio del mercado, obteniendo mayor
influencia para su obtención las que se mantienen muy por encima del mismo. Por ejemplo, comparando el
caso 3 con el caso 2, se evidencia un aumento del número de horas que han variado su precio final de casación
del 30%, mientras que el porcentaje de aumento de precio medio final del mercado ha sido de prácticamente el
doble. Esta tendencia puede comprobarse en las Figuras 21 y 22 que representan el crecimiento del porcentaje
de horas que cambian de precio y el porcentaje de aumento de precio medio para cada caso respectivamente.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
45
Figura 21: Representación del % Horas que cambian de precio
Figura 22: Representación del % Aumento del precio medio
Si ahora se fija la atención en los casos 2 y 4 (Tablas 2 y 4 respectivamente) se puede constatar que,
un aumento del precio de las ofertas de venta de energía de las unidades de Régimen Especial de 10€/MWh a
el doble, 20 €/MWh, provoca un aumento del número de horas que cambian de precio del 60%, mientras que
el porcentaje de aumento de precio final de mercado ha sido de algo más del triple
También es apreciable cómo aumentos significativos de precios de ofertas tienen un impacto, en
principio, pequeño en el precio medio final del mercado. Por ejemplo en el caso 3 (Tabla 3), aumentando en
un 11,872% de las horas el precio de 0€/MWh a 15€/MWh tan solo supone un aumento del precio medio del
2,65%.
Se muestran ahora las distribuciones anuales de precios para los casos 2, 3 y 4:
0
2
4
6
8
10
12
14
16
1 2 3 4
% H
ora
s ca
mb
ian
pre
cio
s
Casos de estudio
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
1 2 3 4
% A
um
en
to d
el p
reci
o m
ed
io
Casos de estudio
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
46
Figura 23: Distribución de precios horarios CASO 2
Figura 24: Distribución de precios horarios CASO 3
Figura 25: Distribución de precios horarios CASO 4
0
20
40
60
80
100
1201
46
2
92
3
13
84
18
45
23
06
27
67
32
28
36
89
41
50
46
11
50
72
55
33
59
94
64
55
69
16
73
77
78
38
82
99
87
60Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 2
Precio Casado Original Precio Casado P10 Precio Medio
0
20
40
60
80
100
120
1
46
2
92
3
13
84
18
45
23
06
27
67
32
28
36
89
41
50
46
11
50
72
55
33
59
94
64
55
69
16
73
77
78
38
82
99
87
60Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 3
Precio Casado Original Precio Casado P15 Precio Medio
0
20
40
60
80
100
120
1
46
2
92
3
13
84
18
45
23
06
27
67
32
28
36
89
41
50
46
11
50
72
55
33
59
94
64
55
69
16
73
77
78
38
82
99
87
60P
reci
o (
€/M
Wh
)
Horas
Precio horario España CASO 4
Precio Casado Original Precio Casado P20 Precio Medio
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
47
Se puede apreciar en las Figuras 23,24 y 25 que la distribución de precios ha sido exactamente la
misma que en los anteriores casos de estudio, variando exclusivamente el precio de las horas que casaron a un
precio menor del modificado.
6.3 Análisis estacional
Otra de las hipótesis de estudio implementadas en este trabajo es la de enfocar los escenarios desde un
punto de vista estacional. Como ya se comentó previamente, las tecnologías que hacen uso de fuentes de
energía renovables cuentan con la desventaja de que les es imposible asegurar la disponibilidad del recurso. En
este apartado se va a tratar de estudiar cómo este factor y otros, como la necesidad de mayor energía por
periodos, afectan al precio final del mercado diario.
Se trata en este análisis pues, de examinar durante qué periodos estacionales es más sensible el precio
final horario de mercado de ser modificado.
Aunque se disponen de los resultados estacionales para todos los casos de modificación de oferta
estudiados, se exponen en los sucesivos apartados los referidos al caso 4, de mayor variación de precio de
oferta, 20€/MWh, al ser estos los más significativos y donde mayor número de horas ven alterado su precio
final de casación.
6.3.1 Primavera
Se muestran a continuación la distribución de precios horarios, referidos a la estación estival, la cual
comprende desde la hora primera del 21 de marzo hasta la última hora del 20 de junio, horas número 1897 y
4103 del año respectivamente:
Figura 26: Distribución de precios horarios PRIMAVERA
Puede advertirse en la Figura 26, que en la primera mitad de la estación primaveral es donde se
concentra el mayor número de horas cuyo precio se ha visto modificado. Esto es consecuencia directa del
problema acaecido por la disponibilidad de los recursos renovables.
En la Figura 27 se representa la distribución de precios horarios junto con la distribución de cantidad
de energía casada durante el periodo de estudio:
0
20
40
60
80
100
120
18
97
30
00
41
03Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 4 - Primavera
Precio Casado Original Precio Casado P20 Precio Medio Primavera
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
48
Figura 27: Distribución precios horarios y energía casada PRIMAVERA
Como se puede percibir en la Figura 27, la tendencia general y que se cumple en la segunda mitad del
periodo primaveral es que al aumentar la demanda de energía aumenta el precio de la misma, pero, como
puede apreciarse en la primera mitad del mismo periodo, esto no siempre se cumple. El factor que va a
determinar si el precio de mercado es alto o bajo es el porcentaje de demanda total que puedan cubrir las
tecnologías renovables. Habiéndose centrado este trabajo en tratar de aislar las unidades eólicas, es hábil
suponer que en la segunda mitad del periodo primaveral en España se extrajo menos energía del viento que en
la primera. Se muestra a continuación, para 24 horas concretas del periodo de estudio, la evolución de la
energía casada, la energía casada por el Régimen Especial, los precios originales y los precios modificados en
la Figura 28:
Figura 28: Distribución precios horarios y energía casada 24horas PRIMAVERA
Se aprecia en la Figura 28 como la modificación de precios de ofertas de venta de energía, genera una
nueva curva de precios que anula por completo el efecto original de disminución de precios provocado por el
aumento de energía casada por las unidades de Régimen Especial. En la Figura 29 puede valorarse mejor la
relación entre el precio de mercado original y el porcentaje de demanda cubierto por el Régimen Especial:
0
10
20
30
40
0
20
40
60
80
100
1201
89
7
30
00
41
03P
reci
o (
€/M
Wh
)
Horas
Precios horarios España CASO 4 - Primavera Precio Casado Original Precio Casado P20 Precio Medio Energía Casada P20
0
5
10
15
20
25
30
0
5
10
15
20
25
30
35
40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Ener
gía
Cas
ada
(GW
h)
Pre
cio
(€
/MW
h)
Horas
Precio Casado Original Precio Casado P20 Energía Casada P20 Energía Casada RE
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
49
Figura 29: Precio Original vs %Cubierto Demanda por Régimen Especial
Se aprecia en la Figura 29 la relación existente entre la disminución de precios de casación horarios y
el porcentaje de demanda que es capaz de cubrir el Régimen Especial. Es destacable el periodo comprendido
entre las horas 13 y 21, donde se evidencia una subida del porcentaje de demanda de energía cubierta por el
Régimen Especial hasta un 45% de la misma y un descenso significativo de los precios hasta valores que
rondan los 3€/MWh
A continuación se muestran en la siguiente tabla los resultados más significativos del periodo
primaveral:
Horas que cambian precio
% Horas que cambian precio
Precio Medio Primavera
Original
Precio Medio Primavera Caso 4
% Aumento Precio Medio Primavera
323 14,635 36,877 38,085 3,276
Horas que cambian energía
% Horas que cambian energía
Energía Casada Anual Primavera
Original
Energía Casada Anual Primavera
Caso 4
% Disminución Energía Casada
Primavera
320 14,499 50,870 50,528 0,672 Tabla 5: Resultados PRIMAVERA
Analizando los resultados de la Tabla 5 se aprecia que, durante el periodo primaveral, la influencia,
aplicando el nuevo régimen de ofertas, de las unidades de Régimen Especial en el precio de mercado es
claramente sensible, aumentando éste un 3,276% respecto del original para el mismo periodo. La primavera
representa pues un 25% de las horas que cambian de precio durante el año (para el caso de estudio).
6.3.2 Verano
Se muestran a continuación la distribución de precios horarios, referidos al verano, la cual comprende
desde la hora primera del 21 de junio hasta la última hora del 20 de septiembre, horas número 4014 y 6311
respectivamente:
0
10
20
30
40
50
0
10
20
30
40
50
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 % C
ub
iert
o D
eman
da
R.E
Pre
cio
(€
/MW
h)
Horas
Precio Casado Original %Cubierto Demanda R.E
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
50
Figura 30: Distribución de precios horarios VERANO
Es notoriamente apreciable que no hay ninguna hora en todo el verano que modifique su precio. La
explicación de este hecho se encuentra en que, durante este periodo, al haber menos viento, la energía
procedente de tecnologías de origen renovable (ofertada a bajo precio) aportada al mercado es
considerablemente menor. Esto provoca que sean unidades de otras tecnologías, cuyas ofertas de venta se
registran a precios más elevados, las que cubran los últimos tramos de demanda y, por tanto, fijen el precio
casado final horario. Para que las unidades de Régimen Especial pudieran hacer notar una influencia en el
mercado similar a la de casos anteriores, deberían aumentar sus ofertas de venta de energía en torno a los
40€/MWh.
Se muestran en la siguiente tabla los resultados más significativos del periodo estival:
Horas que cambian precio
Precio Medio Verano Original
Precio Medio Verano Caso 4
% Aumento Precio Medio Verano
0 51,728 51,728 0,000
Horas que cambian energía
Energía Casada Anual Verano Original
Energía Casada Anual Verano Caso 4
% Disminución Energía Casada Verano
0 56,476 56,476 0,000
Tabla 6: Resultados VERANO
A la vista de los resultados, es claramente deducible que el verano no es una época en la que a las
unidades les vaya a convenir alterar su estrategia de venta de energía dado que, para los casos de estudio, no
existe repercusión en el mercado. Al no influir en el precio de mercado, les resultará, en principio, indiferente
aumentar los precios de oferta de venta o mantenerlos a 0€/MWh como hacían originalmente.
6.3.3 Otoño
Se muestran a continuación la distribución de precios horarios, referidos a la estación otoñal, la cual
comprende desde la hora primera del 21 de septiembre hasta la última hora del 20 de diciembre, horas número
6312 y 8496 del año respectivamente:
0
20
40
60
801
89
7
30
00
41
03Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 4 - Verano
Precio Casado Original Precio Casado P20 Precio Medio
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
51
Figura 31: Distribución de precios horarios OTOÑO
Figura 32: Distribución precios horarios y energía casada OTOÑO
Se aprecia cómo, a medida que avanza el otoño, se pueden encontrar mayor número de horas que vean
modificado su precio final de casación.
Se muestran en la siguiente tabla los resultados más significativos del periodo otoñal:
Horas que cambian precio
% Horas que cambian precio
Precio Medio Otoño Original
Precio Medio Otoño Caso 4
% Aumento Precio Medio Otoño
85 3,890 51,803 52,059 0,494
Horas que cambian energía
% Horas que cambian energía
Energía Casada Anual Otoño
Original
Energía Casada Anual Otoño Caso 4
% Disminución Energía Casada
Otoño
83 3,799 54,078 54,020 0,108
Tabla 7: Resultados OTOÑO
Analizando los resultados de la Tabla 7, se comprueba que el otoño es una estación en la que se
pueden encontrar horas que cambien de precio, pero su repercusión para el precio medio final medio del
periodo no es demasiado alta. Estas horas representan un 6,75% de las horas totales que cambian de precio
0
20
40
60
80
100
1206
31
2
70
40
77
68
84
96Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 4 - Otoño
Precio Casado Original Precio Casado P20 Precio Medio
0
10
20
30
40
0
20
40
60
80
100
120
63
12
74
15
Ener
gía
Cas
ada
(GW
h)
Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 4 - Otoño
Precio Casado Original Precio Casado P20 Precio Medio Energía Casada P20
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
52
durante el año. Las unidades analizadas podrían entonces tratar de modificar su estrategia de oferta de energía
pero no encontrarían un efecto excesivamente significativo. Al igual que ocurría durante el verano, al no influir
demasiado en el precio de mercado, les resultará, en principio, indiferente aumentar los precios de oferta de
venta o mantenerlos a 0 €/MWh como hacían originalmente. Si quisieran explorar nuevas estrategias de oferta
de energía para que se notara una influencia en el mercado parecida a la de otros casos deberían situar los
precios de oferta de venta de energía en torno a los 30 €/MWh
6.3.4 Invierno
Se muestran a continuación la distribución de precios horarios, referidos a la estación invernal, la cual
comprende desde la hora primera del 21 de diciembre hasta la última hora del 20 de marzo, horas número
8497 y 1896 del año respectivamente:
Figura 33: Distribución de precios horarios INVIERNO
El invierno es una estación que no abarca un año completo, al iniciarse a falta de diez días para que
éste acabe y comience el siguiente. Para el análisis del inicio del periodo invernal del año de estudio, 2014,
deberían de utilizarse los datos del 21 al 31 de diciembre de 2013. Al representar éstos alrededor del 10% de
todo el periodo, se considera en este proyecto que los datos relativos al periodo comprendido entre la primera
hora del 21 de diciembre y la última hora del 31 de diciembre de 2014 son perfectamente representativos y
aprovechables en sustitución de los de 2013.
Se aprecia en la Figura 32 como, sin lugar a dudas, el periodo invernal es en el que mayor número de
horas ven su precio final original modificado.
Se muestran a continuación los resultados más significativos de este periodo:
Horas que cambian
precio
% Horas que cambian precio
Precio Medio Invierno Original
Precio Medio Invierno Caso 4
% Aumento Precio Medio Invierno
851 39,398 27,974 33,715 20,522
Horas que cambian energía
% Horas que cambian energía
Energía Casada Anual Invierno Original
Energía Casada Anual Invierno Caso
4
% Disminución Energía Casada
Invierno
838 38,796 59,630 58,295 2,239
Tabla 8: Resultados INVIERNO
0
10
20
30
40
50
0
20
40
60
80
100
120
84
97
86
24
87
51
11
8
24
5
37
2
49
9
62
6
75
3
88
0
10
07
11
34
12
61
13
88
15
15
16
42
17
69
18
96
Ener
gía
Cas
ada
(GW
h)
Pre
cio
(€
/MW
h)
Horas
Precios horarios España CASO 4 - Invierno
Precio Casado Original Precio Casado P20 Precio Medio Energía Casada P20
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
53
Analizando estos resultados y comparándolos con las otras tres estaciones, se aprecia claramente
como esta es la etapa donde mayor influencia tienen las unidades bajo estudio tras alterar su estrategia de
oferta de energía, modificando el precio final de casi el 40% de las horas, que representan un 67,6% de las
horas totales que cambian de precio durante el año, y provocando un aumento del precio medio del periodo del
20,522% que se corresponde con una subida de 5,741 €/MWh
Se comprueba entonces que el invierno va a resultar la estación más conveniente para que las unidades
de Régimen Especial puedan modificar sus estrategias de venta de energía con el objetivo final de fijar el
precio final horario de casación en el mercado eléctrico. No es casualidad que sea el periodo invernal donde
más energía procedente de tecnologías de origen renovable se produzca, ya que es en éste donde suele existir
más viento aprovechable para la extracción de energía.
6.4 Análisis económico
En los escenarios estudiados se ha llevado a cabo un análisis general para todo el mercado eléctrico.
Se tratará en este apartado de analizar las repercusiones económicas que arrojan estos resultados tanto para el
consumidor final, como para las propias unidades de generación de origen renovable. Para ello se utilizarán los
datos de la Comisión Nacional de los Mercados y la Competencia (CNMC), que incluyen la cantidad de
energía vendida en el mercado diario por tecnologías y retribuciones, y las funciones “CambiosEnergiaFinal”
y “Beneficios” que, haciendo uso de los resultados anteriores obtenidos, efectúan una serie de cálculos útiles
para la correcta comprensión del presente apartado. Se procede a explicar brevemente el cometido de las
funciones nombradas:
“CambiosEnergiaFinal”[10.17]
: Función que recibe un precio P' (precio de modificación de ofertas) y
devuelve, para cada hora del año, la energía casada por cada unidad de Régimen Especial en la
situación de modificación de precios de oferta de venta de energía.
“Beneficios” [10.18]
: Función que efectúa los cálculos finales necesarios para el análisis económico.
Los resultados aportados por la función “Beneficios” [10.18]
son, para cada caso de estudio, el aumento
de ingresos total obtenido por todo el Régimen Especial tras la modificación de precios de oferta de venta de
energía:
∆𝐼𝑇𝑂𝑇𝐴𝐿 = ∑ (𝑃𝐶𝑖′
8760
𝑖=1
× 𝐸𝐶𝑅𝐸𝑖′ ) − (𝑃𝑖
0 × 𝐸𝐶𝑅𝐸𝑖0 ) (𝐼)
Donde:
- ∆𝐼𝑇𝑂𝑇𝐴𝐿 representa el aumento de ingresos total obtenido por el Régimen Especial tras la
modificación de precios de oferta de venta de energía
- 𝑃𝐶𝑖′ es el precio final de casación para cada hora del año tras aplicar el nuevo régimen de ofertas
- 𝐸𝐶𝑅𝐸𝑖′ es la energía casada por las unidades de Régimen Especial durante cada hora del año tras
aplicar el nuevo régimen de ofertas
- 𝑃𝑖0 es el precio final de casación original para cada hora del año
- 𝐸𝐶𝑅𝐸𝑖0 es la energía casada por las unidades de Régimen Especial durante cada hora del año
originalmente
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
54
A continuación se muestran en la Tabla 9 los resultados más significativos que arroja la función
“Beneficios”:
Precio de modificación de ofertas (€/MWh)
Energía Casada Anual por el Régimen Especial (GWh)
ΔITOTAL (Millones de
€)
%Aumento de ingresos respecto original
5 58420,208 13,270 0,560
10 58065,210 37,330 1,571
15 57694,531 67,050 2,810
20 57182,314 99,597 4,146
Tabla 9: Resultados “Beneficios”
Observando la Tabla 9 se comprueba que a medida que aumenta el precio de modificación de ofertas,
el aumento de ingresos con respecto al caso original es mayor, llegando hasta un valor máximo de 99,597
millones de €. Se muestra en la Figura 34 la evolución del aumento de ingresos total:
Figura 34: Evolución Aumento de Ingresos TOTAL
Analizando la Figura 34 y la Tabla 9 se observa como al pasar del caso 1 al 2 casi se está triplicando el
aumento de ingresos anual mientras que con respecto al caso 4 se está multiplicando el valor por 7,5. Se puede
concluir que el crecimiento de ingresos evoluciona a niveles bastante aceptables de un caso a otro, pero,
apelando de nuevo a la justificación de este estudio, impera la necesidad de comparar estos resultados con las
retribuciones específicas percibidas por las unidades bajo estudio durante el año 2014. Para ello basta con ojear
la Figura 35:
0,000
20,000
40,000
60,000
80,000
100,000
120,000
1 2 3 4
ΔI T
OTA
L (M
illo
ne
s d
e €
)
Casos de estudio
ΔI total
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
55
Figura 35: Comparación Aumento de Ingresos TOTAL y Retribución Específica Anual 2014
En la Figura 35 se compara el aumento de ingresos total con los datos de retribuciones específicas por
tecnologías, aislando los valores para las unidades eólicas (recordar que éstas son casi exclusivamente las que
se han tratado como Régimen Especial a lo largo de este estudio). Se observa que estos resultados distan
mucho de los valores de las primas percibidas durante el año, cubriéndose en el caso más favorable un 8% de
las mismas.
Se plantea ahora el análisis desde otra perspectiva.
Son conocidos los datos de la retribución anual real en el año 2014 de las tecnologías de Régimen
Especial, compuesta por los ingresos obtenidos de la venta de energía en el mercado diario más la retribución
específica (primas). Además, se conoce el volumen de energía negociado en el mercado diario por las
tecnologías de Régimen Especial. Estas dos cantidades se pueden relacionar y obtener el coste medio anual del
MWh producido por tecnologías de Régimen Especial, de la siguiente forma:
𝑅𝑒𝑡𝑟𝑖𝑏𝑢𝑐𝑖ó𝑛𝑅𝐸 = 𝐼𝑛𝑔𝑟𝑒𝑠𝑜𝑠𝑀𝐷 + 𝑃𝑟𝑖𝑚𝑎𝑠 (𝐼𝐼)
𝑃𝑀𝑅𝑇 =𝑅𝑒𝑠𝑡𝑟𝑖𝑏𝑢𝑐𝑖ó𝑛𝑅𝐸
𝐸𝐶 𝑅𝐸 (𝐼𝐼𝐼)
Donde:
- 𝑃𝑀𝑅𝑇 es el precio medio de retribución total
- 𝑅𝑒𝑠𝑡𝑟𝑖𝑏𝑢𝑐𝑖ó𝑛𝑅𝐸 es la retribución anual del Régimen Especial
- 𝐸𝐶 𝑅𝐸 es la energía negociada (casada) anual en el mercado diario por el Régimen Especial
Para el caso del año 2014 el precio medio de retribución total se muestra en la Tabla 10, siendo este de
58,96 €/MWh.
Tabla 10: Precio Medio de Retribución Real 2014
0,000
200,000
400,000
600,000
800,000
1000,000
1200,000
1400,000
1 2 3 4
Mill
on
es
de
€
Casos de estudio
ΔI total Primas eólica 2014
Precio Medio de
Retribución Real 2014
(€/MWh)
58,96
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
56
Para evaluar la rentabilidad de los ingresos generados exclusivamente de la negociación de energía en
el mercado diario frente al sistema actual, se puede obtener el precio medio de retribución del mercado diario,
donde sólo se contemple lo gestionado en el mercado diario. Los resultados obtenidos en el caso base y en los
casos de estudio se muestran en la Tabla 11:
Tabla 11: Resultados Precio Medio Retribución Total para los casos de estudio
Al observar la tabla de resultados se aprecia un aumento progresivo a lo largo de los casos de estudio
del precio medio de retribución total, pero todavía quedan considerablemente lejos del valor real obtenido para
2014, distando en el caso base hasta en 18,78 €/MWh y en el caso 4 hasta en 14,94 €/MWh.
Estos resultados reflejan el impacto que tienen las retribuciones específicas para las unidades de
Régimen Especial, ya que, para enfrentarse a un mercado diario sin ellas y mantener los mismos ingresos,
deberán modificar sus estrategias de oferta hasta alcanzar un precio medio de retribución total lo más cercano
posible al real obtenido.
Precio Medio Retribución Total Caso 0 (€/MWh)
Precio Medio Retribución Total Caso 1 (€/MWh)
Precio Medio Retribución Total Caso 2 (€/MWh)
Precio Medio Retribución Total Caso 3 (€/MWh)
Precio Medio Retribución Total Caso 4 (€/MWh)
40,18 40,80 41,56 42,52 43,75
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
57
7 CONCLUSIONES
Se tratará en este apartado de establecer, lo más objetivamente posible, las repercusiones más
significativas que arroja este estudio para el mercado eléctrico en su conjunto.
Como ya se introdujo, la justificación de este proyecto reside en el cambio normativo que a corto-
medio plazo supondrá la supresión total de las primas recibidas por los generadores con tecnología de origen
renovable. Esto supondrá que los generadores afectados dejarán de percibir una cantidad de dinero que hasta
ahora, junto con los ingresos procedentes del mercado diario, parece ser que hacían rentables a estas
tecnologías.
Parece lógico pensar que, ante una disminución de ingresos importante, las unidades afectadas tratarán
de aumentar su competitividad dentro del mercado, lo que supone aumentar precios de oferta de energía con su
estudiada repercusión en el precio final de casación del mismo.
Tras estudiar las nuevas posibles estrategias de oferta asumibles por dichas unidades, se pueden
extraer varias conclusiones referidas al impacto de las mismas en el mercado diario.
Se ha observado, como resultaba previsible, que al aumentar los precios de las ofertas de venta de
energía de cierto grupo de unidades (Régimen Especial), el precio medio anual de casación horario se sitúa en
valores mayores que el original, llegando a aumentar, en el caso de modificación de precios de oferta a 20
€/MWh, hasta en un 4,232% que se traduce en un aumento de 1,784 €/MWh.
También se ha comprobado que estas nuevas estrategias de oferta producen un mayor impacto en el
mercado diario cuando se ejecutan en el periodo invernal, al ser éste en el que originalmente se encuentran
precios menores de casación horarios. Los precios bajos, con algunas horas de precio 0 €/MWh, se
corresponden con una situación de mayor oferta renovable, derivada de la mayor producción eólica durante
esta estación. El impacto en el precio medio de casación horario en el invierno llega a aumentar el precio
medio del mismo en hasta un 20,5% en el caso de modificación de precios de oferta a 20 €/MWh.
Sin embargo en verano estas estrategias producen un impacto nulo en el mercado, al ser este periodo
donde se registran los mayores precios horarios de casación, derivado de una disminución de la oferta eólica
durante esta estación. Para llegar a influir en los precios de mercado al mismo nivel que durante el invierno,
deberían manejarse en el periodo estival nuevas estrategias que modifiquen los precios de oferta de venta de
energía de las unidades objetivo en torno a los 40 o 45 €/MWh.
Del análisis económico de 2014 se puede concluir que el impacto en el mercado diario de estas nuevas
estrategias de oferta no resulta suficiente para cubrir la pérdida de ingresos derivada de la eliminación de la
retribución específica. Sólo en el caso de modificación de precios de oferta a 20 €/MWh se llega a cubrir un
8% de esta retribución específica.
Ante la evidencia de que los precios medios de retribución total en los casos de estudio son
considerablemente menores que el real obtenido para 2014, surge la cuestión sobre la rentabilidad de estas
unidades de producción de tecnologías renovables. En la situación real de mercado, con los datos en la mano,
se puede afirmar que son rentables pero, ¿siguen siendo rentables a estos nuevos precios?
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
58
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
59
8 LÍNEAS FUTURAS
Para finalizar se comentan algunas ideas para futuras líneas de investigación a seguir a partir de este
estudio.
El mayor problema al que se pueda enfrentar aquel que quiera realizar un estudio parecido a este es la
inaccesibilidad de la información. Por motivos de confidencialidad no se ofrece información precisa de la
clasificación de agentes de mercado con respecto a sus tecnologías o agrupaciones. Ser capaz de reunir ese tipo
de información daría lugar a un estudio mucho más sólido que refleje la absoluta realidad del mercado diario.
Otro aspecto que daría mayor consistencia al estudio sería el de poder evaluar las condiciones
complejas de la oferta para reproducir resultados con movimientos más fiables de curvas, ya que trabajar con
curvas simples limita mucho la profundidad del estudio. Con esto, al modificar precios de oferta de venta de
energía, se podría evaluar el movimiento real de ofertas tras la reordenación, existiendo una entrada o salida de
agentes de mercado para cada hora.
Como estudios complementarios, resultaría interesante tratar de incorporar el riesgo de oferta,
inherente a las unidades de tecnologías renovables, proveniente de la incapacidad de asegurar la disponibilidad
de recursos.
Estudiar los costes de producción de las unidades objetivo permitiría evaluar la rentabilidad de las
mismas y contestar a la cuestión planteada durante las conclusiones finales.
Llevar el estudio a horizontes temporales mayores y estudiar la evolución real de las estrategias de
generación a lo largo de los años, daría una visión mucho más concreta de las tendencias de movimiento del
mercado eléctrico en el futuro.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
60
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
61
9 BIBLIOGRAFÍA Y FUENTES
[1] Operador de mercado ibérico de energía OMEI. http://www.omie.es
[2] Red Eléctrica de España http://www.ree.es
[3] Ministerio de industria, energía y turismo. Página web: http://www.minetur.gob.es/es-
es/Paginas/index.aspx
[4] Mathworks. Herramienta Matlab. http://www.es.mathworks.com
[5] Boletín Oficial del Estado. http://www.boe.es
[6] Comisión Nacional de la Energía. http://www.cne.es/cne/Home
[7] Regulación de las energías renovables. http://www.energiaysociedad.es/ficha/3-5-
regulacionespanola-de-las-energiasrenovables
[8] Comisión Nacional de mercados y la competencia. http://www.cnmc.es/
[9] Sistema eléctrico español: Déficit de tarifa y primas.
http://javiersevillano.es/DeficitTarifa.htm#primas
[10] Guillermo Gallego Arias, “Nuevas estrategias de oferta de los generadores de Régimen Especial
al Mercado Diario”. Universidad de Sevilla. Proyecto de fin de grado 2015
[11] Juan Manuel Roldán Fernández, Manuel Burgos Payán, Ángel Luis Trigo García, Juan Luis Díaz
García y Jesús Manuel Riquelme Santos, “Impact of Renewable Generation in the Spanish Electricty
Market”. Departamento de Ingeniería Eléctrica. Universidad de Sevilla.
[12] Burgos Payán, M., Roldán Fernández, J.M., Trigo García, A.L., Bermúdez Ríos, J.M., Riquelme
Santos, J.M., “Costs and benefits of the renewable production of electricity in Spain”, Energy Policy,
Volumen 56, Mayo 2013, Páginas 259-270.
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
62
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
63
10 ANEXOS
10.1 Función “CreaListaNombresCab”
%Función para crear una variable que contenga los nombres de los 365
%ficheros CAB de que se disponen
function nameFile=CreaListaNombrescab;
dianio=0;
for mes=1:12
if (mes<10)
for dia=1:9
aux=['CAB_2014' num2str(0) num2str(mes) num2str(0)
num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
for dia=10:28
aux=['CAB_2014' num2str(0) num2str(mes) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes~=2)
for dia=29:30
aux=['CAB_2014' num2str(0) num2str(mes) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes==1||mes==3||mes==5||mes==7||mes==8)
dia=31;
aux=['CAB_2014' num2str(0) num2str(mes) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
end
end
if(mes>=10)
for dia=1:9
aux=['CAB_2014' num2str(mes) num2str(0) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
for dia=10:30
aux=['CAB_2014' num2str(mes) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes==10||mes==12)
dia=31;
aux=['CAB_2014' num2str(mes) num2str(dia) '.txt'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
end
end
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
64
10.2 Función “ImportCAB”
function
[codigo,numver,unidad,desc,cov,nout1,nop,nout2,nout3,maxrampasub,maxrampabaj,
termfijo,termvar,potencia,maxrampaarr,maxrampapar,pais,anio,mes,dia,hora,minu
to,segundo] = import_cab(filename, startRow, endRow)
%IMPORTA_CAB Importa el cab del fichero de texto con unidades como nombres y
las convierte en vectores columna.
% Ejemplo:
%
[codigo,numver,unidad,desc,cov,nout1,nop,nout2,nout3,maxrampasub,maxrampabaj,
termfijo,termvar,potencia,maxrampaarr,maxrampapar,pais,anio,mes,dia,hora,minu
to,segundo]= import_cab('CAB_20140101.txt');
% Función Auto-generada por Matlab importdata tool.
%% Initialize variables.
if nargin<=2
startRow = 1;
endRow = inf;
end
%% Format string for each line of text:
% column1: double (%f)
% column2: text (%s)
% column3: text (%s)
% column4: text (%s)
% column5: text (%s)
% column6: double (%f)
% column7: double (%f)
% column8: double (%f)
% column9: double (%f)
% column10: double (%f)
% column11: double (%f)
% column12: double (%f)
% column13: double (%f)
% column14: double (%f)
% column15: double (%f)
% column16: double (%f)
% column17: double (%f)
% column18: double (%f)
% column19: double (%f)
% column20: double (%f)
% column21: double (%f)
formatSpec =
'%7f%3s%7s%30s%1s%1s%1s%17f%17f%7f%7f%17f%17f%7f%7f%7f%1f%4f%2f%2f%2f%2f%2f%[
^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to format string.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1,
'Delimiter', '', 'WhiteSpace', '', 'HeaderLines', startRow(1)-1,
'ReturnOnError', false);
for block=2:length(startRow)
frewind(fileID);
dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-
startRow(block)+1, 'Delimiter', '', 'WhiteSpace', '', 'HeaderLines',
startRow(block)-1, 'ReturnOnError', false);
for col=1:length(dataArray)
dataArray{col} = [dataArray{col};dataArrayBlock{col}];
end
end
%% Close the text file.
fclose(fileID);
%% Allocate imported array to column variable names
codigo = dataArray{:, 1};
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
65
numver = dataArray{:, 2};
unidad = dataArray{:, 3};
desc = dataArray{:, 4};
cov = dataArray{:, 5};
nout1 = dataArray{:, 6};
nop = dataArray{:, 7};
nout2 = dataArray{:, 8};
nout3 = dataArray{:, 9};
maxrampasub = dataArray{:, 10};
maxrampabaj = dataArray{:, 11};
termfijo = dataArray{:, 12};
termvar = dataArray{:, 13};
potencia = dataArray{:, 14};
maxrampaarr = dataArray{:, 15};
maxrampapar = dataArray{:, 16};
pais = dataArray{:, 17};
anio = dataArray{:, 18};
mes = dataArray{:, 19};
dia = dataArray{:, 20};
hora = dataArray{:, 21};
minuto = dataArray{:, 22};
segundo = dataArray{:, 23};
10.3 Función “SOLOPotenciasCAB”
function PotenciasCAB = SOLOPotenciasCAB(filename, startRow, endRow)
%Funcion corregida para obtener de un fichero CAB solo la columna de
%potencias. Si se hace todo a la vez está comprobado que existen errores en
%la importación al superponerse los datos.
%IMPORTFILE Import numeric data from a text file as a matrix.
% CAB20140101 = IMPORTFILE(FILENAME) Reads data from text file FILENAME
% for the default selection.
%
% CAB20140101 = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data from
% rows STARTROW through ENDROW of text file FILENAME.
%
% Example:
% CAB20140101 = importfile('CAB_20140101.txt', 1, 634);
%
% See also TEXTSCAN.
% Auto-generated by MATLAB on 2016/02/19 21:42:26
%% Initialize variables.
if nargin<=2
startRow = 1;
endRow = inf;
end
%% Read columns of data as strings:
% For more information, see the TEXTSCAN documentation.
formatSpec = '%*132s%8s%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to format string.
% This call is based on the structure of the file used to generate this
% code. If an error occurs for a different file, try regenerating the code
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
66
% from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1,
'Delimiter', '', 'WhiteSpace', '', 'HeaderLines', startRow(1)-1,
'ReturnOnError', false);
for block=2:length(startRow)
frewind(fileID);
dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-
startRow(block)+1, 'Delimiter', '', 'WhiteSpace', '', 'HeaderLines',
startRow(block)-1, 'ReturnOnError', false);
dataArray{1} = [dataArray{1};dataArrayBlock{1}];
end
%% Close the text file.
fclose(fileID);
%% Convert the contents of columns containing numeric strings to numbers.
% Replace non-numeric strings with NaN.
raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
for col=1:length(dataArray)-1
raw(1:length(dataArray{col}),col) = dataArray{col};
end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));
% Converts strings in the input cell array to numbers. Replaced non-numeric
% strings with NaN.
rawData = dataArray{1};
for row=1:size(rawData, 1);
% Create a regular expression to detect and remove non-numeric prefixes
and
% suffixes.
regexstr = '(?<prefix>.*?)(?<numbers>([-
]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-
]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
try
result = regexp(rawData{row}, regexstr, 'names');
numbers = result.numbers;
% Detected commas in non-thousand locations.
invalidThousandsSeparator = false;
if any(numbers==',');
thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
if isempty(regexp(thousandsRegExp, ',', 'once'));
numbers = NaN;
invalidThousandsSeparator = true;
end
end
% Convert numeric strings to numbers.
if ~invalidThousandsSeparator;
numbers = textscan(strrep(numbers, ',', ''), '%f');
numericData(row, 1) = numbers{1};
raw{row, 1} = numbers{1};
end
catch me
end
end
%% Create output variable
PotenciasCAB = raw;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
67
10.4 Función “UnidadesSINspace”
function UNIDADES = UnidadesSINspace(filename, startRow, endRow)
%IMPORTFILE Import numeric data from a text file as column vectors.
% EDPC2 = IMPORTFILE(FILENAME) Reads data from text file FILENAME for the
% default selection.
%
% EDPC2 = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data from rows
% STARTROW through ENDROW of text file FILENAME.
%
% Example:
% EDPC2 = importfile('celldata2.txt',1, 318151);
%
% See also TEXTSCAN.
% Auto-generated by MATLAB on 2016/02/19 22:53:57
%% Initialize variables.
delimiter = ' ';
if nargin<=2
startRow = 1;
endRow = inf;
end
%% Format string for each line of text:
% column1: text (%s)
% For more information, see the TEXTSCAN documentation.
formatSpec = '%s%*s%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to format string.
% This call is based on the structure of the file used to generate this
% code. If an error occurs for a different file, try regenerating the code
% from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1,
'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'EmptyValue'
,NaN,'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
for block=2:length(startRow)
frewind(fileID);
dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-
startRow(block)+1, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true,
'EmptyValue' ,NaN,'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
dataArray{1} = [dataArray{1};dataArrayBlock{1}];
end
%% Close the text file.
fclose(fileID);
%% Post processing for unimportable data.
% No unimportable data rules were applied during the import, so no post
% processing code is included. To generate code which works for
% unimportable data, select unimportable cells in a file and regenerate the
% script.
%% Allocate imported array to column variable names
UNIDADES = dataArray{:, 1};
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
68
10.5 Función “SacaUdsyPots”
function [unidades,potencias]=SacaUdsyPots;
nameFile=CreaListaNombrescab;
unidades=[];
potencias=[];
P=[];
for dia=1:365
FileName=nameFile(1,dia)
[~,~,U,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~,~]=
import_cab(char(FileName));
unidades=[unidades;U];
P=SOLOPotenciasCAB(char(FileName));
potencias=[potencias;P];
end
fileID = fopen('celldata2.txt','w');
formatSpec = '%s\n';
[nrows,ncols] = size(unidades);
for row = 1:nrows
fprintf(fileID,formatSpec,unidades{row,:});
end
fclose(fileID);
UNIDADES = UnidadesSINspace('celldata2.txt');
unidades=UNIDADES;
end
10.6 Función “UnidadesSNSR”
function [unidadesSNOK,potenciasSNOK]=UnidadesSNSR(unidades,potencias)
dim1=length(unidades);
nuclear={'ALZ1','ASC1','ASC2','TRL1','VAN2','ALZ2','COF1'};
dim2=length(nuclear);
NUC=0;
unidadesSN={};
k=0;
for i=1:dim1
CONT=0;
for j=1:dim2;
if(length(char(nuclear(j)))==length(char(unidades(i))))
%Primero comparo
longitud y luego si son iguales, si no da error al comparar cosas de
diferente longitud. Tengo que hacer esto así por ser cadenas de caracteres
if (char(nuclear(j))==char(unidades(i)))
NUC=NUC+1;
CONT=1;
end
end
end
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
69
if CONT==0;
k=k+1;
unidadesSN{k,1}=unidades(i);
potenciasSN{k,1}=potencias(i);
end
end
dim1=length(unidadesSN);
i=0;
k=0;
CONT=0;
V_uds={};
for i=1:dim1
V_uds{i,1}=char(unidadesSN{i,1});
end
unidadesSN=V_uds;
unidadesSNOK{1,1}=unidadesSN{1,1};
unidadesSNOK{2,1}=unidadesSN{2,1};
potenciasSNOK{1,1}=potenciasSN{1,1};
potenciasSNOK{2,1}=potenciasSN{2,1};
SI=0;
k=2;
for i=1:dim1
i
CONT=0;
j=1;
dim2=length(unidadesSNOK);
while (j<=dim2)
if(length(char(unidadesSNOK(j)))==length(char(unidadesSN(i))))
%Primero comparo longitud y luego
si son iguales, si no da error al comparar cosas de diferente longitud. Tengo
que hacer esto así por ser cadenas de caracteres if
(char(unidadesSNOK(j))==char(unidadesSN(i)))
SI=SI+1;
CONT=1;
break;
end
end
j=j+1;
end
if CONT==0;
k=k+1;
unidadesSNOK(k,1)=unidadesSN(i);
potenciasSNOK(k,1)=potenciasSN(i);
end
end
end
10.7 Función “PMax”
function
[unidadesSNOKMay,potenciasSNOKMAXMay,unidadesSNOKmen,potenciasSNOKMAXmen]=PMa
x(unidades,potencias,unidadesSNOK)
% Función para solucionar el cambio de potencias durante el año de las
% unidades y establecer su potencia como la máxima anual. También se usa
% como método de comprobación de que los resultados no cambian
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
70
ind=length(potencias);
ind2=length(unidadesSNOK);
U=unidades;
P=potencias;
US=unidadesSNOK;
COMPU(ind2,1)=0;
k=0;
for i=1:ind
a=potencias{i,1};
potenciasSNOK2(i,1)={a}; %aux para cell2mat
end
P=cell2mat(potenciasSNOK2);
for i=1:ind2
i
for j=1:ind
if(length(char(US(i)))==length(char(U(j))))
if (char(US(i))==char(U(j)))
COMPU(i,1)=COMPU(i,1)+1;
k=COMPU(i,1);
COMPP(i,k)=P(j);
end
end
end
end
dim=length(unidadesSNOK);
dim2=size(COMPP,2);
unidadesSNOKMay={};
unidadesSNOKmen={};
potenciasSNOKMAX=max(COMPP,[],2); %encuentra el valor máximo de potencia en
cada fila de COMPP
k=0;
n=0;
for i=1:dim
Marcador=0;
for j=1:dim2
if COMPP(i,j)>=15
Marcador=1;
end
end
if Marcador==1
k=k+1;
unidadesSNOKMay{k,1}=char(unidadesSNOK{i,1});
potenciasSNOKMAXMay(k,1)=potenciasSNOKMAX(i,1);
else
n=n+1;
unidadesSNOKmen{n,1}=char(unidadesSNOK{i,1});
potenciasSNOKMAXmen(n,1)=potenciasSNOKMAX(i,1);
end
end
end
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
71
10.8 Función “SumaPyUNIT”
%Función para obtener todas las ofertas simples de la lista de
%generadores con potencia>=15MW
function [SumaP,UNIT]=SumaPyUNIT(unidadesSNOKMay)
tic
dim1=length(unidadesSNOKMay);
V_uds={};
for i=1:dim1
V_uds{i,1}=char(unidadesSNOKMay{i,1});
end
SumaP=zeros(dim1,365);
UNIT=cell(dim1,1);
Filename=CreaListaNombres;
for dia=1:365
nameFile=Filename(dia,1)
load (char(nameFile));
dim=length(VO.price); %dimension vector venta Ofertada - PRECIO
% cont=1; %Contador para ver cuantos generadores cambia
for i=1:dim
j=1;
while j<=dim1
if(length(char(V_uds(j)))==length(char(VO.unitName(i))))
if (char(V_uds(j))==char(VO.unitName(i)))
UNIT{j,1}=VO.unitName(i);
SumaP(j,dia)=VO.price(i)+SumaP(j,dia);
break;
end
end
j=j+1;
end
end
end
toc
end
10.9 Función “MayYmenFINAL”
%Función final para filtrar las unidades según su oferta anual
function [M]=MayYmenFINAL(UNIT,SumaP)
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
72
dim1=length(UNIT);
DIM=603; %MODIFICAR INDICES SI el número de unidades fuera mayor
%603 numero generadores quitando los huecos vacios
%(hasta linea 30 de este script). Sacado de haber
%corrido el programa anteriormente y comprobar que la
%dimension de UNIT2 era 603.
UNIT2=cell(DIM,1);
SumaP2(DIM,365)=0;
k=1;
for i=1:dim1 %ELIMINAR VACIOS
vacio=iscellstr(UNIT{i,1}); %devuelve 0 si esta "vacio" y 1 si hay cadena
if vacio==1
UNIT2(k,1)=UNIT(i);
for j=1:365
SumaP2(k,j)=SumaP(i,j);
end
k=k+1;
end
end
SUMAP(DIM,2)=0;
dim1=length(UNIT2);
for i=1:dim1
for j=1:365
acum=SumaP2(i,j);
SUMAP(i,2)=SUMAP(i,2)+acum;
end
end
UNITFINAL={};
k=1;
for i=1:dim1
if SUMAP(i,2)==0;
UNITFINAL(k,1)=UNIT2(i);
k=k+1;
end
end
end
10.10 Función “CreaListaNombres”
function nameFile=CreaListaNombres;
nameFile=cell(365,1);
dianio=0;
for mes=1:12
if (mes<10)
for dia=1:9
aux=['2014' num2str(0) num2str(mes) num2str(0) num2str(dia)
'.mat'];
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
73
dianio=dianio+1;
nameFile{dianio}=aux;
end
for dia=10:28
aux=['2014' num2str(0) num2str(mes) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes~=2)
for dia=29:30
aux=['2014' num2str(0) num2str(mes) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes==1||mes==3||mes==5||mes==7||mes==8)
dia=31;
aux=['2014' num2str(0) num2str(mes) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
end
end
if(mes>=10)
for dia=1:9
aux=['2014' num2str(mes) num2str(0) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
for dia=10:30
aux=['2014' num2str(mes) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
if (mes==10||mes==12)
dia=31;
aux=['2014' num2str(mes) num2str(dia) '.mat'];
dianio=dianio+1;
nameFile{dianio}=aux;
end
end
end
10.11 Función “pruebacurvaagregada4”
%Modificacion final de pruebacurvaagregada, usada en CambiaPreciosOrigFINAL
% en la que uso un vector auxiliar MarcaCV para ver si se ha fijado el
% precio final (en caso de solucion múltiple o VACIA de SimpleMatch) según
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
74
%la última oferta de Compra o de Venta ofertada
auxVC=0;
auxCC=0;
hora=0;
aggEnergyC=0;
aggEnergyV=0;
aggPriceC=0;
aggPriceV=0;
x0=0;
y0=0;
CCn=0;
VCn=0;
Pc=0;
Ec=0;
Ecc1=0;
Ecv1=0;
Pcv1=0;
Pcc1=0;
mode='descend';
for hora=1:23
i=i+1;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
if hora==1;
auxVC(hora)=indexhorasVC;
value1=VC.energy(1:auxVC(hora)); %326 en hora 1 ordenar de mayor a menor
value2=sort(VC.price(1:auxVC(hora))); % sort para ordenar de menor a mayor
% value2=VC.price(1:326);
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC;
value3=CC.energy(1:auxCC);
value4=CC.price(1:auxCC);
CCn=struct('energy',value3, 'price',value4);
else
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=(VC.energy((auxVC(hora-1)+1):auxVC(hora))); %326 en hora 1
value2=sort(VC.price((auxVC(hora-1)+1):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC+auxCC(hora-1);
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
75
end
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end); %todo esto es para situacion de corte horizontal y
ver que precio y energía se ha marcado, si el de Venta o el de Compra
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
PCOMPv=PrecioReal(i)-Pcv1;
PCOMPc=PrecioReal(i)-Pcc1;
% Comparo precio de venta casado por funcion con el precio real casado
(DATO), si la diferencia es muy pequeña
% significará que el precio al que se casó fue el de venta. Si es muy
% grande significará que el precio al que se casó fue el otro, el de
% compra. MODIFICACION: Meto dos comprobaciones para que result sea mas
fiable
%compra = 1 y venta=0
if abs(PCOMPv)<=abs(PCOMPc);
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
MarcaCV(i)=0;
else
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
MarcaCV(i)=1;
end
else
Ec(hora)=x0;
Pc(hora)=y0;
MarcaCV(i)=2;
end
end
comp=(isequal(char(FileName),char('20140330.mat')));
if (comp==0)
i=i+1;
hora=24;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=VC.energy((auxVC(hora-1)+1):auxVC(hora));
value2=sort(VC.price((auxVC(hora-1)):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC+auxCC(hora-1);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
76
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
% hora
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
PCOMPv=PrecioReal(i)-Pcv1;
PCOMPc=PrecioReal(i)-Pcc1;
% Comparo precio de venta casado por funcion con el precio real casado
(DATO), si la diferencia es muy pequeña
% significará que el precio al que se casó fue el de venta. Si es muy
% grande significará que el precio al que se casó fue el otro, el de
% compra. MODIFICACION: Meto dos comprobaciones para que result sea mas
fiable
%compra = 1 y venta=0
if abs(PCOMPv)<=abs(PCOMPc);
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
MarcaCV(i)=0;
else
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
MarcaCV(i)=1;
end
else
Ec(hora)=x0;
Pc(hora)=y0;
MarcaCV(i)=2;
end
end
if (isequal(char(FileName),char('20141026.mat'))==1)
i=i+1;
hora=25;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=VC.energy((auxVC(hora-1)+1):auxVC(hora));
value2=sort(VC.price((auxVC(hora-1)+1):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
77
auxCC(hora)=indexhorasCC+auxCC(hora-1);
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
PCOMPv=PrecioReal(i)-Pcv1;
PCOMPc=PrecioReal(i)-Pcc1;
% Comparo precio de venta casado por funcion con el precio real casado
(DATO), si la diferencia es muy pequeña
% significará que el precio al que se casó fue el de venta. Si es muy
% grande significará que el precio al que se casó fue el otro, el de
% compra. MODIFICACION: Meto dos comprobaciones para que result sea mas
fiable
%compra = 1 y venta=0
if abs(PCOMPv)<=abs(PCOMPc);
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
MarcaCV(i)=0;
else
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
MarcaCV(i)=1;
end
else
Ec(hora)=x0;
Pc(hora)=y0;
MarcaCV(i)=2;
end
end
10.12 Función “SimpleMatch2”
function [x0,y0] = simpleMatch(x1,y1,x2,y2)
% x1 C_energy y1 C_price
% x2 V_energy y2 V_price
% Curvas de prueba
% Son cruvas agregadas escalonadas. Siempre existe punto de corte
% [x1,y1]=aggregatedCurve([30 20 10 5],[50 20 10 5]);
% [x2,y2]=aggregatedCurve([0 10 25 35],[0 5 10 20]);
% [x1,y1]=aggregatedCurve([50 30 10 5],[50 20 10 5]);
% [x2,y2]=aggregatedCurve([0 10 25 35],[0 5 10 20]);
% corregido el 23/03/15. Corte en tramo horizontal
[x0,y0] = intersection(x1,y1,x2,y2);
% IF THERE ARE MULTIPLE SOLUTIONS. HORIZONTAL OVERLAP. x OR ENERGY IS
% MUTLIPLE
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
78
if length(x0)>1
% VERTICAL OVERLAP
if x0==x0(1)
%disp('vertical')
% Precio Superior: el menor precio Compra_Casada(izq) y
Venta_No_Casada
% (dcha)
Icompra=x1==x0(1);
Iventa=x2==x0(1);
%precio Compra_Casada(izq)
PrecioCompraCasada=max(y1(Icompra));
PrecioVentaNoCasada=max(y2(Iventa));
Psup=min(PrecioCompraCasada,PrecioVentaNoCasada);
% Precio inferior: el mayor precio Compra No Casada(dcha) y Venta
% Casada
PrecioCompraNoCasada=min(y1(Icompra));
PrecioVentaCasada=min(y2(Iventa));
Pinf=max(PrecioCompraNoCasada,PrecioVentaCasada);
y0=(Psup+Pinf)*0.5;
x0=x0(1);
else %COINCIDENCIA EN TRAMO HORIZONTAL OJO REVISAR
% DETERMINACIÓN DEL EXCESO COMPRA O VENTA
% corte horizontal => Precios iguales O NO si no
cortan!!!!!!!!!!!
PriceH=y0(1);
indC=y1==PriceH;
indV=y2==PriceH;
compHv=x1(indC);
ventHv=x2(indV);
if compHv(end)>=ventHv(end) % Exceso demanda
x0=ventHv(end);
else
x0=compHv(end);
end
y0=PriceH;
end%end if
end%end if
end%END FUNCTION
10.13 Script “CambiaOrigFINAL”
%---------------- Selección de Unidades EOLICAS -----------------------
load('Mayores.mat');
i=1;
dim5=length(M);
Vector_codigos_eolica=cell(dim5,1);
for i=1:dim5
Vector_codigos_eolica{i,1}=char(M{i,1});
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
79
end
MarcaCV(8760)=0;
PrecioReal(8760)=0;
load('casationPrice2014.mat');
for i=1:8760
PrecioReal(i)=casationPrice2014(i,2);
end
i=0;
acum=0; %variable auxiliar para AlmacenamientoEstructura
valor1=cell(1,1);
valor2=cell(2,1);
valor3=cell(2,1);
valor4=cell(2,1);
%---------------------Lectura DATOS 2014 ---------------------
%Bucle lectura/carga de datos
nameFile=CreaListaNombres; %Funcion crear lista de nombres archivos datos
%---------------Comparación y cambio de precio---------------------
for dia=1:365
FileName=nameFile(dia,1)
load (char(FileName))
dim=length(VC.price); %dimension vector Compra Casada - PRECIO
cont=1; %Contador para ver cuantos generadores cambia
pruebacurvaagregada4 %llamada a funcion (script)
Ec;
Pc;
L=length(Pc);
% Bucle acumulacion de datos para posterior escritura en struct
for k=1:L
valor1{k+acum,1}=char(FileName);
valor2{k+acum,1}=k;
valor3{k+acum,1}=Pc(k);
valor4{k+acum,1}=Ec(k);
end
acum=k+acum;
end
% Guardar datos almacenados en esctructura
VALOR={valor1,valor2,valor3,valor4};
% ValoresCasados=struct('dia',valor1,'hora',valor2,'PrecioCasado',valor3,...
% 'EnergiaCasada',valor4)
campos={'dia','hora','PrecioCasado','EnergiaCasada'};
ValoresCasadosOrigFINAL=cell2struct(VALOR,campos,2);
toc
% ----------------------GUARDAR DATOS------------------------
%Obtener el Path de la carpeta Actual
[stat,struc] = fileattrib;
PathCurrent = struc.Name;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
80
a=cell2mat(ValoresCasadosOrigFINAL.dia);
b=cell2mat(ValoresCasadosOrigFINAL.hora);
c=cell2mat(ValoresCasadosOrigFINAL.PrecioCasado);
d=cell2mat(ValoresCasadosOrigFINAL.EnergiaCasada);
%crear las rutas (Path) para carpetas y archivos
FolderName = ['DATOSORIGINALESFINAL'];
PathFolder = [PathCurrent '/RESULTADOSFINAL/' FolderName];
mkdir([PathCurrent '/RESULTADOSFINAL'], FolderName);
save([PathFolder '/workspace.mat']);
save([PathFolder '/ValoresCasadosOrigFINAL.mat'], 'ValoresCasadosOrigFINAL');
save([PathFolder '/MarcaCV.mat'], 'MarcaCV');
10.14 Script “pruebacurvaagregada5”
%Modificación final de pruebacurvaagregada, usada en la funcion
%CambiaPreciosM, en la que, según el vector MarcaCV obtenido de los
%resultados originales, fijará el precio en caso de solución múltiple o VACIA
de
%SimpleMatch según haya sido el original, el de Compra o el de Venta último
%ofertado. Si el corte hubiera sido "limpio" en el original, y en el caso
%de precio modificado sucediera un corte múltiple o vacío (hztal o
%vertical) se usará el criterio de Exceso Oferta-Demanda
auxVC=0;
auxCC=0;
hora=0;
aggEnergyC=0;
aggEnergyV=0;
aggPriceC=0;
aggPriceV=0;
x0=0;
y0=0;
CCn=0;
VCn=0;
Pc=0;
Ec=0;
Ecc1=0;
Ecv1=0;
Pcv1=0;
Pcc1=0;
mode='descend';
for hora=1:23
i=i+1;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
if hora==1;
auxVC(hora)=indexhorasVC;
value1=VC.energy(1:auxVC(hora));
value2=sort(VC.price(1:auxVC(hora))); % sort para ordenar de menor a mayor
VCn=struct('energy',value1, 'price',value2);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
81
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC;
value3=CC.energy(1:auxCC); %155 en hora 1
value4=CC.price(1:auxCC);
CCn=struct('energy',value3, 'price',value4);
else
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=(VC.energy((auxVC(hora-1)+1):auxVC(hora))); %326 en hora 1
value2=sort(VC.price((auxVC(hora-1)+1):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC+auxCC(hora-1);
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
end
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
if MarcaCV(i)==1 %compra = 1 y venta=0
normal=2
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
elseif MarcaCV(i)==0
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
elseif MarcaCV(i)==2 %Caso en que el corte original haya
sido "limpio" pero el corte del precio cambiado sea hztal o vertical
%veremos ahora si existe exceso
%de demanda o de oferta
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
82
indNPV=Pcv1==aggPriceV;
indNPC=Pcc1==aggPriceC;
IndexPV=find(indNPV==1);
IndexPC=find(indNPC==1);
l=IndexPV(1);
m=IndexPC(1);
EcvCOMP=aggEnergyV(l);
EccCOMP=aggEnergyC(m);
if EccCOMP<=EcvCOMP % Exceso demanda
Ec(hora)=Ecc1;
Pc(hora)=Pcc1;
else
Ec(hora)=Ecv1;
Pc(hora)=Pcv1;
end
end
else
Ec(hora)=x0;
Pc(hora)=y0;
end
end
comp=(isequal(char(FileName),char('20140330.mat')));
if (comp==0)
i=i+1;
hora=24;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=VC.energy((auxVC(hora-1)+1):auxVC(hora)); %326 en hora 1
value2=sort(VC.price((auxVC(hora-1)):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC+auxCC(hora-1);
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
% hora
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
83
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
if MarcaCV(i)==1 %compra = 1 y venta=0
normal=2
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
elseif MarcaCV(i)==0
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
elseif MarcaCV(i)==2 %Caso en que el corte
original haya sido "limpio" pero el corte del precio cambiado sea hztal o
vertical
%veremos ahora si existe exceso
%de demanda o de oferta
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
indNPV=Pcv1==aggPriceV;
indNPC=Pcc1==aggPriceC;
IndexPV=find(indNPV==1);
IndexPC=find(indNPC==1);
l=IndexPV(1);
m=IndexPC(1);
EcvCOMP=aggEnergyV(l);
EccCOMP=aggEnergyC(m);
if EccCOMP<=EcvCOMP % Exceso demanda
Ec(hora)=Ecc1;
Pc(hora)=Pcc1;
else
Ec(hora)=Ecv1;
Pc(hora)=Pcv1;
end
end
else
Ec(hora)=x0;
Pc(hora)=y0;
end
end
if (isequal(char(FileName),char('20141026.mat'))==1)
i=i+1;
hora=25;
ind=VC.hour==hora;
indexhorasVC=length(VC.hour(ind));
auxVC(hora)=indexhorasVC+auxVC(hora-1); %necesito esto para ir acumulando
el indice
value1=VC.energy((auxVC(hora-1)+1):auxVC(hora)); %326 en hora 1
value2=sort(VC.price((auxVC(hora-1)+1):auxVC(hora))); % sort para ordenar de
menor a mayor
VCn=struct('energy',value1, 'price',value2);
ind2=CC.hour==hora;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
84
indexhorasCC=length(CC.hour(ind2));
auxCC(hora)=indexhorasCC+auxCC(hora-1);
value3=CC.energy((auxCC(hora-1)+1):auxCC(hora));
value4=CC.price((auxCC(hora-1)+1):auxCC(hora));
CCn=struct('energy',value3, 'price',value4);
[aggEnergyV,aggPriceV]=aggregatedCurve(VCn.energy,VCn.price);
[aggEnergyC,aggPriceC]=aggregatedCurve(CCn.energy,CCn.price);
[x0,y0]=simpleMatch2(aggEnergyC,aggPriceC,aggEnergyV,aggPriceV);
VACIOx=isempty(x0);
VACIOy=isempty(y0);
if (VACIOx==1||VACIOy==1)
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
if MarcaCV(i)==1 %compra = 1 y venta=0
normal=2
Pc(hora)=Pcc1;
Ec(hora)=Ecc1;
elseif MarcaCV(i)==0
Pc(hora)=Pcv1;
Ec(hora)=Ecv1;
elseif MarcaCV(i)==2 %Caso en que el corte
original haya sido "limpio" pero el corte del precio cambiado sea hztal o
vertical
%veremos ahora si existe exceso
%de demanda o de oferta
Ecv1=aggEnergyV(end);
Pcv1=aggPriceV(end);
Ecc1=aggEnergyC(end);
Pcc1=aggPriceC(end);
indNPV=Pcv1==aggPriceV;
indNPC=Pcc1==aggPriceC;
IndexPV=find(indNPV==1);
IndexPC=find(indNPC==1);
l=IndexPV(1);
m=IndexPC(1);
EcvCOMP=aggEnergyV(l);
EccCOMP=aggEnergyC(m);
if EccCOMP<=EcvCOMP % Exceso demanda
Ec(hora)=Ecc1;
Pc(hora)=Pcc1;
else
Ec(hora)=Ecv1;
Pc(hora)=Pcv1;
end
end
else
Ec(hora)=x0;
Pc(hora)=y0;
end
end
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
85
10.15 Función “CambiapreciosM”
function CambiaPreciosM(P)
%---------------- Selección de Unidades EOLICAS -----------------------
load('Mayores.mat');
dim5=length(M);
Vector_codigos_eolica=cell(dim5,1);
load('MarcaCV.mat');
for n=1:dim5
Vector_codigos_eolica{n,1}=char(M{n,1});
end
i=0;
acum=0; %variable auxiliar para AlmacenamientoEstructura
valor1=cell(1,1);
valor2=cell(2,1);
valor3=cell(2,1);
valor4=cell(2,1);
% Codigos eolica accedo ahora en Vector_codigos_eolica{i,1} con imax=339
%---------------------Lectura DATOS 2014 ---------------------
%Bucle lectura/carga de datos
nameFile=CreaListaNombres; %Funcion crear lista de nombres archivos datos
%num2str
%---------------Comparación y cambio de precio---------------------
% MIRAR ISMEMBER!!!!!!!!!!!!!!!!!!!
for dia=1:365
FileName=nameFile(dia,1)
load (char(FileName))
dim=length(VC.price); %dimension vector Compra Casada - PRECIO
cont=1; %Contador para ver cuantos generadores cambia
for n=1:dim
for j=1:dim5
if(length(char(Vector_codigos_eolica(j)))==length(char(VC.unitName(n))))
if (char(Vector_codigos_eolica(j))==char(VC.unitName(n)))
VC.price(n)=P;
end
end
end
end
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
86
pruebacurvaagregada5;
Ec;
Pc;
L=length(Pc);
% Bucle acumulacion de datos para posterior escritura en struct
for k=1:L
valor1{k+acum,1}=char(FileName);
valor2{k+acum,1}=k;
valor3{k+acum,1}=Pc(k);
valor4{k+acum,1}=Ec(k);
end
acum=k+acum;
end
% Guardar datos almacenados en esctructura
VALOR={valor1,valor2,valor3,valor4};
)
campos={'dia','hora','PrecioCasado','EnergiaCasada'};
if P==5
ValoresCasadosP5=cell2struct(VALOR,campos,2)
% ----------------------GUARDAR DATOS------------------------
%Obtener el Path de la carpeta Actual
[stat,struc] = fileattrib;
PathCurrent = struc.Name;
a=cell2mat(ValoresCasadosP5.dia);
b=cell2mat(ValoresCasadosP5.hora);
c=cell2mat(ValoresCasadosP5.PrecioCasado);
d=cell2mat(ValoresCasadosP5.EnergiaCasada);
%crear las rutas (Path) para carpetas y archivos
FolderName = ['DATOSMAY15P5FINAL'];
PathFolder = [PathCurrent '/RESULTADOSFINAL/' FolderName];
mkdir([PathCurrent '/RESULTADOSFINAL'], FolderName);
save([PathFolder '/workspace.mat']);
save([PathFolder '/ValoresCasadosP5.mat'], 'ValoresCasadosP5');
elseif P==10
ValoresCasadosP10=cell2struct(VALOR,campos,2)
toc
% ----------------------GUARDAR DATOS------------------------
%Obtener el Path de la carpeta Actual
[stat,struc] = fileattrib;
PathCurrent = struc.Name;
a=cell2mat(ValoresCasadosP10.dia);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
87
b=cell2mat(ValoresCasadosP10.hora);
c=cell2mat(ValoresCasadosP10.PrecioCasado);
d=cell2mat(ValoresCasadosP10.EnergiaCasada);
%crear las rutas (Path) para carpetas y archivos
FolderName = ['DATOSMAY15P10FINAL'];
PathFolder = [PathCurrent '/RESULTADOSFINAL/' FolderName];
mkdir([PathCurrent '/RESULTADOSFINAL'], FolderName);
save([PathFolder '/workspace.mat']);
save([PathFolder '/ValoresCasadosP10.mat'], 'ValoresCasadosP10');
elseif P==15
ValoresCasadosP15=cell2struct(VALOR,campos,2)
% ----------------------GUARDAR DATOS------------------------
%Obtener el Path de la carpeta Actual
[stat,struc] = fileattrib;
PathCurrent = struc.Name;
a=cell2mat(ValoresCasadosP15.dia);
b=cell2mat(ValoresCasadosP15.hora);
c=cell2mat(ValoresCasadosP15.PrecioCasado);
d=cell2mat(ValoresCasadosP15.EnergiaCasada);
%crear las rutas (Path) para carpetas y archivos
FolderName = ['DATOSMAY15P15FINAL'];
PathFolder = [PathCurrent '/RESULTADOSFINAL/' FolderName];
mkdir([PathCurrent '/RESULTADOSFINAL'], FolderName);
save([PathFolder '/workspace.mat']);
save([PathFolder '/ValoresCasadosP15.mat'], 'ValoresCasadosP15');
elseif P==20
ValoresCasadosP20=cell2struct(VALOR,campos,2)
toc
% ----------------------GUARDAR DATOS------------------------
%Obtener el Path de la carpeta Actual
[stat,struc] = fileattrib;
PathCurrent = struc.Name;
a=cell2mat(ValoresCasadosP20.dia);
b=cell2mat(ValoresCasadosP20.hora);
c=cell2mat(ValoresCasadosP20.PrecioCasado);
d=cell2mat(ValoresCasadosP20.EnergiaCasada);
%crear las rutas (Path) para carpetas y archivos
FolderName = ['DATOSMAY15P20FINAL'];
PathFolder = [PathCurrent '/RESULTADOSFINAL/' FolderName];
mkdir([PathCurrent '/RESULTADOSFINAL'], FolderName);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
88
save([PathFolder '/workspace.mat']);
save([PathFolder '/ValoresCasadosP20.mat'], 'ValoresCasadosP20');
end
toc
end
10.16 Función “PruebaEstacionalfuncion”
function PruebaEstacional(P)
%Funcion PruebaEstacional lo que hace es un análisis del incremento de
%precios y energías al modificar el Precio Original de casación de las
%unidades de Régimen Especial. Esta función es utilizada por otras
%funciones para obtener valores como las horas en las que
%cambia el precio o la energia, o ambos
%------Nombres VARIABLES------
NombreArchivo=['ValoresCasadosP' num2str(P)]
load(char(NombreArchivo))
if P==15
VectorP=cell2mat(ValoresCasadosP15.PrecioCasado);
VectorEP=cell2mat(ValoresCasadosP15.EnergiaCasada);
elseif P==5
VectorP=cell2mat(ValoresCasadosP5.PrecioCasado);
VectorEP=cell2mat(ValoresCasadosP5.EnergiaCasada);
elseif P==10
VectorP=cell2mat(ValoresCasadosP10.PrecioCasado);
VectorEP=cell2mat(ValoresCasadosP10.EnergiaCasada);
elseif P==20
VectorP=cell2mat(ValoresCasadosP20.PrecioCasado);
VectorEP=cell2mat(ValoresCasadosP20.EnergiaCasada);
end
% load('ValoresCasadosP10.mat');
% load('ValoresCasadosP5.mat');
load('ValoresCasadosOrigFINAL.mat');
% load('ValoresCasadosP15.mat');
% load('ValoresCasadosP20M15.mat');
dim=length(ValoresCasadosOrigFINAL.PrecioCasado);
% dim10=length(ValoresCasadosP10.PrecioCasado);
% dim5=length(ValoresCasadosP5M15.PrecioCasado);
Nocambian=0; %Vble aux para ver cuantos precios NO CAMBIAN
Sicambian=0; %Vble aux para ver cuantos precios SI CAMBIAN
NocambianE=0; %Vble aux para ver cuantas Energias NO CAMBIAN
SicambianE=0; %Vble aux para ver cuantas ENergias SI CAMBIAN
POrig=cell2mat(ValoresCasadosOrigFINAL.PrecioCasado);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
89
% P10=cell2mat(ValoresCasadosP10.PrecioCasado);
% P15=cell2mat(ValoresCasadosP15.PrecioCasado);
% P15=cell2mat(ValoresCasadosP15.PrecioCasado);
% P20=cell2mat(ValoresCasadosP20.PrecioCasado);
EOrig=cell2mat(ValoresCasadosOrigFINAL.EnergiaCasada);
% E10=cell2mat(ValoresCasadosP10.EnergiaCasada);
% VectorEP=cell2mat(ValoresCasadosP15.EnergiaCasada);
% E15=cell2mat(ValoresCasadosP15.EnergiaCasada);
% E20=cell2mat(ValoresCasadosP20.EnergiaCasada);
marzo20h24=1896; %ultima hora Invierno
marzo21h1=1897; %primera hora Primavera
junio20h24=4103; %ultima hora Primavera
junio21h1=4104; %primera hora Verano
sept20h24=6311; %ultima hora Verano
sept21h1=6312; %primera hora Otoño
dic20h24=8496; %Ultima hora Otoño
dic21h1=8497; %Primera hora Invierno
NocambianINV=0;
SicambianINV=0;
NocambianPRI=0;
SicambianPRI=0;
NocambianVER=0;
SicambianVER=0;
NocambianOTO=0;
SicambianOTO=0;
SicambianEPRI=0;
NocambianEPRI=0;
SicambianEINV=0;
NocambianEINV=0;
SicambianEOTO=0;
NocambianEOTO=0;
SicambianEVER=0;
NocambianEVER=0;
Cinv=1; %contadores para dias estaciones
Cpri=1;
Cver=1;
Coto=1;
horasPRI=4104-1897;
horasVER=6312-4104;
horasOTO=8497-6312;
horasINV=8761-8497+1896;
for i=1:dim %8760 horas del año
if (POrig(i)==VectorP(i)) %Si Precio Original = Precio Cambiado -> El
precio NO ha cambiado
Nocambian=Nocambian+1;
CambioP(i,1)=0;
else
filtrado=VectorP(i)-POrig(i);
tolerancia=0.001;
if abs(filtrado)>=tolerancia
Sicambian=Sicambian+1; %Si no, El precio SI ha cambiado
CambioP(i,1)=VectorP(i)-POrig(i);
HanCambiadoP(Sicambian)=CambioP(i,1); %Almaceno solo los que han
cambiado
% en vector HanCambiado
else
Nocambian=Nocambian+1;
CambioP(i,1)=0;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
90
end
end
end
Nocambian;
Sicambian;
X100Cambio=(Sicambian*100)/8760; % porcentaje precios cambian
X100NoCambio=(Nocambian*100)/8760; %porcentaje precios NO cambian
% Cambio0a10=0; %Numero de Precios que cambian de 0 a 10
acumuladoOrig=0; %Vble aux suma para precio medio ORIG
acumuladoP=0; %Vble aux para precio medio P10
for i=1:dim
acumuladoOrig=POrig(i)+acumuladoOrig;
acumuladoP=VectorP(i)+acumuladoP;
end
PmedioOrig=acumuladoOrig/8760;
PmedioP=acumuladoP/8760;
AumentoPmedio=PmedioP-PmedioOrig;
AumentoPmedioX100=((PmedioP*100)/PmedioOrig)-100;
for i=1:dim %8760 horas del año
if (EOrig(i)==VectorEP(i)) %Si Energia Original = Energia Casada ->
Energia Casada NO ha cambiado
NocambianE=NocambianE+1;
CambioEP(i,1)=0;
else
filtradoE=VectorEP(i)-EOrig(i);
toleranciaE=0.1;
if abs(filtradoE)>=toleranciaE
SicambianE=SicambianE+1; %Si no, Energia Casada SI ha cambiado
CambioEP(i,1)=VectorEP(i)-EOrig(i);
HanCambiadoEP(SicambianE)=CambioEP(i,1); %Almaceno solo los que han
cambiado
% en vector HanCambiado
else
NocambianE=NocambianE+1;
CambioEP(i,1)=0;
end
end
end
NocambianE;
SicambianE;
X100CambioE=(SicambianE*100)/8760; % porcentaje energia cambian
X100NoCambioE=(NocambianE*100)/8760; %porcentaje energia NO cambian
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
91
% Cambio0a10=0; %Numero de Precios que cambian de 0 a 10
acumuladoOrigE=0; %Vble aux suma para energia medio ORIG
acumuladoE=0; %Vble aux para energia medio P10
for i=1:dim
acumuladoOrigE=EOrig(i)+acumuladoOrigE;
acumuladoE=VectorEP(i)+acumuladoE;
end
EcambioTOT=acumuladoE-acumuladoOrigE;
EmedioOrig=acumuladoOrigE/8760;
EmedioP=acumuladoE/8760;
AumentoEmedio=EmedioP-EmedioOrig;
AumentoEmedioX100=((EmedioP*100)/EmedioOrig)-100;
% %-------------------------------ESTACIONAL----------------------------
marzo20h24=1896; %ultima hora Invierno
marzo21h1=1897; %primera hora Primavera
junio20h24=4103; %ultima hora Primavera
junio21h1=4104; %primera hora Verano
sept20h24=6311; %ultima hora Verano
sept21h1=6312; %primera hora Otoño
dic20h24=8496; %Ultima hora Otoño
dic21h1=8497; %Primera hora Invierno
%--------- PRIMAVERA ---------
%----------PRECIOS------------
acumuladoOrigPRI=0;
acumuladoPPRI=0;
for i=marzo21h1:junio20h24
if CambioP(i)==0
NocambianPRI=NocambianPRI+1;
else
SicambianPRI=SicambianPRI+1;
end
acumuladoOrigPRI=POrig(i)+acumuladoOrigPRI;
acumuladoPPRI=VectorP(i)+acumuladoPPRI;
end
NocambianPRI;
SicambianPRI;
X100CambioPRI=(SicambianPRI*100)/horasPRI; % porcentaje precios cambian
X100NoCambioPRI=(NocambianPRI*100)/horasPRI; %porcentaje precios NO cambian
PmedioOrigPRI=acumuladoOrigPRI/horasPRI;
PmedioPPRI=acumuladoPPRI/horasPRI;
AumentoPmedioPRI=PmedioPPRI-PmedioOrigPRI;
AumentoPmedioPRIX100=((PmedioPPRI*100)/PmedioOrigPRI)-100;
%-------------ENERGIA------------------
acumuladoOrigEPRI=0; %Vble aux suma para energia medio ORIG
acumuladoEPPRI=0; %Vble aux para energia medio P15
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
92
for i=marzo21h1:junio20h24 % horas primavera
if CambioEP(i)==0
NocambianEPRI=NocambianEPRI+1;
else
SicambianEPRI=SicambianEPRI+1;
end
acumuladoOrigEPRI=EOrig(i)+acumuladoOrigEPRI;
acumuladoEPPRI=VectorEP(i)+acumuladoEPPRI;
end
NocambianEPRI;
SicambianEPRI;
X100CambioEPRI=(SicambianEPRI*100)/horasPRI; % porcentaje energia cambian
X100NoCambioEPRI=(NocambianEPRI*100)/horasPRI; %porcentaje energia NO
cambian
EmedioOrigPRI=acumuladoOrigEPRI/horasPRI;
EmedioPPRI=acumuladoEPPRI/horasPRI;
AumentoEmedioPRI=EmedioPPRI-EmedioOrigPRI;
AumentoEmedioX100PRI=((EmedioPPRI*100)/EmedioOrigPRI)-100;
% ------VERANO----------
acumuladoOrigVER=0;
acumuladoPVER=0;
for i=junio21h1:sept20h24
if CambioP(i)==0
NocambianVER=NocambianVER+1;
else
SicambianVER=SicambianVER+1;
end
acumuladoOrigVER=POrig(i)+acumuladoOrigVER;
acumuladoPVER=VectorP(i)+acumuladoPVER;
end
NocambianVER;
SicambianVER;
X100CambioVER=(SicambianVER*100)/horasVER; % porcentaje precios cambian
X100NoCambioVER=(NocambianVER*100)/horasVER; %porcentaje precios NO cambian
PmedioOrigVER=acumuladoOrigVER/horasVER;
PmedioPVER=acumuladoPVER/horasVER;
AumentoPmedioVER=PmedioPVER-PmedioOrigVER;
AumentoPmedioVERX100=((PmedioPVER*100)/PmedioOrigVER)-100;
%-------------ENERGIA------------------
acumuladoOrigEVER=0; %Vble aux suma para energia medio ORIG
acumuladoEPVER=0; %Vble aux para energia medio P15
for i=junio21h1:sept20h24 % horas VERANO
if CambioEP(i)==0
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
93
NocambianEVER=NocambianEVER+1;
else
SicambianEVER=SicambianEVER+1;
end
acumuladoOrigEVER=EOrig(i)+acumuladoOrigEVER;
acumuladoEPVER=VectorEP(i)+acumuladoEPVER;
end
NocambianEVER;
SicambianEVER;
X100CambioEVER=(SicambianEVER*100)/horasVER; % porcentaje energia cambian
X100NoCambioEVER=(NocambianEVER*100)/horasVER; %porcentaje energia NO
cambian
EmedioOrigVER=acumuladoOrigEVER/horasVER;
EmedioPVER=acumuladoEPVER/horasVER;
AumentoEmedioVER=EmedioPVER-EmedioOrigVER;
AumentoEmedioX100VER=((EmedioPVER*100)/EmedioOrigVER)-100;
% -----OTOÑO-----------
acumuladoOrigOTO=0;
acumuladoPOTO=0;
for i=sept21h1:dic20h24
if CambioP(i)==0
NocambianOTO=NocambianOTO+1;
else
SicambianOTO=SicambianOTO+1;
end
acumuladoOrigOTO=POrig(i)+acumuladoOrigOTO;
acumuladoPOTO=VectorP(i)+acumuladoPOTO;
end
NocambianOTO;
SicambianOTO;
X100CambioOTO=(SicambianOTO*100)/horasOTO; % porcentaje precios cambian
X100NoCambioOTO=(NocambianOTO*100)/horasOTO; %porcentaje precios NO cambian
PmedioOrigOTO=acumuladoOrigOTO/horasOTO;
PmedioPOTO=acumuladoPOTO/horasOTO;
AumentoPmedioOTO=PmedioPOTO-PmedioOrigOTO;
AumentoPmedioOTOX100=((PmedioPOTO*100)/PmedioOrigOTO)-100;
%-------------ENERGIA------------------
acumuladoOrigEOTO=0; %Vble aux suma para energia medio ORIG
acumuladoEOTO=0; %Vble aux para energia medio P15
for i=sept21h1:dic20h24 % horas OTOÑO
if CambioEP(i)==0
NocambianEOTO=NocambianEOTO+1;
else
SicambianEOTO=SicambianEOTO+1;
end
acumuladoOrigEOTO=EOrig(i)+acumuladoOrigEOTO;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
94
acumuladoEOTO=VectorEP(i)+acumuladoEOTO;
end
NocambianEOTO;
SicambianEOTO;
X100CambioEOTO=(SicambianEOTO*100)/horasOTO; % porcentaje energia cambian
X100NoCambioEOTO=(NocambianEOTO*100)/horasOTO; %porcentaje energia NO
cambian
EmedioOrigOTO=acumuladoOrigEOTO/horasOTO;
EmedioPOTO=acumuladoEOTO/horasOTO;
AumentoEmedioOTO=EmedioPOTO-EmedioOrigOTO;
AumentoEmedioX100OTO=((EmedioPOTO*100)/EmedioOrigOTO)-100;
% -----INVIERNO--------
acumuladoOrigINV=0;
acumuladoPINV=0;
for i=dic21h1:8760
if CambioP(i)==0
NocambianINV=NocambianINV+1;
else
SicambianINV=SicambianINV+1;
end
acumuladoOrigINV=POrig(i)+acumuladoOrigINV;
acumuladoPINV=VectorP(i)+acumuladoPINV;
end
for i=1:marzo20h24
if CambioP(i)==0
NocambianINV=NocambianINV+1;
else
SicambianINV=SicambianINV+1;
end
acumuladoOrigINV=POrig(i)+acumuladoOrigINV;
acumuladoPINV=VectorP(i)+acumuladoPINV;
end
NocambianINV;
SicambianINV;
X100CambioINV=(SicambianINV*100)/horasINV; % porcentaje precios cambian
X100NoCambioINV=(NocambianINV*100)/horasINV; %porcentaje precios NO cambian
PmedioOrigINV=acumuladoOrigINV/horasINV;
PmedioPINV=acumuladoPINV/horasINV;
AumentoPmedioINV=PmedioPINV-PmedioOrigINV;
AumentoPmedioINVX100=((PmedioPINV*100)/PmedioOrigINV)-100;
%-------------ENERGIA------------------
acumuladoOrigEINV=0; %Vble aux suma para energia medio ORIG
acumuladoEINV=0; %Vble aux para energia medio P
for i=dic21h1:8760 % horas INVIERNO
if CambioEP(i)==0
NocambianEINV=NocambianEINV+1;
else
SicambianEINV=SicambianEINV+1;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
95
end
acumuladoOrigEINV=EOrig(i)+acumuladoOrigEINV;
acumuladoEINV=VectorEP(i)+acumuladoEINV;
end
for i=1:marzo20h24
if CambioEP(i)==0
NocambianEINV=NocambianEINV+1;
else
SicambianEINV=SicambianEINV+1;
end
acumuladoOrigEINV=EOrig(i)+acumuladoOrigEINV;
acumuladoEINV=VectorEP(i)+acumuladoEINV;
end
NocambianEINV;
SicambianEINV;
X100CambioEINV=(SicambianEINV*100)/horasINV; % porcentaje energia cambian
X100NoCambioEINV=(NocambianEINV*100)/horasINV; %porcentaje energia NO
cambian
EmedioOrigINV=acumuladoOrigEINV/horasINV;
EmedioPINV=acumuladoEINV/horasINV;
AumentoEmedioINV=EmedioPINV-EmedioOrigINV;
AumentoEmedioX100INV=((EmedioPINV*100)/EmedioOrigINV)-100;
% --------------------- MOSTRAR RESULTADOS-----------------------------
fprintf ('\nResultados para aumento precio RE a %f€/MW:\n\n',P)
fprintf('\n PRECIOS: \n')
fprintf ('Numero de Horas Cambian Precio son %f horas\n',Sicambian)
fprintf ('Porcentaje Horas Cambian Precio son %f%%\n ',X100Cambio)
fprintf('Porcentaje Horas NO Cambian Precio son %f%%\n',X100NoCambio)
fprintf('Precio Medio Anual ORIGINAL es %f€\n',PmedioOrig)
fprintf('Precio Medio Anual P%f es %f€/MW\n',P,PmedioP)
fprintf('Aumento del Precio Medio Anual de %f€/MW\n',AumentoPmedio)
fprintf('Aumento del Precio Medio Anual de %f%%\n',AumentoPmedioX100)
fprintf('\n ENERGIAS: \n')
fprintf ('Numero de Horas Cambian Energia son %f horas\n',SicambianE)
fprintf ('Porcentaje Horas Cambian Energia son %f%%\n ',X100CambioE)
fprintf('Porcentaje Horas NO Cambian energia son %f%%\n',X100NoCambioE)
fprintf('Energia Casada Total Anual ORIGINAL es %fMW\n',acumuladoOrigE)
fprintf('Energia Total Anual P%f es %fMW\n',P,acumuladoE)
fprintf('Aumento de la Energia Casada TOTAL Anual es %fMW\n',EcambioTOT)
fprintf('Energia Casada Media Anual ORIGINAL es %fMW\n',EmedioOrig)
fprintf('Energia Media Anual P%f es %fMW\n',P,EmedioP)
fprintf('Aumento de la Energia Casada Media Anual de %fMW\n',AumentoEmedio)
fprintf('Aumento de la Energia Casada Media Anual de
%f%%\n',AumentoEmedioX100)
fprintf ('\nResultados ESTACIONALES:\n\n')
fprintf ('\nPRIMAVERA:\n\n')
fprintf('\n PRECIOS: \n')
fprintf ('Numero de Horas Cambian Precio son %f horas\n',SicambianPRI)
fprintf ('Porcentaje Horas Cambian Precio son %f%%\n ',X100CambioPRI)
fprintf('Porcentaje Horas NO Cambian Precio son %f%%\n',X100NoCambioPRI)
fprintf('Precio Medio PRIMAVERA ORIGINAL es %f€\n',PmedioOrigPRI)
fprintf('Precio Medio PRIMAVERA P%f es %f€/MW\n',P,PmedioPPRI)
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
96
fprintf('Aumento del Precio Medio PRIMAVERA de %f€/MW\n',AumentoPmedioPRI)
fprintf('Aumento del Precio Medio PRIMAVERA de %f%%\n',AumentoPmedioPRIX100)
fprintf('\n ENERGIA PRIMAVERA: \n')
fprintf ('Numero de Horas Cambian Energia son %f horas\n',SicambianEPRI)
fprintf ('Porcentaje Horas Cambian Energia son %f%%\n ',X100CambioEPRI)
fprintf('Porcentaje Horas NO Cambian energia son %f%%\n',X100NoCambioEPRI)
fprintf('Energia Casada Total PRIMAVERA ORIGINAL es
%fMW\n',acumuladoOrigEPRI)
fprintf('Energia Total PRIMAVERA P%f es %fMW\n',P,acumuladoEPPRI)
fprintf('Energia Casada Media PRIMAVERA ORIGINAL es %fMW\n',EmedioOrigPRI)
fprintf('Energia Media PRIMAVERA P%f es %fMW\n',P,EmedioPPRI)
fprintf('Aumento de la Energia Casada Media PRIMAVERA de
%fMW\n',AumentoEmedioPRI)
fprintf('Aumento de la Energia Casada Media PRIMAVERA de
%f%%\n',AumentoEmedioX100PRI)
fprintf ('\nVERANO:\n\n')
fprintf('\n PRECIOS: \n')
fprintf ('Numero de Horas Cambian Precio son %f horas\n',SicambianVER)
fprintf ('Porcentaje Horas Cambian Precio son %f%%\n ',X100CambioVER)
fprintf('Porcentaje Horas NO Cambian Precio son %f%%\n',X100NoCambioVER)
fprintf('Precio Medio VERANO ORIGINAL es %f€\n',PmedioOrigVER)
fprintf('Precio Medio VERANO P%f es %f€/MW\n',P,PmedioPVER)
fprintf('Aumento del Precio Medio VERANO de %f€/MW\n',AumentoPmedioVER)
fprintf('Aumento del Precio Medio VERANO de %f%%\n',AumentoPmedioVERX100)
fprintf('\n ENERGIA VERANO: \n')
fprintf ('Numero de Horas Cambian Energia son %f horas\n',SicambianEVER)
fprintf ('Porcentaje Horas Cambian Energia son %f%%\n ',X100CambioEVER)
fprintf('Porcentaje Horas NO Cambian energia son %f%%\n',X100NoCambioEVER)
fprintf('Energia Casada Total VERANO ORIGINAL es %fMW\n',acumuladoOrigEVER)
fprintf('Energia Total VERANO P%f es %fMW\n',P,acumuladoEPVER)
fprintf('Energia Casada Media VERANO ORIGINAL es %fMW\n',EmedioOrigVER)
fprintf('Energia Media VERANO P%f es %fMW\n',P,EmedioPVER)
fprintf('Aumento de la Energia Casada Media VERANO de
%fMW\n',AumentoEmedioVER)
fprintf('Aumento de la Energia Casada Media VERANO de
%f%%\n',AumentoEmedioX100VER)
fprintf ('\nOTOÑO:\n\n')
fprintf('\n PRECIOS: \n')
fprintf ('Numero de Horas Cambian Precio son %f horas\n',SicambianOTO)
fprintf ('Porcentaje Horas Cambian Precio son %f%%\n ',X100CambioOTO)
fprintf('Porcentaje Horas NO Cambian Precio son %f%%\n',X100NoCambioOTO)
fprintf('Precio Medio OTOÑO ORIGINAL es %f€\n',PmedioOrigOTO)
fprintf('Precio Medio OTOÑO P%f es %f€/MW\n',P,PmedioPOTO)
fprintf('Aumento del Precio Medio OTOÑO de %f€/MW\n',AumentoPmedioOTO)
fprintf('Aumento del Precio Medio OTOÑO de %f%%\n',AumentoPmedioOTOX100)
fprintf('\n ENERGIA OTOÑOO: \n')
fprintf ('Numero de Horas Cambian Energia son %f horas\n',SicambianEOTO)
fprintf ('Porcentaje Horas Cambian Energia son %f%%\n ',X100CambioEOTO)
fprintf('Porcentaje Horas NO Cambian energia son %f%%\n',X100NoCambioEOTO)
fprintf('Energia Casada Total OTOÑO ORIGINAL es %fMW\n',acumuladoOrigEOTO)
fprintf('Energia Total OTOÑO P%f es %fMW\n',P,acumuladoEOTO)
fprintf('Energia Casada Media OTOÑO ORIGINAL es %fMW\n',EmedioOrigOTO)
fprintf('Energia Media OTOÑO P%f es %fMW\n',P,EmedioPOTO)
fprintf('Aumento de la Energia Casada Media OTOÑO de
%fMW\n',AumentoEmedioOTO)
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
97
fprintf('Aumento de la Energia Casada Media OTOÑO de
%f%%\n',AumentoEmedioX100OTO)
fprintf ('\nINVIERNO:\n\n')
fprintf('\n PRECIOS: \n')
fprintf ('Numero de Horas Cambian Precio son %f horas\n',SicambianINV)
fprintf ('Porcentaje Horas Cambian Precio son %f%%\n ',X100CambioINV)
fprintf('Porcentaje Horas NO Cambian Precio son %f%%\n',X100NoCambioINV)
fprintf('Precio Medio INVIERNO ORIGINAL es %f€\n',PmedioOrigINV)
fprintf('Precio Medio INVIERNO P%f es %f€/MW\n',P,PmedioPINV)
fprintf('Aumento del Precio Medio INVIERNO de %f€/MW\n',AumentoPmedioINV)
fprintf('Aumento del Precio Medio INVIERNO de %f%%\n',AumentoPmedioINVX100)
fprintf('\n ENERGIA INVIERNO: \n')
fprintf ('Numero de Horas Cambian Energia son %f horas\n',SicambianEINV)
fprintf ('Porcentaje Horas Cambian Energia son %f%%\n ',X100CambioEINV)
fprintf('Porcentaje Horas NO Cambian energia son %f%%\n',X100NoCambioEINV)
fprintf('Energia Casada Total INVIERNO ORIGINAL es %fMW\n',acumuladoOrigEINV)
fprintf('Energia Total INVIERNO P%f es %fMW\n',P,acumuladoEINV)
fprintf('Energia Casada Media INVIERNO ORIGINAL es %fMW\n',EmedioOrigINV)
fprintf('Energia Media INVIERNO P%f es %fMW\n',P,EmedioPINV)
fprintf('Aumento de la Energia Casada Media INVIERNO de
%fMW\n',AumentoEmedioINV)
fprintf('Aumento de la Energia Casada Media INVIERNO de
%f%%\n',AumentoEmedioX100INV)
end
10.17 Función “CambiosEnergiaFinal”
function
[ERegEspP,CambioP,CambioEP,EacumuladahoraEol,OfertatotalEOL,ValoresEnergiaOfe
rtada,EREnuevaUnidad,Comprobacion,EcasadaPnoEOL,EnergiaCASADAUnidadesAnual,En
ergiaOFERTADAUnidadesAnual]=CambiosEnergiaFinal(P)
%funcion que recibe un precio P' y devuelve, para cada hora del año,
%teniendo en cuenta la nueva energía casada a ese P' (calculada
%previamente),la ENERGIA CASADA A P<=P' de todas las unidades NO EOLICAS
%identificadas que hubieran entrado en la casacion original de esa hora
% P=5;
tic
Valores=PruebaEstacionalfuncion(P); %funcion que devuelve la diferencia de
%energia y de precios por horas entre los valores originales y los valores
%con los precios de las unidades renovables cambiados a P'
CambioP=Valores.CambioP; %CambioP vector cambio de precios entre orig y P'
CambioEP=Valores.CambioEP;%CambioEP vector cambio energia entre orig y P'
load('Mayores.mat');
diacomp=0;
dimmay=length(M);
Vector_codigos_eolica=cell(dimmay,1);
for i=1:dimmay
Vector_codigos_eolica{i,1}=char(M{i,1});
end
Eacumuladahora(8760,1)=0;
EacumuladahoraEol(8760,1)=0;
ValoresEnergiaOfertada(dimmay,8760)=0;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
98
nameFile=CreaListaNombres;
nopasanada=0;
Si=0;
No=0;
for rec=1:8760
if (CambioEP(rec)==0) %PRIMER if, tener en cuenta que solo se
esta buscando para los dias que ha habido cambio de energia!!!!
nopasanada=nopasanada+1;
else
hora2=mod(rec,24);
if hora2==0
hora2=24;
dia=rec/24;
else
dia=rec/24;
dia=fix(dia)+1;
end
%-----------------------DIAS ESPECIALES------------------------
if (rec>2136&&rec<7176)%para el periodo entre 30 de
marzo 23 horas , dia 89 del año
%2135 es la hora 23 del dia 89 q solo tiene 23 horas
y el 26octubre q
%tiene 25 horas dia 299
hora2=mod(rec+1,24);
if hora2==0
hora2=24;
dia=(rec+1)/24;
else
dia=(rec+1)/24;
dia=fix(dia)+1;
end
end
if (rec==2136)
dia=90;
hora2=1;
end
if(rec==7176)
hora2=25;
dia=299;
end
%TENER EN CUENTA que la variable dia no va a llegar hasta 365 a menos
%que el dia 365 haya habido cambios de energia, es decir, dia solo va
%a actualizar su valor cuando haya habido cambios de energia!!
% ------SOLVED----
% a partir del 30 de marzo ya no me vale estas cuentas asique tengo
% que sumar 1 y modificar la cuenta de la vble dia
% meter condiciones para el dia de 25 horas y el de 23
% ----SOLVED----
%---------------------FIN DIAS ESPECIALES------------------------
%-----------------CONDICIONES CARGA ARCHIVOS---------------
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
99
FileName=nameFile(dia,1);%cargo el dia que sea
if (diacomp~=dia||diacomp==0)
load(char(FileName)) %Hago esto para no cargar el
mismo
end %archivo cada vez si lo estoy
volviendo
%a usar en la siguiente iteracion
diacomp=dia;
%--------------FIN CONDICIONES CARGA ARCHIVOS-------------
%-------------ENCONTRAR INDICES------------------------
dim=length(VC.energy); %dimension vector Venta Casada - PRECIO
cont=1; %Contador para ver cuantos generadores cambia
ind=VC.hour==hora2;
cuentas=0;
dimaux=1;
while cuentas==0 %bucle while para saber el indice inicial de las
horas en vector ind
cuentas=ind(dimaux);
dimaux=dimaux+1;
end
dimaux=dimaux-1; %en vble dimaux tengo el indice inicial
del vector ind
indexhorasVC=length(VC.hour(ind)); %indexhoras numero de horas X en
mismo dia
% auxVC(hora)=indexhorasVC;
% value1=VC.energy(dimaux:indexhorasVC);
indexhorasVC=dimaux+indexhorasVC-1; %indehorasVC indice final horas X
mismo dia
%---------------------FIN ENCONTRAR INDICES---------------------
%--------------------INICIO BUCLE FOR COMPARACION UNIDADES-------------
% EnergiaUsada=0; variable para encontrar fallo ---ENCONTRADO
for i=dimaux:indexhorasVC
Si=0;
% comparador=Si; %Variables de comparacion
%entro en primera unidad de la hora que sea y miro a ver si es eolico
j=0;
Noentres=0;
while(Si==0) %Antes con for pero while mas rapido
%322 numero de generadores que conocemos son eolicos
j=j+1;
if(length(char(Vector_codigos_eolica(j)))==length(char(VC.unitName(i))))
% Primero comparo longitud y luego si son iguales, si no da
% error al comparar cosas de diferente longitud
% tengo que hacer esto así por ser cadenas de caracteres
if (char(Vector_codigos_eolica(j))==char(VC.unitName(i)))
Si=1;
EacumuladahoraEol(rec,1)=VC.energy(i)+EacumuladahoraEol(rec,1);
%Deberian dar igual la suma de ValoresEnergiaOfertada y
%Eacumuladahora pero no dan, tras mucho investigar, resulta
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
100
%que hay ofertas duplicadas de mismos generadores a mismas
hroas en los
%datos.
%esto esta hecho para la suposicion de que aunque la oferta
%este duplicada, se suman todas las ofertas de una misma
%unidad
if ValoresEnergiaOfertada(j,rec)==0;
ValoresEnergiaOfertada(j,rec)=VC.energy(i);
else
ValoresEnergiaOfertada(j,rec)=VC.energy(i)+ValoresEnergiaOfertada(j,rec);
end
% EnergiaUsada(i)=VC.energy(i);
end
end
if j==dimmay&&Si==0
Noentres=1;
Si=1;
end
end %REVISAR ESTA PARTE DEL CODIGO LOS ENDS
%Si la unidad es eolica, la variable Si se habra cambiado a valor 1,
%Si no es eolica, la variabla Si no habrá cambiado, por lo que Si=0 y
%Noentres=1
if (Noentres==1) % Manera de encontrar Unidades NO EOLICAS que han
casado
No=No+1;
if (VC.price(i)<=P) %Buscamos Ecasada de Unidades NO
%EOLICAS que han casado a
%Precio<=P'
Eacumuladahora(rec,1)=VC.energy(i)+Eacumuladahora(rec,1);
end
end
end
end
%mod(hora,24) para saber hora pero tener en cuenta que cuando sea la
%hora 24 mod devolvera 0
rec
end
NombreArchivo=['ValoresCasadosP' num2str(P)];
load(char(NombreArchivo));
if P==5
ValoresCasadosP=ValoresCasadosP5;
elseif P==10
ValoresCasadosP=ValoresCasadosP10;
elseif P==15
ValoresCasadosP=ValoresCasadosP15;
elseif P==20
ValoresCasadosP=ValoresCasadosP20;
end
EcasadaTOTP=cell2mat(ValoresCasadosP.EnergiaCasada);
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
101
EcasadaPnoEOL=Eacumuladahora;
ERegEspP(8760,1)=0;
OfertatotalEOL(8760,1)=0;
Nada=0;
for i=1:8760
if CambioEP(i)==0
Nada=Nada+1;
else
ERegEspP(i,1)=EcasadaTOTP(i)-EcasadaPnoEOL(i); %Recordar que
EcasadaPnoEOL es la E CASADA por UDS NO EOL A P<=5, no toda!
OfertatotalEOL(i,1)=ERegEspP(i,1)+abs(CambioEP(i));
%Vector E'RegEsp es la Energia Casada por las Unidades de RE al nuevo
precio
end
end
EREnuevaUnidad(dimmay,8760)=0;
Comprobacion(8760,1)=0;
for rec=1:8760
if CambioEP(rec)==0
Nada=Nada+1;
else
for j=1:dimmay
EREnuevaUnidad(j,rec)=(ValoresEnergiaOfertada(j,rec)*ERegEspP(rec,1))/Ofertat
otalEOL(rec,1);
Comprobacion(rec)=EREnuevaUnidad(j,rec)+Comprobacion(rec);
end
end
end
suma(dimmay,1)=0;
suma2(dimmay,1)=0;
EnergiaCASADAUnidadesAnual=cell(dimmay,2);
EnergiaOFERTADAUnidadesAnual=cell(dimmay,2);
for j=1:dimmay
for i=1:8760
EnergiaCASADAUnidadesAnual{j,1}=Vector_codigos_eolica(j);
suma(j)=EREnuevaUnidad(j,i)+suma(j);
EnergiaCASADAUnidadesAnual{j,2}=suma(j);
EnergiaOFERTADAUnidadesAnual{j,1}=Vector_codigos_eolica(j);
suma2(j)=ValoresEnergiaOfertada(j,i)+suma2(j);
EnergiaOFERTADAUnidadesAnual{j,2}=suma2(j);
end
end
toc
end
10.18 Función “Beneficios”
function [AumentoBENEFP, BENEFPERD, AumentoBENEFFINAL, BenefOrigTOTAL,
BenefNuevoTOTAL, BenefPTOTAL]=Beneficios(P)
tic
% P=5; %Comentar al final
%----------LOAD------------
NombreArch=['datosenergiasP' num2str(P)];
load(char(NombreArch));
NombreArch2=['ValoresCasadosP' num2str(P)];
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
102
load(char(NombreArch2));
load('ValoresCasadosOrigFINAL');
%-------END LOAD-----------
%Estos son los Resultados almacenados en 'datosenergiaP':
%CambioEP--------Vector energias que han cambiado
%CambioP---------Vector precios que han cambiado
%ERegEspP-------vector Energias RegEsp a Precio X
%Comprobacion---Vector Igual ERegEspP para comprobar resultados estan bien
%ValoresEnergiaOfertada--Matriz con Energias OFERTADAS por Unidad
%EREnuevaUnidad--Matriz con NUEVAS Energias por Unidad
%OfertatotalEOL--Vector OFERTA de Unidades EOLICAS
%EacumuladahoraEol--Vector igual que OfertatotalEOL para comprobacion
%resultados estan bien
%EcasadaPnoEOL---Vector Energia Casada por Unidades NO EOLICAS
%EnergiaCASADAUnidadesAnual----Energia que ha casado REAL A P
% cada unidad ANUAL
%EnergiaOFERTADAUnidadesAnual---Energia que ha ofertó originalmente cada
% unidad a POriginal ANUAL
%saco en Eperd la columna 2 de EnergiaPerdidaUnidadesAnual
if P==5
EnergiaCASADAUnidadesAnual=EnergiaCASADAUnidadesAnual5;
EnergiaOFERTADAUnidadesAnual=EnergiaOFERTADAUnidadesAnual5;
ValoresEnergiaOfertada=ValoresEnergiaOfertada5;
EREnuevaUnidad=EREnuevaUnidad5;
elseif P==10
EnergiaCASADAUnidadesAnual=EnergiaCASADAUnidadesAnual10;
EnergiaOFERTADAUnidadesAnual=EnergiaOFERTADAUnidadesAnual10;
ValoresEnergiaOfertada=ValoresEnergiaOfertada10;
EREnuevaUnidad=EREnuevaUnidad10;
elseif P==15
EnergiaCASADAUnidadesAnual=EnergiaCASADAUnidadesAnual15;
EnergiaOFERTADAUnidadesAnual=EnergiaOFERTADAUnidadesAnual15;
ValoresEnergiaOfertada=ValoresEnergiaOfertada15;
EREnuevaUnidad=EREnuevaUnidad15;
elseif P==20
EnergiaCASADAUnidadesAnual=EnergiaCASADAUnidadesAnual20;
EnergiaOFERTADAUnidadesAnual=EnergiaOFERTADAUnidadesAnual20;
ValoresEnergiaOfertada=ValoresEnergiaOfertada20;
EREnuevaUnidad=EREnuevaUnidad20;
end
dimmay=226;
ECasada(dimmay,1)=0;
for i=1:dimmay
ECasada(i)=cell2mat(EnergiaCASADAUnidadesAnual(i,2));
end
Eofert(dimmay,1)=0;
for i=1:dimmay
Eofert(i)=cell2mat(EnergiaOFERTADAUnidadesAnual(i,2));
end
%Beneficios Perdidos por generador al no casar esa energia
BenefPerdUni(dimmay,1)=0;
BenefPerdTOT=0;
DIF(dimmay,1)=0;
for i=1:dimmay
DIF(i)=Eofert(i)-ECasada(i);
BenefPerdUni(i)=(Eofert(i)-ECasada(i))*P;
BenefPerdTOT=BenefPerdUni(i)+BenefPerdTOT;
end
PreciosOrig(8760,1)=0;
for i=1:8760
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
103
PreciosOrig(i)=cell2mat(ValoresCasadosOrigFINAL.PrecioCasado(i));
end
BenefOrigHORA(dimmay,8760)=0; %Beneficio al Precio Original Energia Original
BenefNuevoHORA(dimmay,8760)=0; %Beneficio Energia REAL NUEVA a P5
BenefPHORA(dimmay,8760)=0; %Beneficio Energia Original a P5
for i=1:8760
for j=1:dimmay
BenefOrigHORA(j,i)=ValoresEnergiaOfertada(j,i)*PreciosOrig(i);
BenefPHORA(j,i)=ValoresEnergiaOfertada(j,i)*P;
BenefNuevoHORA(j,i)=EREnuevaUnidad(j,i)*P;
end
end
suma(dimmay,1)=0;
suma2(dimmay,1)=0;
suma3(dimmay,1)=0;
BenefOrigTOTAL(dimmay,1)=0;
BenefNuevoTOTAL(dimmay,1)=0;
BenefPTOTAL(dimmay,1)=0;
for j=1:dimmay
for i=1:8760
suma(j)=BenefOrigHORA(j,i)+suma(j);
BenefOrigTOTAL(j)=suma(j);
suma2(j)=BenefNuevoHORA(j,i)+suma2(j);
BenefNuevoTOTAL(j)=suma2(j);
suma3(j)=BenefPHORA(j,i)+suma3(j);
BenefPTOTAL(j)=suma3(j);
end
end
AumentoBENEFP(dimmay,1)=0;
BENEFPERD(dimmay,1)=0;
AumentoBENEFFINAL(dimmay,1)=0;
for i=1:dimmay
AumentoBENEFP(i)=BenefPTOTAL(i)-BenefOrigTOTAL(i); % Aumento de Beneficio
por Cambiar a P5
BENEFPERD(i)=BenefPTOTAL(i)-BenefNuevoTOTAL(i); %Beneficio Perdido por
Menos ENERGIA CASADA
AumentoBENEFFINAL(i)= BenefNuevoTOTAL(i)-BenefOrigTOTAL(i); %Aumento
Benef FINAL
end
toc
NombreArch=['datosenergiaP' num2str(P) 'todo'];
load(char(NombreArch));
load('ValoresCasadosOrigFINAL.mat');
ERegEspP(8760,1)=0;
NombreArchivo=['ValoresCasadosP' num2str(P)];
load(char(NombreArchivo));
if P==5
ValoresCasadosP=ValoresCasadosP5;
EcasadaPnoEOL=EcasadaPnoEOL5;
EacumuladahoraEOL=EacumuladahoraEol5;
CambioEP=CambioEP5;
elseif P==10
ValoresCasadosP=ValoresCasadosP10;
EcasadaPnoEOL=EcasadaPnoEOL10;
EacumuladahoraEOL=EacumuladahoraEol10;
CambioEP=CambioEP10;
elseif P==15
ValoresCasadosP=ValoresCasadosP15;
EcasadaPnoEOL=EcasadaPnoEOL15;
Impacto en el Mercado Diario de Nuevas Estrategias de Ofertas del Régimen Especial
104
EacumuladahoraEOL=EacumuladahoraEol15;
CambioEP=CambioEP15;
elseif P==20
ValoresCasadosP=ValoresCasadosP20;
EcasadaPnoEOL=EcasadaPnoEOL20;
EacumuladahoraEOL=EacumuladahoraEol20;
CambioEP=CambioEP20;
end
EcasadaTOTP=cell2mat(ValoresCasadosP.EnergiaCasada);
for i=1:8760
if abs(CambioEP(i))>0;
ERegEspP(i,1)=EcasadaTOTP(i)-EcasadaPnoEOL(i); %Recordar que
EcasadaPnoEOL es la E CASADA por UDS NO EOL A P<=5, no toda!
%Vector E'RegEsp es la Energia Casada por las Unidades de RE al nuevo
precio
else
ERegEspP(i,1)=EacumuladahoraEOL(i);
end
end
ECRE=ERegEspP;
B=0;
for i=1:8760
B=B+ECRE(i)*(ValoresCasadosP.PrecioCasado{i,1}-
ValoresCasadosOrigFINAL.PrecioCasado{i,1});
end
ING=B;
end
end
top related