First, no, I don't think there is any existing code to do exactly what you are suggesting, but it is trivial to write a short program that varies loads and generation in a loop, calling the OPF each time.

Second, I purposely did not change these zonal reserve prices in the output. What this is displaying is the shadow price on each reserve constraint. In the general case, I don't think there is a single zonal price that reflects the effects of multiple constraints.

The subtilty here comes from the fact that the zone definitions can be (and in this case are) overlapping. So the price of $5.50 actually comes by adding the shadow prices on both of the zonal constraints. In this example, since every node in zone 2 is also in zone 1, you might expect the zone 2 price to be the sum of the two multipliers. However, this does not work in the general case. Suppose you had 3 zones, defined as follows ...

Zone 1:  gens 1, 2, 3
Zone 2:  gens 3, 4
Zone 3:  gens 4, 5, 6

And suppose all of the reserve constraints were binding. What is the "zone 2 price"? By definition it is the sensitivity of the total system cost to changes in the zone 2 reserve requirement.

Attached is an example (overlapping_reserves_eg.m) that demonstrates such a case and verifies the prices by perturbing each constraint. You can see how the dispatches change (and consequently how the system cost is affected) as the constraints are perturbed.

So my thought is that the zonal reserve price should be defined as the multiplier on the corresponding reserve constraint, but each generator should be paid a price equal to the zonal price for all zones in which it is included.

Comments?

-- 
Ray Zimmerman
Senior Research Associate
211 Warren Hall, Cornell University, Ithaca, NY 14853
phone: (607) 255-9645

Attachment: overlapping_reserves_eg.m
Description: Binary data


On Mar 18, 2011, at 3:56 PM, Santiago Chamba wrote:

Thank you very much Professor Zimmerman.  I have other question, please help
me. I want to run opf with different increases of power energy in the two
nodes: the first is a increase in power demand in a frontier node and the
second is a increase in generation in the other frontier node. This
responses permit me know the true wheeling cost in the system for different
increases of power energy.  My question is, if exists a code what permit me
increases in different size the load and the generation in this nodes?
Because, my goal is to construct a wheeling cost curve ($/MW vs MW).

On the other hand, in the previous problem about the reserves price, when
the answer is printed, still It has an error:

Zone  Reserves   Price  
 #     (MW)     ($/MW)
----  --------  --------
 1     60.00      2.00
 2     20.00      3.50

Thank you very much
Best Regards

Santiago Chamba



De: [email protected]
[mailto:[email protected]] En nombre de Ray Zimmerman
Enviado el: viernes, 18 de marzo de 2011 14:53
Para: MATPOWER discussion forum
Asunto: Re: Question

Hi Santiago,

1) Your solution will probably work, unless for some reason that generator
becomes marginal at zero cost. Another option, probably a bit more robust,
would be to set both PMIN and PMAX for the generator to the desired output
level.

2) First, the $177.81 is the total cost to the generators, not the total
payment from the ISO to the generators, so it's based on reserve cost, not
reserve price.

mpc = loadcase('t_case30_userfcns');
mpc = toggle_reserves(mpc, 'on');
r = runopf(mpc);
sum(r.reserves.R .* r.reserves.cost)

ans =

  177.8061

Regarding your second question about the price in zone 2 being $3.50 when
the costs are $5.00 and $5.50, it looks like you have found a bug in the
code that computes zonal prices from the constraint multipliers.

I've attached fixed versions of toggle_reserves.m and t_opf_userfcns.m.





Reply via email to