Market based balancing story - Pyosch/powertac-server GitHub Wiki
The process is described in Section 6 of the spec. We support two balancing schemes, without (Section 6.2.2) and with (Section 6.2.3) controllable capacity.
Scenario 1: No controllable capacity
The charge for an individual broker i is set equal to the costs (or profits) the DU incurs for balancing its individual imbalance quantity x_i. The x_i values are the individual imbalance quantities, positive if the broker's market position is greater than the actual usage of its subscribed customers. In general the costs for the DU for balancing x are given by c_0(x). In PowerTAC we let c_0(x_i) = - x_i * P+ when x_i < 0 and c_0(x_i) = - x_i * P- when x_i >= 0, where P+ is the highest price at which energy has been traded for that time slot, and P- is the lowest. These charges ensure that it is never better to let your imbalance be resolved by the DU.
Scenario 2: With controllable capacity
With controllable capacity, brokers can submit balancing orders that allow the DU to exercise capacity control in order to achieve balance. Each balancing order specifies a tariff, a ratio, and a price, and allows the DU to curtail subscribers to the tariff up to the specified ratio of their actual usage, for the stated price/kwh. Brokers must submit their balancing orders before the customer models run, and the DU runs its balancing process after customer consumption is known for the current timeslot. The DU can determine the actual quantities available for each balancing order by querying capacityControlService.getCurtailableUsage(order)
.
Equation 16 is solved through a VCG clearing mechanism. Given a set of balancing orders, the DU:
- Discards the ones that cannot contribute to the solution; if overall balance is negative (up-regulation needed), then only consumption curtailment is used, and if overall balance is positive, then only production curtailment is used.
- Includes a "dummy" order with essentially infinite capacity that represents procurement or sale of power in the regulating market. For up-regulation, this is (P+ + r1 * x); for down-regulation it is (-P- + r2 * x). The slope values r1 and r2 model the fact that larger amounts of regulating power are progressively more expensive. In real markets, the price is determined by clearing a set of asks or bids from wholesale suppliers of regulating power.
- Sorts the remaining orders by price, with the lowest first.
Figure 1 shows this situation graphically:
We see here six balancing orders b1-b6, and the dummy order RM. At this point, the current imbalance will fall within the range of one of the orders, in this case b5. All orders with lower prices will be exercised, and b5 will be partially exercised.
The next step is to set prices for each broker's orders that are to be exercised. This is done with the VCG mechanism. For each broker that has orders to be exercised, we must discover the price that would have to be paid for its capacity if its orders were not in the mix. To see how this works, assume that we have three broker agents A1, A2, and A3, and that the orders are as follows: b1=(A1, 700 kwh, 0.03/kwh); b2=(A3, 400 kwh, .042/kwh); b3=(A2, 1340 kwh, .051/kwh), b4=(A3, 780 kwh, .062/kwh); b5=(A2, 600kwh, .08/kwh); b6=(A1, 980 kwh, 0.091/kwh); RM=(DU, x kwh, (0.086 + .00002x)/kwh). The currentImbalance is 3600 kwh.
The pricing of orders for broker A2 is as follows:
- The total quoted cost of achieving balance is the integral of the bid prices from capacity=0 out to capacity=currentImbalance.
- From this, we remove the area under orders b3 and the used portion of b5 (the orders from A2) and add the missing capacity (1740 kwh) to restore balance.
- The price for exercising these orders, then, is their marginal value to the overall solution, shown as the shaded area in the following figure.
This gives a price for broker A2 of (200 * .08 + 980 * .091 + 320 * (.086 + .091)/2 + 240 * (.091 + .096)/2)/1740 or .0896/kwh. This price applies to both b3 and the exercised portion of b5.
These VCG prices ensure for a single (isolated) time slot that brokers cannot gain from pricing their orders higher or lower than their real costs, and that they often gain (and never lose) from placing orders for curtailment if they have any.
After the pricing is complete, we use the original imbalances (before exercising balancing orders) for each broker to determine the charge in the same way as for Scenario 1.