Interpreting graphical auction results

This section describes the graphs produced by the software, using either the --graphics-file option of the command-line interface, or automatically using the web app.

When graphs are generated using the command-line interface, they are all output as a single web page (HTML file). You can open this page in a web browser to view the graphs. If they appear too wide or too narrow, resize the width of your web browser window and refresh the page. When hovering over a graph, a control bar will appear in the top right corner, with buttons to save the displayed plot as a PNG image, edit it using an online service, or adjust the view.

When graphs are generated in the web interface, they appear in the “Auction output” column under the price and allocation tables. Each graph has a collapse/expand button to make it possible to focus on the items of interest. Again, the width of the graphs will be fixed automatically based on the width of the web browser window. The control bar to edit graphs is not displayed in the web app, but the command-line version of the graphs can be accessed by downloading the auction results as a ZIP file and opening the included graphs.html file.

For most graphs, you can click and drag to zoom in, and double-click to zoom out again. Clicking on the legend will toggle the display of individual traces, or double-clicking will display a single trace.

Note that in some cases the order and colour of bids may be different between the web app and CLI. This arises because the web app always labels bids with integers (in the usual order), but the CLI permits the CSV file to have arbitrary textual labels (in alphabetical order). For example, in graphs generated by the CLI, a bid labelled “10” appears between “1” and “2”.

Bids bubble chart (2D)

This graph is generated only when there are exactly 2 goods. The bids are shown as bubbles in price space (with the price of one good on each axis). Filled circles represent bids that are fully allocated (i.e. receive the entirety of their requested quantity); partially filled circles represent bids that receive some but not all of their requested quantity; open circles represent bids that receive nothing. The size of the bubbles is constant (but can be adjusted using the --dotsize option). Text labels next to the bubbles display the quantity allocated to the bid, unless the --graph-hide-bid-quantity flag is passed. Unsuccessful bids are not labelled.

A generalised bid is considered “fully allocated” if the overall bid quantity constraint is binding or if at least one individual good’s maximum constraint is binding, taking account of the trade-off for asymmetric bids if appropriate. Additional constraints are not taken into account. This is tested after rounding, so in some circumstances we may show a bid as fully allocated that actually receives less than its demand in an exact analytic solution.

The prices resulting from the auction are plotted as horizontal and vertical black line segments. The rectangular region bounded by these line segments and the axes contains bids that are rejected. Originating from the intersection of the line segments, a diagonal line separates the regions of bids that receive each good.

Bids bubble chart (3D)

This graph is generated only when there are exactly 3 goods. It is a three-dimensional version of the bubble chart described above, where bids are represented as bubbles in price space. Again, the coordinates reflect the bid price on each good, and the bubbles are filled and labelled based on the allocated quantity.

The black lines showing the auction prices remain, and in addition the plane segments separating unique demand regions are plotted in semi-transparent colours.

When viewing the graph in a web browser, the view can be manipulated using the mouse. Left-click and drag to rotate, right-click and drag to translate and middle-click and drag to zoom.

Allocation of bids to goods

This graph is generated for all auctions. Each column represents a good, with the y-axis showing prices. Black horizontal lines represent the auction prices. Each bid is plotted in the columns for goods it receives (or in one of the columns for a good it would receive if the prices were lower). The vertical position corresponds to the bid price. The area of the bubbles is constant, and horizontal position within the column is not significant (other than to visually separate bids at the same price). Bubbles are labelled with the quantity of the good actually allocated to each bid, or the quantity requested for unsuccessful bids. Where bids are partially allocated, the quantity allocated is shown as a fraction of the quantity requested for the particular good (taking account of asymmetric and generalised bids).

Non-paired bids are plotted in the column for the good on which they bid. Paired bids are plotted in the column for the good they won or were closest to winning (resolving ties arbitrarily in the latter case). If a paired bid is rationed (i.e. wins multiple goods), it is plotted in every column corresponding to a good it receives.

If a bid receives its entire requested allocation of the relevant good, it is plotted as a filled circle. If it receives part of its requested allocation, but not the full amount, it is plotted as a partially filled circle (an inner filled circle and an outer unfilled circle). If it receives nothing, it is plotted as an unfilled circle.

As with the bubble chart, the --dotsize and --graph-hide-bid-quantity options can be used to adjust the display. In addition, the --graph-bid-simple-colors option can be used to colour the bids depending on whether or not they are accepted, rather than by bidder.

Supply and demand for each good

Supply and demand curves can be generated for each good individually, depending on the configuration. The x-axis shows good prices (expressed relative to the price of the previous good, for vertical auctions, or absolute prices for horizontal auctions). The y-axis shows the total quantity allocated to the good and (for vertical auctions) any successive goods. The supply curve is plotted as a continuous line, and a vertical dashed line shows the quantity allocated by the auction, with a marker at the auction price.

Various different types of supply and demand curve graphs are supported, depending on the auction configuration (in particular, whether it uses a horizontal or vertical supply ordering, and whether a TQSS is in use). These are described in the following subsections.

The web application will always generate the default supply and demand curves. In the command-line interface, the default behaviour may be overridden and demand curve types to generate may be specified using the --demand-curve option, including a number of points if appropriate. This option may be repeated multiple times, to generate multiple different supply and demand curve graphs.

The subsections below discuss the different demand curve types available. The supply curve will be the same in each case, except that in the UnadjustedDemandWithTQSS case (see Supply and demand for horizontal auctions with TQSS) it will be increased by the value of the TQSS.

When an absolute TQSS that scales the supply is in use, the supply curves are drawn at the equilibrium value, i.e. they vary according to the TQSS (see TQSS with absolute prices).

Supply curve only

This consists of a supply curve only, with no demand curve. This is the default graph for auctions that are neither simply horizontal or vertical (e.g. a tabular supply). It can be requested in the command-line interface using --demand-curve NoDemand.

Supply and demand for horizontal auctions

This computes the aggregate demand of all the bids on a good, ignoring bidding on other goods (so paired bids are counted for multiple goods). It does not require a number of points to be specified, or result in additional runs of the LP. Since the demand curve is in principle correct for all quantities, it is plotted as a continuous line. The width of the graph will be the width of the supply curve.

This is the default graph for horizontal auctions. It can be requested in the command-line interface using --demand-curve UnadjustedDemand.

Supply and demand for horizontal auctions with TQSS

This is similar to Supply and demand for horizontal auctions, wherein the demand curve aggregates all bids on a good, but with the supply curve increased vertically by adding the TQSS. The width of the graph will be limited to the width of the TQSS, which may be less than the width of the supply curve.

By default, this is generated in addition to the previous graph for horizontal auctions with a constraint-style TQSS (except that in the web app, it is generated in “Full-featured” mode but not “Basic” mode). It can be requested in the command-line interface using --demand-curve UnadjustedDemandWithTQSS.

Supply and demand for vertical auctions

This runs the LP multiple times for different total quantities, fixing the supply curve for the current good such that the desired quantity will be supplied (using a large negative price). Since the demand is known only at quantity points for which an LP run is performed, the curve is plotted as a discontinuous series of points.

In the graph for good j and higher, each of these points signifies the “demand” price spread that the auction would set if it were required to allocate the quantity shown on the horizontal axis to the set of goods j,…,n. Note that a price set by the auction may not correspond to actual (inverse) demand, if the actual bidding would yield no sale on that good.

This is the default graph for vertical auctions. It can be requested in the command-line interface using --demand-curve "AdjustedDemand <n>" where <n> is a positive integer number of LP runs. This will yield a demand curve consisting of n evenly-spaced points.

Fixed total allocation

This is similar to Supply and demand for vertical auctions, but the supply curve for every good is fixed, and a price of zero is used for the height of the supply curve steps, rather than a large negative price. That is, to calculate a demand point, an LP run is performed with the current good having a supply quantity specified on the y-axis, and other goods having the supply quantities calculated in the original run of the auction.

This is a non-standard (experimental) graph that will not be displayed unless explicitly requested on the command-line with --demand-curve "FixedTotalAllocation <n>" where <n> is a positive integer number of LP runs.

Variable total allocation

This is similar to Fixed total allocation and Supply and demand for vertical auctions. The supply curve of the base good in a vertical auction is left unchanged, allowing the total quantity supplied to vary. Other supply curves are fixed based on the quantities calculated in the original run of the auction, as in Fixed total allocation.

This is a non-standard (experimental) graph that will not be displayed unless explicitly requested on the command-line with --demand-curve "VariableTotalAllocation <n>" where <n> is a positive integer number of LP runs.

TQSS and demand

This graph is generated if a TQSS (see Total Quantity Supply Schedule) is in use. The x-axis shows the total size of the auction (i.e. the amount of goods available to allocate, not necessarily the amount actually allocated). The y-axis shows the price measure used by the TQSS, depending on how the TQSS was configured. The TQSS function itself, as specified in the input, is plotted as a continuous line. The demand curve is calculated differently depending on whether the TQSS prices are absolute or normalised, as described in the following subsections.

TQSS with absolute prices

For a TQSS with absolute prices, the demand price is calculated for particular sizes of auction, and the corresponding points are plotted. Since the price is calculated at only a limited number of auction sizes, if the price decreases between adjacent points, then the size(s) at which it changes will not be known precisely. Such sections of the demand curve will be plotted with diagonal dashed lines to represent the fact that they represent an unknown decreasing step function.

The domain of points at which demand is calculated are determined by the TQSS search strategy, plus the --tqss-step-size, --tqss-from and --tqss-to options. See Options for TQSS with absolute prices for more details on these options. In the web application (and by default in the command-line interface), evenly-spaced points are plotted along with additional points around the intersection between supply and demand (the --combined-search option). When supply curves are being scaled (the --supply-scale-lambda option), the lower bound is the auction size (i.e. the sum of the supply curve lengths for horizontal auctions, or the length of the bottom supply curve for vertical auctions), which is also used as the width of the enforced TQSS step at height zero.

TQSS with normalised prices

For a TQSS with normalised prices, an alternative version of this graph is generated. In this case, the y-axis shows the normalised price (i.e. the common price of all goods above their corresponding supply curves at the supplied quantity). The demand curve is calculated directly from the bids, so it is a continuous line, rather than interpolating a fixed number of points. Paired bids are treated as demanding the good(s) which they receive in the final auction result, or which they would prefer to receive (for unsuccessful bids). Ties are resolved arbitrarily, so for quantities above the total actually allocated (i.e. right of the intersection), the graph is approximate.