Đây là một thách thức KOTH cho trò chơi đấu giá hóa đơn đô la trong lý thuyết trò chơi. Trong đó, một đô la đang được bán cho người trả giá cao nhất. Giá thầu tăng theo mức tăng 5 và người thua cũng trả giá thầu của họ. Ý tưởng là cả hai người chơi leo thang cuộc chiến đấu thầu vượt xa giá trị của đồng đô la để cắt lỗ.
Hãy hy vọng bot của bạn thông minh hơn thế.
Bạn sẽ tạo một bot để chơi trò chơi này bằng cách mở rộng net.ramenchef.dollarauction.DollarBidder
lớp. Bạn phải thực hiện nextBid
phương thức trả về giá thầu tiếp theo của bot của bạn với giá thầu trước đó của bot khác. Nếu cần, bạn cũng có thể sử dụng newAuction
phương pháp để đặt lại cho mỗi phiên đấu giá với lớp bot của đối thủ.
public abstract class DollarBidder {
/**
* Used by the runner to keep track of scores.
*/
long score = 0;
/**
* (Optional) Prepare for the next auction.
*
* @param opponent The class of the opponent's bot.
*/
public void newAuction(Class<? extends DollarBidder> opponent) {}
/**
* Bid on the dollar. Bidding ends if the bid is
* not enough to top the previous bid or both bids
* exceed $100.
*
* @param opponentsBid How much money, in cents,
* that the opponent bid in the previous round. If
* this is the first round in the auction, it will
* be 0.
* @return How much money to bid in this round, in
* cents.
*/
public abstract int nextBid(int opponentsBid);
}
Đấu thầu diễn ra cho đến khi một trong những điều sau đây xảy ra:
nextBid
ném một ngoại lệ. Nếu điều này xảy ra, bot đã ném ngoại lệ trả giá thầu trước đó của họ và bot khác nhận được đồng đô la miễn phí.- Hoặc bot không trả đủ tiền để đứng đầu giá thầu trước đó. Nếu điều này xảy ra, cả hai bot trả giá thầu của họ (người thua cuộc trả giá thầu trước đó của họ) và người chiến thắng sẽ nhận được một đô la.
- Cả hai bot trả giá hơn 100 đô la. Nếu điều này xảy ra, cả hai bot đều trả 100 đô la và không bot nào nhận được đô la.
2 phiên đấu giá được tổ chức cho mỗi sự kết hợp của bot. Bots được tính bằng tổng lợi nhuận họ kiếm được qua các phiên đấu giá đó. Điểm cao nhất sẽ thắng.
Ví dụ
GreedyBot
import net.ramenchef.dollarauction.DollarBidder;
public class GreedyBot extends DollarBidder {
@Override
public int nextBid(int opponentsBid) {
return opponentsBid + 5;
}
}
OnlyWinningMove
import net.ramenchef.dollarauction.DollarBidder;
public class OnlyWinningMove extends DollarBidder {
@Override
public int nextBid(int opponentsBid) {
return 0;
}
}
AnalystBot
Đừng sử dụng điều này như một khuôn mẫu cho các bot có đầu óc phân tích; sử dụng ImprovedAnalystBot
thay thế.
import net.ramenchef.dollarauction.DollarBidder;
// yes, this is a poor implementation, but I'm not
// going to waste my time perfecting it
public class AnalystBot extends DollarBidder {
private DollarBidder enemy;
@Override
public void newAuction(Class<? extends DollarBidder> opponent) {
try {
enemy = opponent.newInstance();
enemy.newAuction(this.getClass());
} catch (ReflectiveOperationException e) {
enemy = null;
}
}
@Override
public int nextBid(int opponentsBid) {
if (enemy == null)
return 0;
return enemy.nextBid(95) >= 100 ? 0 : 95;
}
}
AnalystKiller
import net.ramenchef.dollarauction.DollarBidder;
public class AnalystKiller extends DollarBidder {
private static int instances = 0;
private final boolean tainted;
public AnalystKiller() {
this.tainted = instances++ != 0;
}
@Override
public int nextBid(int opponentsBid) {
if (tainted)
throw new RuntimeException("A mysterious error occurred! >:)");
return 0;
}
}
Quy tắc bổ sung
- Sơ hở tiêu chuẩn bị cấm.
- Phá hoại các bot khác được cho phép, nhưng cố gắng thay đổi khả năng hiển thị trường / phương thức sẽ dẫn đến bí ẩn
SecurityException
s . Một ngoại lệ là khiến một bot khác phá vỡ giới hạn 500ms. - Bots không thể truy cập gói người chạy trừ khi mở rộng
DollarBidder
lớp. - Tất cả các phương pháp sẽ trở lại trong 500ms hoặc ít hơn.
- Bots không cần phải được xác định.
- Giá thầu của bạn không cần là bội số của 5.
- $ 1 = 100
- Kết quả sẽ được đăng vào ngày 24 tháng 4 năm 2018.
Các kết quả
MTargetedBot: $14.30
BuzzardBot: $9.83
BluffBot: $9.40
RiskRewardBot: $9.35
SecretBot: $8.50
LuckyDiceBot: $7.28
CounterBot: $6.05
MBot: $5.40
StackTraceObfuscaterBot: $5.20
EvilBot: $4.80
MarginalBot: $4.60
TargetValueBot: $4.59
InflationBot: $4.27
UpTo200: $4.20
InsiderTradingBot: $1.90
MimicBot: $1.50
BorkBorkBot: $1.22
DeterrentBot: $0.95
MarginalerBot: $0.00
RandBot: $-4.45
BreakEvenAsap: $-7.00
AnalystOptimizer: $-13.95
DeterredBot: $-1997.06
ScoreOverflowBot: $-21474844.15
MirrorBot: $-21475836.25
Xin chúc mừng MTargetedBot
với lợi nhuận $ 14,30!
LuckyDiceBot
ví dụ: giá thầu tăng dần một 2-12
cách ngẫu nhiên ..