Storage Model - Pyosch/powertac-server GitHub Wiki
Represents an energy-storage device with some ability to remotely control charging and/or discharging. This is the most flexible type of controllable capacity. The ideal storage device is a perfect battery, but many types of imperfect batteries should be representable, as well as thermal-storage devices. The basic difference between a battery and a thermal-storage device is that the thermal-storage device cannot be discharged to obtain electrical power, but its heat is used for some purpose (water or space heating, for example). It can store energy by increasing its temperature, and can "deliver" energy by allowing its temperature to fall. Of course, cold-storage facilities and cooling systems with chilled-water or ice reservoirs can fill the same purpose.
Some parameters apply to the device (or a population of devices) and some to the intersection of devices and tariffs. This implies that population models must be subdivided by tariff, and the subdivisions will change when customers change tariffs.
- Capacity (kWh)
- State of charge (kWh, by tariff) - current status
- Max charge rate (kW) - also maximum down-regulation capacity
- Default charge rate (kW)
- Max discharge rate (kW) - also maximum up-regulation capacity
- Charging efficiency (change in state-of-charge / charging energy input)
- Internal discharge rate (kW) - zero for an ideal battery, represents the rate of heat loss for a thermal storage device.
In addition, devices like water heaters have a heat usage rate that may vary over time. This also applies to refrigerated systems that lose energy when doors are opened and when stock is added that must be cooled.
- Charging Availability
- Discharging Availability
- Capacity Available apart from driving
- Capacity need from driving needs in a 24h horizon
Frosty Storage is a cold-storage warehouse, one of the models in the factored-customer module. By allowing its temperature to vary, it has some energy-storage capacity. Maximum consumption is the rate of consumption when the refrigeration unit is continuously running; default consumption is the steady-state consumption, also the rate of heat loss to the environment plus energy needed to cool stock turnover and the people and other equipment in the building. For a frozen-goods warehouse, there is a maximum temperature and a minimum temperature. If the difference between max and min temperature is 10C, then the energy storage capacity is about 12 kWh per tonne-equivalent of water in the warehouse. So a decent-sized warehouse might store 6000 kWh.
According to an engineering summary of large cold-storage warehouses, the energy cost breakdown is approximately 15-20% for battery charging (lift trucks), 70-75% cooling, and 10% other (lighting, controls, etc.).
Load curtailment can be used for up-regulation. If a load (a water heater, for example) would normally be using 2 kWh in the current hour, then a 50% curtailment would reduce the load to 1 kWh and defer the additional 1 kWh to the next timeslot (or it might spread it out over the next n timeslots). One way to think about this is to day that the energy used in a given timeslot t is the sum of the "normal" load d_t for that timeslot plus any load shifted into the current timeslot by earlier curtailment. If we only curtail the normal load, then we don't risk indefinite deferral of needed energy consumption.
Up-regulation can be accomplished by reducing the charge rate, or by discharging if the max discharge rate is greater than zero. Charge rate can be below the internal discharge rate as long as charge level > 0.
Down-regulation can be accomplished by increasing the charge rate as long as charge level < capacity.
When a vehicle is attached, it may have a non-zero charge level. The need to re-charge the battery to a given level at a given time can be modeled by manipulating the internal discharge rate and the visible allowable charge rate, and managing the capacity and charge level to represent the portion of stored energy that is available for external control (balancing or economic controls).
Charging Availability represents the time intervals that the EV is close to a plug and needs to charge the battery. The battery can be charged up to the max charge rate or less, depending on the duration of the charging availability and the particular driving needs of the customer. Typically customers can charge when they are at home or at work.
Discharging Availability represents the time intervals that the EV is close to a plug for discharging power back to the grid. The max discharge rate is determined by the max Capacity needed for driving, the Discharging Availability duration and mostly occurs when the customer - EV owner is at home. A household may decide to discharge part of its EV battery to offset household consumption during peak hours, depending on short-term expectations for energy prices.
The model evaluates the tariffs using the logit model used for the population models, for various rationality rates.
The lowest State of Charge (SOC) for the battery is 20%. Lower than this percentage destroys the battery's lifetime. (Where does this come from? Do we need to represent it, or can we just derate battery capacity by 20%?)
Lots of questions to be resolved:
- Is a battery a PowerType? Or is it just a consumption device with a curtailment capacity range < 0 and > 1?
- If it is a Storage type, then is a water heater also a storage device?
- Are there controllable capacities that are not storage devices? For example, could laundry or some types of industrial equipment be curtailable?
- How do we specify curtailment for a storage device, when it could be either production curtailment or consumption curtailment? Do we just allow negative values? Do we have to specify a range?
- How do we specify tiered rates for storage devices? Are there separate production and consumption tiers?
- Is an EV just a consumption device with a high curtailment factor? If so, then perhaps a solar array with an attached battery is a production device with a high curtailment factor.
- Should broker be able to pay customer for exercising controls, in addition to setting an overall rate/kWh?
- If a battery is used for down-regulation by increasing its charge, does the customer pay for that energy?
- If a battery is used for up-regulation by decreasing its charge, does the broker pay the customer for the energy?
- On peak rate: $ 0.18195 per KWh (9 am-11pm) Mon.-Fri. Off peak rate: $ 0.07695 per KWh (11pm-9 am) Mon.-Fri. & All day Sat., Sun.
- $40 a month per vehicle (Limited to 250 customers)
- Summer: July 1- September 30, 10 p.m. to 6 a.m. $ 0.05648 kWh. Winter: October 1 - June 30, 10 p.m. to 6 a.m.
- Off peak rate: $ 0.16 per KWh (5 am-12pm & 6pm- 12am). On peak rate: $ 0.26 per KWh (12pm-6 pm). Super Off peak $ 0.14 per KWh (12am-6 am)
Could we use consumption tariffs for batteries? A non-ideal battery loses some energy on every charge cycle, so the net power flow long-term is into the battery. Electric vehicles use most of the battery capacity for driving. So treating batteries as a kind of consumption makes sense, even if the net consumption over a billing cycle is zero or even a little negative.
We already have the curtailment mechanism to allow the broker (or the DU) to exercise remote control. So far, we have treated curtailment as a fraction 0 <= c <= 1. If c = 0, then remote control is not supported. Otherwise, it's the proportion of power that would have been used in the current timeslot that can be moved to the following timeslot. Standard off-peak programs typically have c = 1; they can turn off your power for several hours.
One way to think about a storage tariff (including thermal storage) is to assume that there is a certain amount of power usage on some schedule determined by the model, and that "curtailment" (or more properly "regulation") can be positive or negative. In other words, -1 <= c <= 1; with c = -1, the battery can be made to charge at its maximum rate, until it's full. With c = 0, it charges if it needs to at some default rate. With c = 1, it's prevented from charging. A battery with c > 1 is discharging into the grid until it's empty or until it reaches the minimum charge determined by the owner's preferences. Up-regulation at the max discharge rate is represented by c = +2, and 1 <= c < 2 indicates discharging at some lower rate.
This also works for a thermal storage device -- c < 0 would pour energy into the device, raising (for a heater) or lowering (for a refrigerator) its temperature, within the temperature range set by the model. The difference is that you cannot get electrical energy back out of a thermal storage device, you have to wait until the thermal energy is used by whatever process it's connected to (someone runs a dishwasher, for example, or the heat leaks back out). But what's the range? If c = 1.0 just shuts off the power, then c = -1.0 dumps energy in as fast as the device can take it.
The exact definition of regulation is in CapacityControl, TariffSubscription, and Customer models. Their interactions to support economic and balancing control are fairly well documented.
Ideally, a Broker would like to think of regulation capacity in terms of up-regulation (curtailing energy use or supplying additional energy) and down-regulation (increasing load). Brokers get a 2-week energy-use profile for each customer in the bootstrap data, and the customer models contain additional information.
- The maximum up-regulation energy in kWh it can supply in a timeslot, beyond the curtailment of its load. This would be zero for thermal storage, negative for a battery (because energy is flowing away from the customer).
- The maximum down-regulation energy in kWh it can absorb in a timeslot, beyond its normal usage. This is charging a battery or dumping heat (or cold) into a thermal storage system.
- The maximum energy storage capacity of the device in kW. So if a 2 kWh battery can be charged at 1 kW, it's maximum down-regulation would be 1 kW, and its capacity would be 2 kWh.
BalancingOrder needs to access the wider range of options:
- Up-regulation by curtailment is specified by 0 < exerciseRatio <= 1.
- Further up-regulation (e.g. by discharging a battery) is specified by 1 < exerciseRatio <= 2.
- Down-regulation by charging a battery (possibly faster than its default charge rate, or to a higher state of charge than the customer has requested) or by dumping thermal energy into some type of thermal storage device (e.g. making more ice or raising the temperature of a water heater) is specified by (-1 <= exerciseRatio < 0).
The final issue (for now) is how the customer pays for power and what benefits are provided for allowing external control. With standard controllable consumption devices, the model is that customers get a discount on the consumption rate in exchange for permitting curtailment. This scheme does not seem appropriate for a battery, or for negative regulation. One possibility is to simply use periodic payments - just pay the customer by the month for the privilege of using regulation capacity. The problem with this is that it would allow free-riding - the customer signs up for a tariff that allows for curtailment or regulation, and then either does not leave the car plugged in, or sets the parameters on its water heater so tightly that there's no real regulation capacity.
Instead, we add a new type of Rate, called RegulationRate. This allows a broker to pay for positive (up-regulation) curtailments by the kWh, and for the broker to offer a discounted price for energy deposited with the customer during a down-regulation event. TariffSpecification instances can now include both types of Rate, freely intermixed. So there could be one or more Rates that specify energy prices by time and tier, as well as a RegulationRate that specifies payments for up-regulation and down-regulation events. In addition, there is a response-time parameter that may be either SECONDS or MINUTES to represent the fact that some types of energy storage devices cannot always react immediately to a regulation request. For example, heat pumps have minimum run-times and minimum off-times, generally in the range of 5-15 minutes. NOTE that RegulationRates override Rates in the sense that if a tariff includes a RegulationRate, then the maxCurtailment property on any of its Rates will be ignored.
When exercising balancing controls (or economic controls), the TariffSubscription is responsible for determining the capacity to respond. This makes sense because BalancingOrders are associated with individual Tariffs, and TariffSubscription is the connection between Tariffs and Customers. Therefore, TariffSubscription must interpret the storage-related elements of CustomerInfo with respect to the current state of its individual Customer. In order to respond to queries from the CapacityControlService, it must track the aggregate state-of-charge of the storage capacity for the subscribed customer base.
Customer models must respond to control events for both up-regulation and down-regulation.
Customer models must properly evaluate tariffs that include regulation rates.
For a tariff without a RegulationRate, the CapacityControl mechanism can discover the available curtailable capacity by multiplying the intended usage for a timeslot by the allowable curtailment ratio. On the other hand, if a Customer subscribes to a tariff with a RegulationRate, it is then obligated to compute its own regulation capacity by calling TariffSubscription.setRegulationCapacity(RegulationCapacity) in each timeslot, presumably after running its consumption/production model. Economic and/or balancing controls will then be applied, and the actual amount of regulation can be retrieved at the beginning of the following timeslot (see the sequence diagram at the bottom of the [Controllable capacity] page).
The balancing market must properly clear the market for both up-regulation and down-regulation.
Ideally, the balancing market and its associated control mechanisms must simulate real-time balancing, and not just assume that balancing can be done at the end of an hour. One consequence of this is that both up-regulation and down-regulation would typically be used in any given timeslot.
The CapacityControlService is the connection between the balancing market and the individual TariffSubscription instances. It will need to be updated to handle the additional attributes of storage devices.