BEST代写-线上留学生作业代写 & 论文代写专家


CS代写|CS404/924 Agent Based Systems

CS代写|CS404/924 Agent Based Systems


1 Introduction

Imagine an auction of paintings by four famous artists: Picasso, Van Gogh, Rembrandt and Da Vinci. The auction proceeds in rounds. In each round, the auctioneer presents a piece to be sold. All bidders then write their bids for the item on a secret sealed note that is handed to the auctioneer. The highest bidder wins the piece and pays their bid (“first-price auction”). Then, the auctioneer starts the next round with a new item. The auction continues until the first bidder reaches a winning condition that is specified below.

The objective is to implement strategies for a Python 3 bidding bot that will participate in this game.

2 The Game

This is an extensive game with simultaneous moves encoded as an auction played sequentially. The game runs in the following way. An auctioneer initialises a room full of bots, then sets up the auction. This involves giving each bot the same budget to spend and setting the sequence of items (and their types) to be sold. This sequence is announced to the bidders.

The auctioneer will then sell the paintings one after another. In each round, the auctioneer will announce the item type (Picasso, Van Gogh, Rembrandt, or Da Vinci) to be bid upon and ask the bots for bids. Your bot will use the information that the auctioneer gives, including the outcomes1 of the previous rounds, to determine an amount to bid. Your bid cannot exceed your remaining budget. Once all bots have bid, the auctioneer will declare the highest bidder the winner, who will then be charged a payment equal to their bid and receives the item. If the top bids draw, then the winner is chosen at random from those bidders. For each round, there is exactly one winner.

The starting budget for every bidder is 1001. The auction will continue until the following winning condition is met for the first time, or after 200 rounds (whatever happens first).

Winning condition: A bidder wins if they own a 3 paintings of any artist, 3 of another artist, 1 of another artist and 1 of another artist. For example, 3 Van Gogh, 3 Picasso, 1 Rembrandt and 1 Da Vinci; or 3 Da Vinci, 3 Rembrandt, 1 Picasso and 1 Van Gogh (or any other combination of 3, 3, 1, 1 paintings).

You will write your strategies in your bot. Your bot will be tested in a series of different auctions against bots of varying difficulty and number. Finally, your bots will be tested against each other in a tournament.

3 Implementation

Provided to you are two main Python 3 files to run the auctions: and We also provide you with some example bots in the bots folder,, and

3.1 contains the definition for the auctioneer class, which sets up and runs the auction. We will use this exact same file while marking your bots, so DO NOT CHANGE ANY OF THE CODE IN THIS FILE.

It has the following arguments:

  • room(list of modules): A “room” is a list of bots that will play the auction. The bots are module objects. There is an example of how to import them at the top of the file, and how to pass them to the auctioneer as a list at the bottom of the file. There are also examples in the file.
  • painting_order(list of strings): A list of the sequence of painting types that will be auctioned in each of the rounds. If this is set to None, then a random order will be used.
  • slowdown(float): How long to wait at each round of the auction. If you set this to zero the auctions will run fast.
  • verbose(boolean): Whether the auctioneer prints updates to the terminal or not.
  • output_csv_file(string): The auctioneer automatically logs the result of every round in an auction. This

    defaults to ’data/auctioneer_log.csv’, but you can specify a different filename.
    When the auctioneer is initialised it will automatically set up the auction and all the bots in the room with the

    initialise_bots() method.
    The method run_auction() will run the auction until it is completed.

    It is not necessary to know how the auctioneer class works to do well on the coursework. But if you are interested there are more details in the file.


    The file is provided as a convenient way to run auctions. This includes some methods that show examples of how to run auctions. This is given to you as an example, so please feel free to change any of the code here and experiment.

    You might want to run an auction slowly, with a full print out to the terminal of the auction’s progress, as shown in run_basic_auction(). This will be useful to see how your bot is performing live. Or you might want to run lots of auctions quickly, as shown in run_lots_of_auctions().

    3.3 bots

    In the bots folder we included a few bots for you to practice with. We have given you 3 bots. bots/ is a good starting point for your own bot, with everything commented clearly. bots/ and bots/ are example bots that should be easy to beat.

    3.4 bots/ is an example bot that you can use as a starting point to write your own bot.

    Each bot is a class, with one main method, get_bid(), that allows you to make bids on paintings. It is in this method that you should implement your strategy. The comments on the method explain what each argument is. Currently, the strategy just returns a random integer between 0 and the amount of budget that your bot has left.

    Your bot will be initialised at the start of the auction, and then will play until the auction finishes. This means that your bot can hold internal state variables during the auction, which may be useful for some strategies. You can add these variables, or any other code, in the __init__() method, if you want to. Please change the“1234321” variable to your own ID number.

    Feel free to add any extra methods that you might need, but be careful that the main method keeps the same input variables and returns an integer bid without crashing.

If your bot crashes then your bid will be set to zero. If your bot returns a float then this will be rounded down to an integer. If your bot bids more than their budget then their bid will be set to zero. If your bot takes longer than 5 seconds to return a bid, then again your bid will be set to zero.