Приклад запуску додано 4/11
Роз'яснення правил 4/8: Усі заявки змагатимуться в одному гігантському турнірі безкоштовно для всіх, що складається з такої кількості матчів, скільки мій комп'ютер може виконати за 48 годин.
Той, хто витратив будь-який час на перегляд трансляцій на Twitch, знає про поширеність DeepBot і, можливо, навіть знайомий з його грою на ставки Bank Heist . Цей турнір King of the Hill безпосередньо натхненний цією грою. Але не хвилюйтесь. Я думаю, що я кинув на цю версію достатньо зайвих перетворень, щоб все було цікавим.
Швидкий приклад
#####GAME 13: 16 players######
Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.
Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.
Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(
Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0
(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)
#####GAME 14: 231 players######
Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.
Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.
Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(
Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161
Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.
#####GAME 15: 300 players######
Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.
Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(
And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.
Правила гри
Турнір / Структура гри
- Турнір буде складатися з декількох ігор, вибраних рівномірно між 1000 і 1100, в яких кожен серйозний податок буде змагатися одночасно у вільному для всіх.
- Кожен гравець починає першу гру з 240 кредитів, а кожну наступну гру з кількістю кредитів, які вона мала в кінці попередньої гри.
- Кожна гра проходить в 2 раунди, і в кожному раунді гравців викликають у порядку, визначеному навмання рівномірно, щоб прийняти одне рішення:
- У першому раунді гравець може виплатити будь-яку цілу кількість кредитів від 0 до поточного кредитного фонду, щоб взяти участь у участі в банку.
- У другому раунді кожен гравець, який вирішив взяти участь у крадіжці, зробивши принаймні один кредит (надалі - «спадкоємці»), може вирішити відпустити свою ставку (і, роблячи це, можливо, виконати якусь іншу дію), відмовтеся від крадіжок або перейдіть на все. (Ці параметри далі описані нижче.)
- Виходячи з кількості спадкоємців та загальної кількості кредитів, які вони виплачували, обирається один із п’яти банків, на яких потрібно здійснити крадіжку. Цей вибір впливає на індивідуальну ймовірність перемоги та шанси, за якими визначається виплата. (Банки описані нижче.)
- Кожен спадкодавець, який не відмовився, з імовірністю банку (видозміненою) ймовірністю виграє свою частку, помножену на коефіцієнти ставок банку (закруглені вниз), або ж втратить свою частку. Зауважте, що успіх чи невдача кожного гравця визначається індивідуально - дехто досягне успіху там, де інші не вдається.
- Усі гравці, незалежно від того, брали участь чи ні, досягли успіху чи не змогли, потім отримують зарплату (за винятками, описаними нижче).
- Зауважте, що неможливо назавжди вийти з гри. У гіршому випадку гравцю, можливо, доведеться чекати гри, щоб отримати наступну зарплату.
- Після всіх 1000-1100 ігор, гравець з найбільшою кількістю кредитів буде оголошений переможцем цього турніру.
- Турнір буде повторюватися не визначено кількість разів (стільки, скільки можна обчислити за 48 годин), а заробіток гравця на всіх турнірах підсумований, щоб визначити загального переможця цього змагання.
Другий раунд ставок
- Будь-який гравець, який зробив позитивну ставку в першому раунді, може брати участь у другому раунді.
- У цьому раунді гравець може:
- відповісти рядком "назад", щоб скасувати свою ставку. Це встановить його ставку на нуль для нинішнього виграшу, а також дещо зменшить ймовірність того, що гравці, що залишаються в хейсті, досягнуть успіху. Користуючись цим варіантом, гравець відмовляється від зарплати в розмірі 240 кредитів, яка слідує за крадіжкою, як покарання за небезпеку, що залишилася. (Решта спадкоємців вдасться досягти успіху з імовірністю, що дорівнює кількості ймовірностей банку, ніж частка спадкоємців, які не "відступили".)
- відповідь за допомогою рядка "все в", щоб підірвати цілі кредитні фонди - і взяти позику на день виплати на наступну 240 зарплатну зарплату - щоб придбати все найкраще обладнання та розвідку за крадіжку і ввійти в поодинці, гармати палаючи, без покладаючись на кого-небудь. На таку ймовірність перемоги гравця не можуть вплинути, коли інші викрадачі випадуть із пограбування, а також його виграші не можуть бути вкрадені подвійними кроссерами. Виграшні виплати визначатимуться так, як ніби його ставка складала цілі кредитні активи плюс 240, тоді як збиток встановив її нульовий капітал.
- Відповідь будь-яким іншим рядком (включаючи порожній рядок) для того, щоб дотримуватися попередньої ставки та пройти з крадіжкою як звичайно. (Рекомендована відповідь: "! Guncheck"). Окремі відповіді матимуть додаткові побічні ефекти:
- Відповідь "змінити роботу" призведе до того, що гравець покине роботу. Починаючи з цього раунду, в кінці кожного раунду гравець матиме 5% шансів прийняти на роботу на новій посаді. Якщо це вдасться, гравця приймають на роботу і одразу отримують свою першу зарплату. За кожну нову роботу гарантовано платять рівно на 5% більше, ніж за останню (округлену вниз). Ця дія буде успішною, чи вдасться крадіжка.
- Відповідь "здобути інтелект" призведе до того, що гравець витратить усі свої виграші від цього крадіжки, щоб отримати додаткові 0,00001 за кредит, витрачений таким чином на шанси для банку, який був призначений лише для цього гравця . Ця зміна шансів є постійною. Наприклад, якщо гравець вибирає цю дію, коли вибирає банк 1 і виграє 6969 кредитів у виграші, шанси банку 1 для цього гравця будуть постійно збільшені на 0,06969, і гравець не отримає нічого від цього крадіжки.
- Відповідь "купіть охоронця" призведе до того, що гравець викупить одного із охоронців банку, у якому він перебуває. В обмін на постійне зменшення 1 кредиту на зарплаті цього гравця (звичайний хабар охоронця), гравець отримає "постійну" підвищену ймовірність перемоги в цьому банку (через те, що охоронець "забуде згадати" цього гравця в поліцейських, коли запитав). Ймовірність збільшиться рівно на 1% від різниці між поточною ймовірністю перемоги гравця в цьому банку та 100%. Ця дія буде успішною, навіть якщо крадіжка зазнає невдачі. ПРИМІТКА: Якщо в будь-який момент гравцеві не вистачає кредитів для сплати всіх своїх хабарів за охорону, він негайно та "назавжди" втрачає стільки ймовірних бонусів, скільки кількість хабарів, за які не можна було заплатити,
- Відповідь "депозиту", якщо крадіжка досягне успіху, залишить гравця весь виграш на рахунку в банку, в якому він знаходиться. Кредити не будуть доступні для будь-яких цілей і не зараховуватимуться до рахунку гравця до його відкликання. Цей рахунок сплачуватиме відсотки за ставкою 0,14% за гру.
- Відповідь "зняти", якщо крадіжка досягне успіху, додасть до виграшів гравця весь вміст його рахунку в банку, в якому він знаходиться. У результаті обліковий запис буде нульовим. Зауважте, що ці додаткові виграші можуть бути викрадені подвійними кроссерами.
- Відповідь "подвійного хреста" виконає одну з двох речей:
- Якщо кількість спадкоємців, які грали у "подвійний хрест", становить щонайменше 1/10 (закруглено вниз) від загальної кількості нестрибних спадкоємців, які вирішили пройти через хейст (або саме один, якщо таких гравців менше 10 ), гравець отримає додатковий виграш, який дорівнює загальному виграшу всіх не-подвійних кроссеров, поділеному на кількість подвійних кроссеров (округлених вниз). Усі не-подвійні кроссери в цьому випадку отримують 0 балів від крадіжок. Іншими словами, подвійні кроссери викрадають кредити всіх інших і розподіляють їх рівномірно між собою.
- Якщо кількість спадкоємців, які зіграли «подвійний хрест», перевищує поріг, гравець не отримає виграш (якщо його крадіжка виявилася успішною), перерахуйте свою зарплату навпіл і звільняйте з роботи. (Див. "Зміна робочих місць".) Усі не-подвійні кросссери (включаючи кролячих) в цьому випадку отримуватимуть бонусну виплату від загального виграшу всіх подвійних кроссеров, поділених на загальну кількість не подвійних кроссеров. Іншими словами, змова стала надто великою, щоб зберігати таємницю, змовників було вигнано та виключано із пограбування, і кожен розділив свої ставки на покарання - а їхня репутація за брудні стосунки втратила і їх роботу.
- Відповідь «пальця» (як у «пальці щура подвійного схрещування»), якщо крадіжка вдасться, дасть гравцеві вісім можливостей (малюючи рівномірно із заміною з набору нестрибних накладників), щоб визначити подвійний кросссер, який ще не був ідентифікований .
- Кожен визначений таким чином подвійний кросссер повинен негайно виплатити 25% свого поточного кредитного фонду (округленому) замість того, що його знімають, втрачають роботу та знищують зарплату навпіл (бо начальник не потерпить поганої поведінки) , і втратити 5% своєї ймовірності перемоги в банку, що його вислуховують (як інші спадкоємці в майбутньому є надзвичайно підозрілими і, швидше за все, кинуть його під автобус, якщо все стане волохатим). Визначені таким чином подвійні кроссери не впливають на те, чи було подвійне схрещування успішним для інших подвійних кроссеров, але вони не отримують жодного з викрадених кредитів від подвійного кросу, і зазначені викрадені кредити будуть перерозподілені назад до не- подвійні кроссери.
- Якщо жодних подвійних кроссеров не буде визначено таким чином, сніг отримає стібки, щоб витратити час кожного - а також заплатить половину виграшу від поточного пограбування, зробіть 5% -ве скорочення на свою зарплату (бос скорочує годинник татлеттале) і програє 5% від його ставок у поточному банку (оскільки інші спадкоємці мають меншу ймовірність бути щедрими / справедливими зі своїм виграшем у майбутньому). Половина втраченого таким чином виграшу буде розподілена на незакріплені подвійні кроссери, якщо подвійні кроссери досягли успіху, або неподвійні кроссери (у тому числі і рабл), якщо подвійні кроссери не вдалися.
Банки
Банк вибирається за допомогою індексу numheisters + int(totalamountbet/100000)
, де число рахунків - це кількість гравців, які зробили позитивну частку в 1 раунді, а сукупний рахунок - сума ставок усіх цих гравців. Іншими словами, сто тисяч кредитів - це так само добре, як 1 додатковий хайстер. Виходячи з цього індексу, буде обраний один із наступних банків - банк із найвищим порогом, який відповідає або перевищує індекс:
Bank Index Threshold Victory Prob. Bet Odds
---- --------------- ------------- --------
0:Municipal 0 0.540 0.80
1:City 20 0.488 1.10
2:State 40 0.425 1.30
3:National 60 0.387 1.65
4:Federal Reserve 80 0.324 1.95
Зауважте, що по мірі продовження турніру ймовірність досягнення найвищого рівня в банку зростатиме, оскільки сума кожного гравця може робити ставку на тенденції вгору. Зауважте також, що це лише початкові шанси та ймовірності, перш ніж вони були змінені будь-якими діями "придбати інформацію" або "купити охоронець". З початковими ймовірностями та шансами лише міські та національні банки очікували виграш, що перевищує очікувані збитки.
Хреб
- Турнір також містить 500 інших гравців, які називаються "ребятами", які беруть участь у штатних матчах як звичайні гравці, але в кінці не забиваються. Вони служать для того, щоб зробити кожну гру різницею і дещо менш передбачуваною, і дають можливість дістатись до більш ризикованих / більш вигідних банків навіть лише з кількома "реальними" гравцями.
- У кожній грі буде включено деякий підмножина кролика для участі, вибраного рівномірно, по всіх підмножинах кроля.
- Усі кролики використовують таку стратегію:
- Випадково вибирайте ставки з імовірністю, рівною ймовірності досягти успіху в банку, який буде обраний на основі рішень гравців, які вже прийняли своє рішення в цьому раунді .
- Якщо ви робите ставку на ненульову суму, виберіть найбільшу з наступних сум, яка не перевищуватиме її поточні запаси: 69, 420, 6969, 80085.
- У другому раунді "відступають" з вірогідністю, що дорівнює 5% плюс 50% частки ставок, які вже відмовилися, інакше виграють як зазвичай. (Зауважте, що це означає, що перші гравці другого раунду, які відступають, можуть мати величезний каскадний ефект серед скачки - зверніть увагу і будьте готові до того, що крадіжка може розвалитися до того, як вона навіть почнеться.)
Входи та виходи
В обох раундах програмам буде надана така інформація, точно в такому порядку, як аргументи командного рядка . Якщо не вказано інше, усі значення є цілими числами, що не містять десяткових знаків.
- Поточний номер гри (індексований нулем)
- Кругле число поточної гри (1 або 2)
- Кількість гравців у поточній грі (у тому числі й рабл).
- Кількість гравців, які вже обійшли цю чергу.
- Кількість спадкоємців, які поки що зробили позитивну частку. (У другому раунді це фактично буде загальна кількість спадкоємців, які придбали в першому раунді.)
- Загальна кількість кредитів, вкладених до цього часу. (У другому турі, це буде на самому ділі загальна кількість кредитів , вкладених в першому турі - зокрема, НЕ включає в себе більше , ніж початкові колах «все в" heisters і робить включати коли «відступити» спадкоємці.)
- Кількість спадкоємців, які підтвердили у другому раунді (тобто не "відступили"). Це буде нульовим протягом першого раунду.
- (Нульовий індекс) номер банку, який слід вислуховувати (під час першого раунду, банк, який би вислухався, як ніхто інший не став ставити)
- Кількість кредитів, доступних на даний момент гравцю.
- Кількість кредитів, які гравцеві зробили ставку в першому раунді. (У першому турі це завжди нуль.)
- Кількість кредитів, які гравець отримає на свою зарплату в кінці кожної гри.
- 1 якщо гравець отримує нарахування зарплати, 0 якщо гравець безробітний
- Ранг гравця в таблиці лідерів (не враховуючи рабл) станом на кінець попередньої гри, 1-індексований. (Визначається як 1 + кількість гравців із строго більшою кількістю кредитів на той час. Наприклад, під час першої гри всі гравці мають ранг 1.)
- Середня кількість кредитів у всіх гравців (не враховуючи обмежених) (представлена у вигляді десяткового числа)
- Середнє абсолютне відхилення в кількості кредитів, що утримуються усіма гравцями (не враховуючи обмеженого рівня) (представлене у вигляді десяткового числа)
- Максимальна кількість кредитів, які має будь-який гравець (тобто кількість кредитів, які має гравець 1-го рангу, не враховуючи обмеженого рівня)
- Кількість кредитів, які гравець зберігав на рахунку 0 банку
- Рахунок у банку 1
- Рахунок у банку 2
- Банківський рахунок 3
- Рахунок банку 4
- Індивідуальна ймовірність перемоги гравця у банку 0
- Імовірність банку 1
- Банк 2 ймовірність
- Банк 3 ймовірності
- Банк 4 ймовірності
- Індивідуальна виплата гравця формується на успішну виграшну суму в банку 0
- Банк 1 шанси
- Банк 2 шанси
- Банк 3 шанси
- Банк 4 шанси
У першому раунді гри програма гравця повинна надрукувати, щоб виділити ціле число від 0 до загальної кількості кредитів на рахунку цього гравця. Будь-яка сума, що перевищує наявний кредитний баланс, вважається максимальною ставкою. Будь-який інший результат (або умова помилки) буде інтерпретуватися як нульова ставка.
У другому раунді гри програма гравця повинна надрукувати, щоб закреслити рядок, як описано в розділі "Другий раунд ставок" вище. Умовою помилки тут вважається дія за замовчуванням: пройдіться по крадіжці як звичайне.
Контролер
Турнір буде проходити за допомогою цього контролера . Приклади ботів також є. Досі тестується. Більше коду в майбутньому. Сміливо надсилайте виправлення помилок (на github). Буде оновлено, якщо якісь правила також зміняться.
Щоб запустити один турнір на власній машині, додайте рядок до rival.txt та використовуйте:
python bankheist.py 1000
Правила конкурсу
- Гравці можуть подавати будь-яку кількість програм програвача будь-якою вільно доступною мовою, програми якої можуть отримувати аргументи командного рядка.
- Подання повинні містити досить чіткі інструкції щодо компіляції програм та їх запуску на моєму ПК, включаючи назви необхідних інструментів та точні команди, які потрібно видавати. Подання повинно включати щонайменше одну команду, яка виконує програму, і, можливо, безпосередньо до неї додаються аргументи командного рядка.
- Подання також повинні мати унікальне ім’я для їх ідентифікації (яке не містить пробілів).
- Програми повинні працювати за досить короткий час. (Я не встановлюю верхню межу того, що є розумним. Швидше, я просто проконсультую творця будь-який запис, який, здається, має неабиякий час виконання, щоб прискорити його.)
- Програми можуть не читати чи записувати у файли. Вони також не можуть використовувати будь-який інший спосіб зберігання інформації між прогонами. Суть цього виклику полягає у прийнятті складних рішень на основі обмеженої / узагальненої інформації.
- Будь-які та всі ці правила можуть бути змінені у будь-який час за потреби. Повідомлення буде додане вгорі цієї публікації із зазначенням будь-яких таких змін.
- Цей конкурс закінчується не раніше ніж через тиждень після того, як останній користувач подає повідомлення про своє перше подання . Зміни існуючих робіт дозволені в будь-який час до завершення конкурсу. Я зроблю все можливе, щоб поточний термін був оновлений у повідомленні у верхній частині цього повідомлення.
- Цей конкурс закінчується не раніше ніж через тиждень після останнього зміни правил, якщо такі були. Я докладу всіх зусиль, щоб залишити коментарі для будь-яких користувачів, яких впливає будь-яка зміна правил.
- Ви краще зробите ставку, що я сам буду брати участь у цьому конкурсі. ;)