Це KOTH виклик для гри на аукціоні в доларовій грі на аукціоні . У ньому долар продається найвищому торгу. Ставки збільшуються з кроком у 5 ¢, а програв також сплачує свою ставку. Ідея полягає в тому, що обидва гравці посилюють торги, що значно перевищують вартість долара, щоб зменшити свої втрати.
Будемо сподіватися, що ваші боти розумніші від цього.
Ви створите бота для гри в цю гру, розширивши net.ramenchef.dollarauction.DollarBidderклас. Ви повинні реалізувати nextBidметод, який повертає наступну ставку вашого бота, враховуючи попередню ставку іншого бота. При необхідності ви також можете скористатися newAuctionметодом скидання для кожного аукціону з класом бота противника.
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);
}
Проведення ставок відбувається до тих пір, поки не відбудеться одне з наступних дій:
nextBidкидає виняток. Якщо це станеться, бот, який кинув виняток, сплачує попередню ставку, а інший бот отримує долар безкоштовно.- Будь-який бот не заплатив достатньо, щоб перевищити попередню ставку. Якщо це станеться, обидва боти платять свої ставки (програв платить попередню ставку), і переможець отримує долар.
- Обидва бота ставлять понад 100 доларів. Якщо це станеться, обидва боти платять 100 доларів, і жоден бот не отримує долар.
Проводяться 2 аукціони для кожної комбінації ботів. Боти оцінюються за загальним прибутком, отриманим на цих аукціонах. Виграє найвищий бал.
Приклади
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
Не використовуйте це як шаблон для аналітично налаштованих ботів; використовувати ImprovedAnalystBotзамість цього.
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;
}
}
Додаткові правила
- Стандартні лазівки заборонені.
- Саботаж інших ботів дозволений, але спроба змінити видимість поля / методу призведе до загадкових
SecurityExceptions. Виняток викликає інший бот, щоб пробити межу в 500 мс. - Боти не можуть отримати доступ до пакету бігуна, крім розширення
DollarBidderкласу. - Усі методи повинні повернутися за 500 мс або менше.
- Ботам не потрібно бути детермінованими.
- Ваша ставка не повинна бути кратною 5 ¢.
- $ 1 = 100 ¢
- Результати будуть розміщені 24 квітня 2018 року.
Результати
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
Вітаємо MTargetedBotз прибутком 14,30 доларів!
LuckyDiceBotнаприклад ... наприклад, ставки з кроком 2-12випадковим чином ..