On Nov 30, 2007, at 7:00 PM, Martin Elfstadius wrote:
I wanted to simulate the loads beeing totally inelastic and not tie
down the generators competition that I'm simulating.
I must have misunderstood how the auction works. I thought that
bids.P.prc held the maximum price per Mw accepted by the corresponding
load. But something goes horribly wrong when I push those values too
high.
So,first I wonder what those values are used for.
bids.P.prc contains the maximum that a load is willing to pay for
active power. Using high values should simulate inelastic demand,
however, if the prices are too high you may run into numerical issues
due to a badly scaled problem (just a guess).
Secondly I am curious on exactly how the LMP:s are calculated (the
values in co.P.prc). Both for DC and AC. I am using last accepted
offer mode, but how are prices inherited between the areas? Even when
using DC (lossless) the prices sometimes differ from pricelevels that
are offered.
The price differences between nodes with a lossless system (DC) come
from binding transmission limits.
About how prices are computed ... I'm going to copy my answer to some
else a few weeks ago ...
On Nov 16, 2007, at 2:31 PM, I wrote:
The nodal prices are determined from the shadow prices (lambdas) on
the power balance equations at each bus. At any given bus, lambda is
equal to the cost to the system of serving one more unit of load at
that location. When there are binding constraints and/or losses in
the system, the value of lambda may not be trivial to determine by
inspection. But it is calculated by the optimization routine used to
solve the problem. This all applies to AC and DC cases. It turns out
that for any generator that is partially dispatched, lambda is equal
to that generator's marginal cost at the dispatch point. But lambda
can be above the marginal cost if the generator is at an upper
limit, or below it's marginal cost if at a lower limit.
OK, now the tricky part ... the various auction types. Since lambda
is a measure of the value to the system of a unit of energy at that
location, we can use the ratios of lambdas as exchange rates between
locations. We can pick a reference node and compute exchange rates
with respect to that node and use those exchange rates to normalize
all bids & offers to a reference location. These normalized bids and
offers can be rank ordered by price, just like you would in a
standard 2-sided auction. In a standard auction, there may be a gap
between the last accepted offer price and the last accepted bid
price. Different auctions use different conventions for setting a
uniform clearing price, since any price within that gap is
acceptable to all parties. It turns out that the lambda at the
reference node will be equal to the last accepted bid or offer
price, depending which one is marginal. But we can choose to always
use last accepted offer, for example, if we don't want bids to be
able to set the price even when they are marginal. So we can set the
uniform price at the reference bus anywhere within the bid/offer
gap, then use the exchange rates to convert this "uniform" price
back to the location specific nodal prices.
So, for example, suppose you have a case where a bid is marginal and
all accepted offers are below the lambda's at their bus. If you are
using LAO, prices will be adjusted downward according to the
normalized bid/offer gap and the resulting price of (at least) one
of the generators will be equal to its offer.
Now, I should mention that I've never seen anyone else talk about
LAO vs. FRO vs. etc, etc. for markets solved by OPFs. Typically,
they just use the lambda's directly, which corresponds to what I
call the 1st price auction in MATPOWER.
Hope this helps,
--
Ray Zimmerman
Senior Research Associate
428-B Phillips Hall, Cornell University, Ithaca, NY 14853
phone: (607) 255-9645