The applet requires Java 1.4.1 or higher. It will not run on Windows 95 or Mac OS 8 or 9. Mac users must have OS X 10.2.6 or higher and use a browser that supports Java 1.4. (Safari works, IE does not. Mac OS X comes with Safari. Open Safari and set it as your default web browser under Safari/Preferences/General.) On other operating systems, you may obtain the latest Java plugin from Sun's Java site.
powered by NetLogo
view/download model file: corruption_and_collusion_in_auctions.nlogo
This is an agent based model for simulation experiment. The model refers to the procurement of a single item throught a competitive mechanism where the format chosen is the sealed first price auction with predefined reservation price. The model has been enriched by introducing the possibility of corruption, in the form of bribe, in order to revise the offer and undercut rivals. Finally we introduce the set aside scheme,spliting in two parts the contract and seeing whether this solution can improve efficiency and restore competition among bidders.
We call reservation price the maximum amount the buyer is willing to pay for each item.Futhermore we define the market as a patch populated by agents randomly located. There are 100 firms, labeled as "business persons", caracterized by their cost structure. The cost structure is the key variable that determes the competitivness of the firm. Moreover we assume that the cost distribution will be defind by a Uniform distribution over the interval [70,120]. The agent with a cost less or equal that the reservation price can partecipate to the auction. In a second moment we introduce the bribe competition where the highest bribe that can be offered will be a decreasing function of the number of bidders. All agents with cost lower than the difference between reservation price and the max bribe will partecipate to the auction. A collusive Bayesian equilibrium is sustained. Finally in order to restore the competition we introduce the set aside solution; that is the spliting the contract in two parts. Every firm can partecipate in one auction only. We divide the firms based on their cost. We assume that firms on the right behave competitively and the firms on the left behave as before. After the firs stage the winner can pass to the right. The possibility to have a new competitor in the left market break the collusion.
Start the model by clicking setup. After clicking submit_bid the firms will partecipate to the auction competitively: bidder with lowest offer wins, therefore the contract is allocated to the least cost firm. this shows the benchamark situation, according to which efficiency is achieved. Restarting the setup but clicking the "submit_collusive_bid" bottom, agents compete for the bribe offers and the winner is chosen according to the minimum bid offered (if the firms offered the same bid the winner will be chosen randomly). The outcome is a collusive bayesian one in which the contract is allocated at the reservation price and the maximum bribe is paid.
Finally by clicking "set_aside" and "submit set_asid"e the firm will be divided on a cost bases; the winner in the right part becomes more efficient and got the possibility to enter the left side. The game ends when the inefficiency in allocation is less than 2.5. Other than this learning-by-doing mechanism we allow right-side firms to acquire information on left-side ones' cost, in particular if in a small neighborhood there are no competitors higly efficient in terms of cost, right-side bidders enter the left market and compete bidding their own price plus required bribe. This allows low cost firms to undercut rival in the next game if the winning bid is higher than their own cost plus bribe.
Monitors: there are 4 monitors that shows the winner cost and the best cost possible, profit lost and buyer profit. They help us to better understand the ongoing of the market.
Plots: On the right there are 3 graphics that shows the winner cost, the buyer profit in the set aside solution and the created inefficiency. They can be useful to understand how these variables are correlated.
Modify the learning-by-doing process, the bribe function and/or the number of bidders in order to see whethere efficiency improves or not, and therefore buyer's profit under set aside scheme.
A possible extension concerns the introduction of endogenous entry and participation, as often described in theoretical works on this topic. In particular, one can allow new high cost firms to born and participate to the set aside model.
- E. Auriol, Corruption in procurement and public purchase, International Journal of Industrial Organization, Pages 867-885, September 2006
- O. Compte & A. Lambert-Mogiliansky & T. Verdier, Corruption and Competition in Procurement Auctions, RAND Journal of Economics, The RAND Corporation, vol. 36(1), pages 1-15, Spring 2005.
- Peter Cramton and Ian Ayres, Deficit Reduction Through Diversity: How Affirmative Action at the FCC Increased Auction Competition, Stanford Law Review 48 (1996): 761-815.
- Yvan Lengwiler Elmar Wolfstetter Corruption in Procurement Auctions in Handbook of Procurement (ed. By Dimitri, Piga, Spagnolo), Cambridge Univeristy Press 2006.
- NetLogo User Manual version 4.1.3 April 3, 2011
globals
[
reservation_price ;;min proce the buyer is willing to pay in standard procedure
reservation_price_sa ;;min price the buyer is willing to pay in the set aside contract
reservation_price_big ;;min price the buyer is willing to pay in the non set aside contract
best_bid ;;minimum bid offered in the standard procedure with competitive behaviour (lowest cost)
best_bid_sa ;;minimum bid in the set aside contract among firms with higher costs
best_bid_big ;;minimum bid in the set aside contract among firms with lower costs
buyer_profit ;;buyer's profit in standard procedure
buyer_profit_sa ;;buyer's profit with set aside
best_turtle ;;winner of the competitive auction
best_turtle_sa ;;winner of the set aside auction
winner ;;winner in the game with corruption
best_turtle_big ;;winner in the set aside among low cost firms
profit_lost ;;difference between the competitive profit and the collusive profit
inefficiency ;;difference in costs between the winner and the most efficient firm
inefficiency_sa ;;difference in costs between the winner and the most efficient firm in the set aside
bribe ;;bribe paid as decreasing function of the number of bidders
bribe_sa ;;bribe paid in the auction with set aside
winner_s_cost ;;winner's cost in non set aside contract
]
turtles-own
[
cost ;;firsm's cost
bid ;;firm's bid
]
;-----------------------------;; SET UP ;;---------------------------------------------------------
to setup
clear-all
set-default-shape turtles "person business" ;;CREATE TURTLES
crt 100
random-seed 2011
ask turtles
[setxy random-xcor random-ycor ;;random position
set size 1 ;;turtles dimension
set color white ;;agents default color
]
ask turtles
[set cost ((random-float 50) + 70) ;;random costs tra 50 e 120
]
set reservation_price 90 ;;set the max amount the buyer is willing to pay
set bribe ((10 *(count turtles) - 1) / (count turtles) ^ 2) ;;define the bribe as a decreasing function of the number of bidders in the left part of the market
end
;--------------------------;; THE COMPETITIVE AUCTION ;;------------------------------------------------------
to submit_bid
set best_bid 100 ;;START A SEQUENTIAL ITERATION FOR EACH AGENT:
ask turtles[
if (cost <= reservation_price) [set color green] ;;if the cost is lower than the reservation price become green (ACTIVE)
if (cost > reservation_price) [ht] ;;if the cost is higher than the reservation price hide the agent
if (cost <= best_bid) [set best_bid cost ;;if the cost is smaller than the best_bid then update best_bid
set best_turtle min-one-of turtles [cost]] ;;keep the agent with the lowest cost up to now
]
ask best_turtle [set color red
set label cost] ;; once the best_turtle is found, set color red
show [cost] of best_turtle
set buyer_profit (reservation_price - [cost] of best_turtle) ;;set buyer's profit
show buyer_profit
end
;-------------------------;; THE COLLUSIVE AUCTION ;;----------------------------------------------------------
to submit_collusive_bid
ask turtles[
if (cost <= reservation_price) [set color green] ;;let the active agents being green
ifelse (cost >= reservation_price - bribe) [
ht] ;;let die all those turtles that cannot breakeven with bribe
[set bid (reservation_price + bribe)] ;;define the collusive bid
set winner one-of turtles with [cost < reservation_price - bribe] ;;chose randomply the winner
]
ask winner [
set color red ;;characterize the winner by the red color
set label cost
]
show winner
show count turtles ;;counts the number of bidders partecipating in the auction
set buyer_profit (reservation_price - [cost] of winner) ;;set buyer's profit
set inefficiency ([cost] of winner - min [cost] of turtles with [cost <= reservation_price]) ;;determine the profits lost with respect to the competitive case
end
;-------------------------;; THE SET ASIDE ;;-------------------------------------------------------------------
to setup_set_aside
clear-all
set-default-shape turtles "person business"
crt 100
random-seed 2011
ask turtles[
set cost ((random-float 50) + 70)] ;;random costs between 50 e 120
ask turtles
[setxy random-xcor random-ycor ;;random position
set size 1 ;;turtles dimension
set color white ;;agents default color
]
ask turtles[
if (cost > mean [cost] of turtles) ;;divide firms on costs
[set color yellow ;;if firms are high costs set color yellow
set xcor random-float 10] ;;& set random position on the right side of the market
if (cost <= mean [cost] of turtles) ;;if low cost firm
[set xcor random-float -10]] ;;set random position on the left side of the market
graphics ;;update graphics
graphic_ineff
graph_winner_s_cost
end
to set_aside
set reservation_price_sa 100
set reservation_price_big 100
set bribe_sa ((10 *(count turtles with [xcor <= 0]) - 1) / (count turtles with [xcor <= 0]) ^ 2)
set best_bid_sa 100
set best_bid_big 100
ask turtles [
if (xcor > 0) ;;bidding behaviour inthe right part of the market
[if (cost <= best_bid_sa) ;;if the cost is smaller than the best_bid then update best_bid
[set bid cost
set best_turtle_sa min-one-of turtles-here [bid]]]] ;;keep the agent with the lowest cost up to now
ask turtles [
if (xcor <= 0)
[if (cost <= reservation_price_big) and (color != magenta)
[set bid (reservation_price_big + bribe_sa)] ;;set collusive bid
if (color = magenta) ;;if new entrant because of imitation
[set bid (cost + bribe_sa)]] ;;do not collude
set best_turtle_big min-one-of turtles with [xcor <= 0] [bid] ;;keep the agent with the lowest cost up to now
if ([bid] of best_turtle_big >= cost)
[set bid (cost + bribe_sa)]]
ask best_turtle_sa [set color red] ;;once the best_turtle_sa is found, set color red
ask best_turtle_big [set color green] ;;once the best_turtle_big is found, set color green
;;---------------------------------------------;; OUTCOMES ;;------------------------------------------------------------
set buyer_profit_sa (0.77 * ((reservation_price_big) - [bid] of best_turtle_big) + (0.23 * ((reservation_price_sa) - [bid] of best_turtle_sa))) ;;compute the overall buyer's profit
set inefficiency_sa ([cost] of best_turtle_big - min [cost] of turtles with [xcor <= 0]) ;;compute allocative inefficiency
set winner_s_cost ([cost] of best_turtle_big)
show [cost] of best_turtle_sa ;;display winner's costs of right market
show [cost] of best_turtle_big ;;display winner's costs of left market
show bribe_sa
graphics
graphic_ineff
graph_winner_s_cost
ifelse (inefficiency_sa > (([bid] of best_turtle_big) - ([cost] of best_turtle_big))) [learn] [stop] ;;impose the learning mechanism if the number of inefficient firms is still too high otherwise stop the game
end
to graphics ;;make graphs
set-current-plot "buyer_profit_sa"
set-current-plot-pen "buyer_profit_sa"
set-plot-y-range -100 50
set-plot-pen-mode 0
plot buyer_profit_sa
end
to graphic_ineff
set-current-plot "Inefficiency_sa"
set-current-plot-pen "inefficiency_sa"
set-plot-pen-mode 0
plot inefficiency_sa
end
to graph_winner_s_cost
set-current-plot "winner's cost"
set-current-plot-pen "winner's cost"
set-plot-pen-mode 0
plot winner_s_cost
end
;--------------------------------------------;; INTRODUCE LEARNING BY DOING and IMITATION ;;---------------------------------------
to learn
ask best_turtle_sa [ ;;the learning mechanism for the winner in the right market
set cost ((0.95) * cost) ;;reduce cost by 0,5% of the previous level
if (cost <= (max [cost] of turtles with [xcor < 0])) ;;allow best_turtles_sa to participate the other market if the condition holds
[set xcor random-float -15
set color blue]] ;;highlight the new entrant
ask turtles with [color = yellow] [ ;;the imitation mechanism for less efficient firms
if any? turtles with [cost > (mean [cost] of turtles with [xcor < 0] + bribe_sa) and xcor < 0] in-radius 3 ;;pass into the other market if near firms are not too strong once bribe is required
[set color magenta ;;highlight the new entrants
set xcor random-float -15]]
show [cost] of best_turtle_sa ;;display winner's costs of right market
show [cost] of best_turtle_big ;;display winner's costs of left market
show bribe_sa
set_aside ;;iterate
graphics
graphic_ineff
graph_winner_s_cost
end