Це 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;
}
}
Додаткові правила
- Стандартні лазівки заборонені.
- Саботаж інших ботів дозволений, але спроба змінити видимість поля / методу призведе до загадкових
SecurityException
s. Виняток викликає інший бот, щоб пробити межу в 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
випадковим чином ..