代写一个交易机器人,根据不同的随机场景,编写算法完成最大化交易。
Introduction
Your task is to write a bot in C. Your bot must successfully buy, transport
and sell items in a virtual world. The details of the Trader Bot world are
randomly generated for each game. Here is an example:
Name Type Commodity Quantity Price
CSE Start
Harvey-Norman Buyer Televisions 541 1307
MSY Buyer Computers 333 3033
Caltex Petrol station Fuel 684 215
Dump Dump
Coles Buyer Mars Bars 1401 348
O’Reilly Seller Books 9830 166
4 Pines Seller Beer 8050 90
LG Seller Televisions 2628 677
Lenovo Seller Computers 307 1666
Aldi Buyer Mars Bars 3994 343
Quadrangle Other
BP Petrol station Fuel 388 111
Mars Seller Mars Bars 5396 142
J&B Hifi Buyer Computers 305 3231
Physics Lawn Other
Apple Seller Computers 906 1640
Dell Seller Computers 711 2087
Good Guys Buyer Televisions 916 950
James Squires Seller Beer 9584 105
Regent Hotel Buyer Beer 10345 159
Sony Seller Televisions 360 1025
Batch Brewing Seller Beer 8298 85
Addison-Wesley Seller Books 6441 121
UNSW Bookshop Buyer Books 2890 342
Umart Buyer Computers 215 3395
Racecourse Other
IGA UNSW Buyer Mars Bars 4403 302
Prentice-Hall Seller Books 7337 127
Whitehouse Buyer Beer 6531 165
Your bot has a fixed number of turns in the Trader Bot world. Its only goal is
to have as much cash as possible after the last turn.
Each turn, a bot is given a description of the world and asked to make a
single action.
There are four types of actions: Move, Buy, Sell and Dump.
A bot makes money by buying a commodity from one location and selling to
another location at a higher price.
For example, it might buy Computers from Dell at $2089 each at sell them to
MSY at $3033 each.
A bot must move to a location before it can buy or sell from that location.
A bot making a Move action specifies the number of locations they wish to
move. A bot can move backwards by specifying a negative number of locations.
The Trader Bot world is circular so you can move from the last location to the
first location and vice-versa.
For example, in the world above a bot at MSY which makes a Move 3 action would
go to Coles. If instead a bot at MSY a made Move -5 action they world go to
IGA UNSW.
There is also limit on the maximum number of locations a bot can move in one
turn. This limit does not change during the game.
Each location a bot moves will use up 1 unit of fuel. A bot without fuel
cannot move (it can perform other actions). A good bot will likely need to
purchase fuel.
A bot attempting to make a move that would use up more than its available fuel
or exceed the move limit is not penalized. It is moved the maximum possible
distance.
Each location buys or sells at most one type of commodity. No location both
buys and sells a commodity. Some locations do not buy or sell any commodity.
A bot making a Buy action must specify the number of items they wish to buy. A
bot may receive less items than it requests. This will occur if:
- the quantity exceeds the number of items the seller has
- the bot has insufficient money
- the items would exceed the bot’s weight
- the items would exceed the bot’s volume limits.
A bot’s cash is reduced by the price of the items it receives in a Buy action.
A bot will usually then use one or more Move actions to go to a location which
buys this commodity. A bot may however choose to buy more items either of the
same type or of another type.
A bot making a Sell indicates the number of items they wish to sell. A bot
making a Sell action must be on a location which buys this type of item. The
amount that is actually sold may be limited by the amount the buyer wishes to
buy. This and the price the buyer will pay is indicated in the location’s
description.
A bot’s cash will be increased by the total price of the items it sells in a
Sell action.
Bot’s are not penalised for attempting to buy or sell more items than is
possible. The transaction will be carried out as much as is possible. For
example, if a bot attempts to buy 10000 items from a location which only has
25 items, they will be sold 25 items (other restrictions permitting).
Trader Bot worlds will always contain one or more locations of type
LOCATION_DUMP. At these locations, a bot can make a Dump action and all the
items it has on board will be removed. The bot receives no cash for these
items. A Dump action is only useful if a bot has items that can’t be sold and
wishes to make room for other items.
Trader Bot worlds will always contain one or more locations of type
LOCATION_PETROL_STATION which sell fuel. Fuel is placed in a bot’s fuel tank,
it is not included in the bot’s cargo. Fuel does not affect a bot’s weight and
volume limit - there is a separate limit on the amount of fuel a bot can
carry. Fuel cannot be sold by a bot. Bots always start with the maximum amount
of fuel they can carry.
Trader Bot worlds will always contain one location of type LOCATION_START.
Bots start at this location.
The initial state of the world is randomly determined at the beginning of each
game. The details of the world including prices do not change during the game.
The only exception is that the amount of items buyers and sellers are willing
to trade reduces as bots buy and sell items.
Multi-bot Worlds
Your bot will be tested in Trader Bot worlds where it is the only bot present.
It will also be tested in Trader Bot worlds where other bots are present.
All bots start at the same location, with the same amount of fuel & cash and
have the same number of turns. All bots have the same limits on the amount of
fuel they can carry, how far they can move and the maximum volume and weight
they can carry.
When multiple bots are present in a world each turn all bots’ get_action
functions are called to request an action. The actions then occur
simultaneously.
Multiple bots may be present on one location. If multiple bots on the one
location make buy or sell requests which cannot all be satisfied the trade is
divided fairly between the bots. Items will be left unsold if it not possible
to divide trade fairly.
If, for example, there are 7 items for sale at a location, and 3 bots
simultaneously request to buy all 7 items each bot will be sold 2 items and 1
item will be left unsold.
Getting Started
The week 10 lab exercises take you through getting started.
You may submit multiple .c files containing your Trader Bot code.
You may use any name for the source files of your program except
trader_bot_main.c.
Your sources files must not include a main function.
Your sources files must contain two functions with exactly these prototypes:
char *get_bot_name(void);
void get_action(struct bot *bot, int *action, int *n);
—|—
get_bot_name is called once at the start of every game to get your bot’s name.
This may be any string you choose. Do not use offensive or obscene words. A
suffix will be added to your name if necessary to make it unique.
get_action is called once every turn to get your bot’s move.
get_action is given a pointer to a struct describing the current state of your
bot. A full description of the Trader Bot world can be obtained by following
pointers starting with this struct. get_action should not change the structs
representing the Trader Bot world.
get_action assigns appropriate values to *action and *n to indicate the move
it wishes to make this turn.
A significant component of this assignment is understanding the representation
of the Trader Bot world.
The constants and types used in this representation are described in this
file: trader_bot.h
You will need to #include trader_bot.h in your code.
DO NOT CHANGE trader_bot.h.
It is not necessary to submit trader_bot.h. If you do submit trader_bot.h its
contents will be replaced by this file.
You may submit other .h files.
You may submit data files with the suffix .txt to be used by your program.
Testing
The script ~cs1511/bin/bot_test will automatically test your program on a
random world.
…
$ ~cs1511/bin/bot_test C_files
dcc …
…
…
Trader Bot Tournaments
Tournaments will be run on all bots submitted with give, starting Tue May 16
with the results displayed on the class web page.
This will allow you to see how your bot performs in a world with many other
bots present.
Submitted bots will be first tested in a single-bot-world. They will only be
be added to the tournament if they recah a qualifying-level of performance in
a single-bot world.
Hints
You should follow discussion about the assignment in the class forums.
Questions about the assignment should be posted there so all students can see
the answer.
Don’t panic!
Assumptions/Restrictions
You submitted code must be C only. You may not submit code in other languages.
You may not use system or other C functions to run external programs.
You may call functions from the standard C library and the maths library. You
may not use functions from other libraries. Your program must compile with dcc
without the -l flag being used to specify an extra library. If you don’t
understand this requirement don’t worry - as long as the bot_test scripts
compiles your program you are fine.
Your get_action function must take at most 10 seconds to return a move on a
CSE computer when compiled with dcc –valgrind.
There is no way for your bot to pass information from one turn to the next.
Your bot is not permitted to create files.
Sellers do not generate more of the items they sell during the game. The
number of items they have for sale is reduced when bots buy items from them.
The number of items they have for sale does not otherwise change.
This is also true for buyers. The number of items a buyer is willing to buy
reduces when bots sell items to them. The number of items they are willing to
buy does not otherwise change during the game.
trader_bot.h will not be changed when your bot is compiled for marking.
Submission of Work
You are required to submit intermediate versions of your assignment.
Every time you work on the assignment you should copy your work to your CSE
account and submit it using the give command below.
It is fine if intermediate versions do not compile or otherwise fail
submission tests.
Only the final submitted version of your assignment will be marked.
This will allow you to retrieve earlier versions of your code if needed.
You submit your work like this:
$ give cs1511 ass2 C files
Blogging
You must blog every time you work on this assignment, recording how much time
you spent working on the assignment and what this time was spent doing
(reading, designing, coding, testing, debugging, …).
You must blog about all significant bugs in your assignment including what
test found the bug, how the bug was tracked down and fixed, how long this took
and any lessons learnt.
You may create one big blog post and edit each time, or multiple small blog
posts for the assignment.