Ini adalah tantangan KOTH untuk permainan lelang tagihan dolar dalam teori permainan. Di dalamnya, satu dolar dijual kepada penawar tertinggi. Tawaran naik sebesar 5 ¢, dan yang kalah juga membayar tawaran mereka. Idenya adalah bahwa kedua pemain meningkatkan perang penawaran jauh di luar nilai dolar untuk memotong kerugian mereka.
Mari berharap bot Anda lebih pintar dari itu.
Anda akan membuat bot untuk memainkan game ini dengan memperluas net.ramenchef.dollarauction.DollarBidder
kelas. Anda harus menerapkan nextBid
metode yang mengembalikan tawaran bot Anda berikutnya mengingat tawaran bot lain sebelumnya. Jika perlu, Anda juga dapat menggunakan newAuction
metode ini untuk mengatur ulang untuk setiap lelang dengan kelas bot lawan.
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);
}
Penawaran berlangsung hingga salah satu dari yang berikut terjadi:
nextBid
melempar pengecualian. Jika ini terjadi, bot yang melempar pengecualian membayar tawaran mereka sebelumnya, dan bot lain mendapatkan dolar secara gratis.- Bot mana pun tidak cukup membayar untuk melampaui tawaran sebelumnya. Jika ini terjadi, kedua bot membayar tawaran mereka (yang kalah membayar tawaran sebelumnya), dan pemenang mendapat satu dolar.
- Kedua bot menawar lebih dari $ 100. Jika ini terjadi, kedua bot membayar $ 100, dan bot tidak mendapatkan dolar.
2 lelang diadakan untuk setiap kombinasi bot. Bot dinilai dengan total laba yang mereka hasilkan di seluruh pelelangan itu. Skor tertinggi menang.
Contohnya
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
Jangan gunakan ini sebagai templat untuk bot yang berpikiran analitik; gunakan ImprovedAnalystBot
saja.
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;
}
}
Aturan tambahan
- Celah standar dilarang.
- Menyabot bot lain diperbolehkan, tetapi upaya untuk mengubah visibilitas bidang / metode akan menghasilkan misterius
SecurityException
s yang . Pengecualian menyebabkan bot lain melanggar batas 500ms. - Bot tidak dapat mengakses paket pelari kecuali untuk memperpanjang
DollarBidder
kelas. - Semua metode harus dikembalikan dalam 500 ms atau kurang.
- Bot tidak perlu bersifat deterministik.
- Tawaran Anda tidak perlu kelipatan 5 ¢.
- $ 1 = 100 ¢
- Hasil akan diposting pada 24 April 2018.
Hasil
Lihat putaran individual di sini.
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
Selamat MTargetedBot
dengan untung $ 14.30!
LuckyDiceBot
misalnya tawaran dalam penambahan 2-12
secara acak ..