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