1 Introduction
想象一下,在一场拍卖会上,有四位著名艺术家的画作,分别是:毕加索、梵高、伦勃朗和达芬奇。毕加索、梵高、伦勃朗和达芬奇。在拍卖室里,拍卖师将每幅作品展示给大家,然后所有的竞拍者在一张密封的秘密纸条上写下他们对该物品的出价,并交给拍卖师。然后,拍卖师宣布出价最高的竞拍者为赢家,收取款项(相当于他们的出价或出价第二高的竞拍者的出价,视拍卖情况而定),并开始下一轮新的物品。如果有目标藏品要买,则第一个买下这捆物品的竞拍者终止拍卖并获胜。否则,拍卖继续进行,直到没有更多的物品可以出售。如果没有目标画束,拥有总价值最高的画作的竞拍者为赢家。
2 The Game
Copyright By PowCoder代写 加微信 powcoder
这是一个广泛的游戏,同时的动作编码为拍卖,按顺序进行。游戏的运行方式如下。拍卖师初始化一个充满机器人的房间,然后设置拍卖。这包括给每个机器人相同的预算,设置要出售的物品的顺序,并设置拍卖规则,如如何决定游戏的总赢家。
拍卖师会宣布要竞拍的物品类型,并询问机器人的出价。你的机器人将使用拍卖师提供的信息,包括其他玩家到目前为止的状态,来决定出价的金额。一旦所有机器人出价,拍卖师将宣布出价最高者为赢家,然后他将被收取一笔款项(不一定是他们出价的金额,见下文),并收到物品。如果有多个出价最高的人,则从这些竞拍者中随机选出获胜者。每一轮最多只有一个赢家。
拍卖会将继续进行,直到没有更多的物品出售,或者有一个设定的获胜条件,例如,一个竞拍者成功地获得了所需的艺术家画作的目标收藏,在这种情况下,他们被宣布为获胜者。如果没有目标藏品作为中标条件,那么当所有画作售出后,拍卖会就会结束,最后以物品总价值最高的竞拍者为赢家。
然而,请注意,虽然出价最高的人总是会赢,但拍卖会可以设置为最高出价者不支付自己的出价。也可以设置成最高出价者只需支付第二高的出价(见赢家支付)。
您将在您的机器人中写下您的策略。您的机器人将在一系列难度和数量不同的机器人拍卖中接受测试。最后,您的机器人将在比赛中互相测试。
有两种类型的游戏将进行。
最后总价值最高的人获胜,出价最高的人支付第二高的价格。毕加索价值2,梵高价值11,伦勃朗价值23,达芬奇价值47。
先收集到指定的一捆画作,出价最高者自付标价。收藏包的最低条件将是任何艺术家的3幅画,另一个艺术家的2幅画和另一个艺术家的1幅画。例如,3个达芬奇,2个毕加索,1个伦勃朗;或者4个达芬奇,4个伦勃朗,1个毕加索。
需要注意的是,本次比赛的所有场次,拍卖规模(拍卖画作数量)为200幅,每位竞拍者的起拍预算为1001元。
3 Implementation
我们为您提供了两个主要的Python 3文件来运行拍卖:Auctioneer.py和arena.py。我们还在 bots 文件夹中为您提供了一些示例机器人,random_bot.py, flat_bot_10.py和 u1234321.py。
3.1 auctioneer.py
auctioneer.py包含了Auctioneer类的定义,用于设置和运行拍卖。我们在标记您的机器人时将使用这个完全相同的文件,所以不要改变这个文件中的任何代码。
游戏类型(string)。2种游戏类型中的 “价值 “或 “收集”。价值游戏由所有回合后拥有最高价值的机器人获胜。收集游戏是当机器人成功收集到目标收藏品中指定的全套画作时获胜。
房间(模块列表)。一个 “房间 “是一个将进行拍卖的机器人列表。这些机器人是模块对象。在 auctioneer.py 文件的顶部有一个如何导入它们的例子,在 auctioneer.py 文件的底部有一个如何将它们作为列表传递给拍卖者的例子。在arena.py文件中也有例子。
绘画顺序(字符串列表)。将在每轮拍卖中拍卖的绘画类型的顺序列表。如果将此设置为None,则将使用随机顺序。
目标集合(整数列表)。对于收集类型的游戏,获胜的机器人是第一个赢得画作收集的人。这是作为一个列表给出的。例如,[3,2,1]意味着获胜者是第一个收集到至少3幅一个艺术家的画作,2幅另一个艺术家的画作和1幅另一个艺术家的画作的机器人。具体的艺术家并不重要。因此,3幅达文西、2幅毕加索和1幅伦勃朗会获胜,3幅伦勃朗、2幅梵高和1幅达文西也会获胜。注:这些策略将根据[3,2,1]的目标收藏进行评估。
slowdown(float): 每一轮拍卖的等待时间。如果您将此设置为零,拍卖会将快速进行。
verbose(boolean)。拍卖人是否向终端打印更新。
输出csv文件(字符串)。拍卖师自动记录每一轮拍卖的结果。默认值为’data/auctioneer log.csv’,但您可以指定一个不同的文件名。
当拍卖师被初始化后,它将通过initialise bots()方法自动设置拍卖和房间里的所有机器人。方法run auction()将运行拍卖,直到拍卖结束。不一定要知道拍卖师类是如何工作的才能做好课程作业。但如果你有兴趣的话,README.md文件中有更多细节。
3.2 arena.py
arena.py文件是作为运行拍卖的一个方便的方法提供的。其中包括一些方法,展示了如何运行拍卖的例子。这是作为一个例子提供给你的,所以请随意修改这里的任何代码并进行实验。
你可能想要缓慢地运行拍卖,并将拍卖的进度完整地打印到终端,如run basic auction()
中所示。这对查看你的机器人的实时表现很有用。或者您可能想快速运行大量拍卖,如运行run lots of auctions()所示。
在 bots 文件夹中,我们提供了一些机器人供你练习。bots/u1234321.py是一个很好的起点,所有的注释都很清楚。bots/flat bot 10.py和bots/random bot.py是很容易被打败的例子。
3.4 bots/u1234321.py
u1234321.py是一个例子机器人,你可以用它作为一个起点来编写自己的机器人。
每个机器人都是一个类,有两个主要的方法,get bid game type collection()和get bid game type value(),允许你对collection和value游戏类型进行出价,你应该在这些方法中实现你对这两种游戏类型的策略。方法的注释解释了每个参数是什么。目前,这两种策略都只是返回一个0和你的机器人所剩预算量之间的随机整数。
您的机器人将在拍卖开始时被初始化,然后会一直玩到拍卖结束。这意味着您的机器人可以在拍卖过程中保持内部状态变量,这可能对某些策略有用。如果您愿意,您可以在init()方法中添加这些变量或任何其他代码。请将self.name=”1234321 “变量改为你自己的ID号。
随意添加任何你可能需要的额外方法,但要注意两个主要方法保持相同的输入变量,并返回整数出价而不崩溃。
如果你的机器人崩溃了,那么你的出价将被设置为零。如果你的机器人返回一个浮动值,那么这个值将被四舍五入到一个整数。如果你的机器人出价超过他们的预算,那么他们的出价将被设置为零。如果你的机器人出价时间超过5秒,那么你的出价将被设置为零。
3.5 bots/random bot.py and bots/flflat bot 10.py
我们已经包含了一些简单的机器人供你对抗。
random bot.py: 出价一个介于0和机器人剩余预算之间的随机整数。
flat bot 10.py: 出价10的一切。
你可以添加自己的机器人。你可以在 arena.py 文件中看到如何导入机器人并与他们对战。
4 Submission
您所提交的课程作业将由一个压缩文件(.zip或.tgz)组成,其中包含您的python文件中的机器人和您的pdf文档。作业应通过Tabula提交。
4.1 Your Bot
请将其保存为u
你还应该包括每个游戏类型的玩法。
你可以使用 bots/u1234321.py 作为起点。下面是一个如何导入和运行机器人的例子。
请确保你的机器人能以这种方式运行,将这里的id号替换成你自己的id号。如果你运行上面的脚本,你应该会看到拍卖会运行得非常快,然后打印出 “获胜者是[1867321]”,并显示出你的id号(如果你的策略可以击败随机机器人的话)。
你可以使用 arena.py 文件中提供的函数来测试你的机器人是否正确运行。如果你的机器人崩溃了,你将失去分数!
4.2 Your Writeup
请将其保存为
5 Evaluation
The coursework is worth 50% of the module credit. Its marking scheme is structured as follows:
对于每个游戏类型,您的机器人将在一系列不同的拍卖 “房间 “中进行测试,这些房间由不同难度的机器人组成,房间的大小和组成也不同。例如,您将在一个房间里对一个随机机器人进行测试。你也会在一个房间里与最多10个机器人的混合策略进行测试。对于收集游戏,您还将对不同的绘画顺序进行测试。你的机器人在这组房间中的表现将构成你策略表现的大部分分数。
我们还将与学生机器人进行对战,这将有助于你对策略表现的评分。
程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com