Тест-водитель • Обсуждение задачи • Отправить Авантюрист
Несколько конкурирующих искателей приключений совершают набеги на руины за сокровищами, но они могут нести только столько за раз и имеют свои пределы выносливости. Они хотят получить самое ценное сокровище и уйти, прежде чем они станут слишком уставшими, чтобы продолжать. Они пытаются стать настолько богатыми, насколько это возможно от их грабежей махинаций.
Игровой процесс
Каждый искатель приключений начинается в первой комнате подземелья с 1000 очками выносливости и 50 кг места в рюкзаке.
Игра работает пошагово, все игроки решают свои ходы одновременно. Каждый ход вы можете выполнить одно из следующих действий:
- Перейдите в следующую комнату.
- Переместитесь в предыдущую комнату.
- Ставка выносливость, чтобы взять сокровище.
- Бросай сокровище.
Перемещение между комнатами требует 10 выносливости, плюс 1 на каждые 5 кг в вашем рюкзаке с округлением. Например, авантюрист, несущий 3 кг сокровищ, требует 11 выносливости, а одному, несущему 47 кг, - 20 выносливости.
Для выпадения сокровищ требуется 1 выносливость, независимо от выпавшего сокровища.
После выхода из руин игрок больше не будет делать ходов.
Если игрок не может выполнить какое-либо из этих действий (из-за нехватки выносливости или отсутствия сокровищ), его искатель приключений умирает от истощения, проливая свое удерживаемое сокровище в занятую комнату. Точно так же, если игрок попытается сделать недопустимое действие, его искатель приключений будет убит ловушкой, что приведет к тому же утечке сокровищ.
торги
Минимальная ставка для сокровища составляет 1 выносливость на 1 кг, который весит сокровище. Вы также можете предложить дополнительные очки выносливости, чтобы с большей вероятностью получить сокровище. Выносимая ставка принимается независимо от результата.
В случае, если несколько игроков предложили взять одно и то же сокровище, игрок, предложивший самую высокую ставку, получает сокровище. Если более чем один игрок сделал самую высокую ставку, ни один из них не получит сокровище.
Условие выигрыша
Игрок с наибольшей общей стоимостью сокровищ является победителем. В маловероятном случае галстука, галстуки переходят к наименьшему общему весу, затем к наименьшему количеству сокровищ, затем к стоимости самого ценного сокровища, второго самого ценного, третьего ... до тех пор, пока связь не будет разорвана. В почти невозможном случае, когда в этой точке все еще есть ничья, тест-водитель говорит: «Винт это», и, таким образом, победитель определяется произвольно.
В контексте турнира игроки будут ранжироваться с первым местом, получающим 10 очков, вторым местом с 9 очками, третьим местом с 8 очками и т. Д., С мертвыми игроками и искателями приключений без сокровищ, набравшими 0 очков.
О руинах
- Каждый номер первоначально содержит между исокровищ. (Гденомер комнаты)
- Есть произвольно много комнат, ограниченных только выносливостью искателей приключений и готовностью исследовать.
- Каждое сокровище будет иметь денежную оценку (в целом $) и вес (в целом кг).
- Сокровища, как правило, становятся более ценными и многочисленными, когда вы углубляетесь в руины.
- Конкретные формулы для создания сокровищ следующие: (с использованием обозначения для бросков костей)
- Вес генерируется первым по формуле (минимум 1)
- Затем ценность сокровища генерируется с помощью (где - номер комнаты, а - вес)
Информация, видимая игрокам
На каждом ходу игроки получают следующую информацию:
- Номер комнаты, в которой они находятся. Это 1-индексированный, так что концептуально выход находится в «комнате 0»
- Список сокровищ в настоящее время в комнате
- Список других игроков, которые также в настоящее время находятся в комнате.
- Ваш текущий инвентарь сокровищ
- Ваш текущий уровень выносливости
кодирование
Тестовый драйвер можно найти здесь .
Вы должны реализовать подкласс этого Adventurer
класса:
class Adventurer:
def __init__(self, name, random):
self.name = name
self.random = random
def get_action(self, state):
raise NotImplementedError()
def enter_ruins(self):
pass
Вам нужно только переопределить get_action
метод. enter_ruins
запускается до начала игры, и это ваш шанс подготовить все, что вы хотите подготовить к игре. Вам не нужно переопределять __init__
, и вы действительно не должны . Если ваш __init__
сбой, вы будете дисквалифицированы.
get_action
получает один аргумент a namedtuple
со следующими полями (в этом порядке, если вы предпочитаете деструктуризацию):
room
: номер комнаты, в которой вы сейчас находитесьtreasures
: список сокровищ в комнатеplayers
: список других игроков в комнате. Вы получаете только имя игрока таким образом, поэтому вы не знаете, какой бот контролирует его или его инвентарь / выносливость.inventory
: список сокровищ в вашем рюкзакеstamina
: ваш текущий уровень выносливости
Этот объект дополнительно предоставляет два служебных свойства:
carry_weight
: общий вес всех сокровищ, которые вы несетеtotal_value
: общая стоимость всех сокровищ, которые вы несете
В treasures
и inventory
списки содержат namedtuple
S с этими атрибутами:
name
: название сокровища (для косметических целей)value
: денежная стоимость сокровища в $.weight
: вес сокровища в кг
get_action
должен вернуть одно из следующих значений / шаблонов:
'next'
или'previous'
перейти в следующую / предыдущую комнату'take', <treasure index>, <bid>
(да, как кортеж, хотя любая последовательность будет работать и технически), чтобы сделать ставку на сокровище по указанному индексу в списке сокровищ комнаты. Оба аргумента должны быть целыми числами. Поплавки будут округлены вниз.'drop', <inventory index>
сбросить с собой найденное сокровище, найденное по указанному индексу. Индекс должен (естественно) быть целым числом.
Другие ограничения
- Вы можете использовать случайный экземпляр, предоставленный вам во время инициализации, только для псевдослучайности.
- Все остальное, что может привести к поведенческому недетерминизму, не допускается. Намерение здесь состоит в том, чтобы заставить ботов вести себя одинаково, когда им дают одинаковое начальное число, чтобы помочь в тестировании новых ботов (и, возможно, ошибок в тестовом драйвере). Только космическое излучение должно вызывать любое отклонение / недетерминизм.
- Имейте в виду, что хэш-коды рандомизированы в Python 3, поэтому использование
hash
для принятия любого решения не допускается.dict
Это нормально даже при использовании порядка итераций для решений, поскольку порядок гарантированно согласован с Python 3.6.
- Вы не можете обойти тестовый драйвер с помощью
ctypes
хаков илиinspect
стека вуду (или любого другого метода). Есть несколько поразительно страшных вещей, которые вы можете сделать с этими модулями. Пожалуйста, не надо.- Каждый бот достаточно хорошо изолирован в песочнице с помощью защитных копий и естественной неизменности
namedtuple
s, но есть некоторые неуязвимые лазейки / эксплойты. - Другие функциональные возможности
inspect
иctypes
могут использоваться, если ни один из них не используется для обхода функциональности контроллера. - Любой метод захвата экземпляров других ботов в вашей текущей игре не допускается.
- Каждый бот достаточно хорошо изолирован в песочнице с помощью защитных копий и естественной неизменности
- Боты должны работать в одиночку и не могут никоим образом координировать свои действия с любыми другими ботами. Это включает в себя создание двух ботов с разными целями, так что один жертвует собой ради успеха другого. Если у вас более 10 соперников, вам не гарантируется наличие двух ботов в одной и той же игре, а имена авантюристов не дают никаких указаний на класс ботов, поэтому эти типы стратегий в любом случае ограничены.
- В настоящее время нет жестких ограничений по времени выполнения, однако я оставляю за собой право жестко ограничить его в будущем, если турниры начнутся слишком долго. Будьте разумны и старайтесь обрабатывать ходы менее 100 мс , так как я не ожидаю необходимости ограничивать его ниже этого порога. (Турниры начнутся примерно через 2 часа, если на всех ботов потребуется около 100 мс за ход.)
- Ваш класс ботов должен быть назван однозначно среди всех представленных.
- Вы можете не помнить ничего между играми. (Тем не менее, вы можете помнить вещи между поворотами )
- Не редактируйте sys.modules. Все, что находится за пределами переменных экземпляра, должно рассматриваться как константа.
- Вы не можете изменять код любого бота программно, включая ваш собственный.
- Это включает в себя удаление и восстановление вашего кода. Это должно сделать отладку и турниры более упорядоченными.
- Любой код, вызывающий сбой контроллера, будет немедленно дисквалифицирован. В то время как большинство исключений будут обнаружены, некоторые могут проскользнуть, а ошибки могут быть не обнаружены. (Да, вы можете segfault в Python благодаря
ctypes
)
Материалы
Чтобы упростить проверку ответов, укажите имя вашего бота в верхней части ответа с помощью символа a #Header1
и убедитесь, что ваш ответ содержит хотя бы один кодовый блок (будет использоваться только первый в вашем ответе). Вам не нужно включать какие-либо строки импорта или документации, так как они будут добавлены шабером автоматически.
Я буду более склонен давать ответы с подробными и понятными объяснениями. Другие, вероятно, будут вести себя так же.
Грубо говоря, ваш ответ должен быть отформатирован примерно так:
# Name of Bot
Optional blurb
#imports go here
class BotName(Adventurer):
#implementation
Explanation of bot algorithm, credits, etc...
(отображается как)
Имя бота
Опциональная реклама
#imports go here class BotName(Adventurer): #implementation
Объяснение алгоритма бота, кредиты и т.д ...
Запуск тестового драйвера локально
Вам понадобится Python 3.7+, и я рекомендую вам также установить его tabulate
через pip. Соскреб этой страницы для представления дополнительно требует lxml
и requests
. Вам также следует использовать терминал с поддержкой цветовых переходов ANSI для достижения наилучших результатов. Информацию о том, как настроить это в Windows 10, можно найти здесь .
Добавьте своего бота в файл в подкаталоге того же каталога, что и ruins.py
( ruins_bots
по умолчанию), и обязательно добавьте from __main__ import Adventurer
его в начало модуля. Это добавляется к модулям, когда скребок загружает вашу заявку, и, хотя он определенно хакерский, это самый простой способ убедиться, что у вашего бота правильно есть доступ Adventurer
.
Все боты в этом каталоге будут загружаться динамически во время выполнения, поэтому дальнейших изменений не требуется.
Турнир
Окончательный победитель будет определен в серии игр, в каждой из которых будет по 10 ботов. Если общее количество отправленных сообщений превышает 10, лучшие 10 ботов будут определяться путем систематического разделения их на группы по 10 человек, пока каждый бот не сыграет (ровно) 20 игр. Лучшие 10 ботов будут выбраны из этой группы со счетом сброса и будут играть в игры до тех пор, пока бот, занявший первое место, не достигнет 50 баллов по сравнению со ботом, занявшим второе место, или пока не будет сыграно 500 игр.
Пока не будет получено как минимум 10 заявок, пустые слоты будут заполнены «Пьяницами», которые случайным образом бродят по руинам и берут (и иногда отбрасывают) случайные сокровища, пока у них не кончится выносливость, и они должны быть на пути к выходу.
Турниры будут повторно проводиться еженедельно, если появятся новые заявки. Это открытый вызов KOTH без установленной даты окончания.
Leaderboard
С пробега 4 мая 2019 года в 16:25. MDT: (2019-05-04 4:25 -6: 00)
Seed: K48XMESC
Bot Class | Score | Mean Score
--------------+---------+--------------
BountyHunter | 898 | 7.301
Scoundrel | 847 | 6.886
Accountant | 773 | 6.285
Ponderer | 730 | 5.935
Artyventurer | 707 | 5.748
PlanAhead | 698 | 5.675
Sprinter | 683 | 5.553
Accomodator | 661 | 5.374
Memorizer | 459 | 3.732
Backwards | 296 | 2.407
Обновление - 15 апреля: пара обновлений правил / разъяснений
Обновление - 17 апреля: запрет на несколько заметных крайних случаев гнусных действий, таких как изменение кода других ботов.
Обновление - 4 мая: награда, присуждаемая Sleafar за полное уничтожение Backwards. Поздравляем!
источник
pip
установили и включилиPATH
(что по умолчанию для более новых установок AFAIK), то из окон вы можете запуститьpip install modulename
в командной строке. Для других обстоятельств (о которых я не знаю), перейдите в pip , найдите нужный модуль и выберите опцию.Ответы:
бухгалтер
Бухгалтер очень склонен к риску. Ему нравится быть уверенным, что то, что он делает, является лучшим вариантом в данной ситуации. Таким образом, он ставит перед собой цель и только когда собирает сокровища, если его расчеты показывают, что это ставит его на правильный путь к этой цели. Однако он очень бюрократичен и не любит бросать вещи, которые он уже решил, что хотел; любые попытки научить его делать это привели к тому, что бухгалтер бросил предмет, а затем сразу же поднял его.
Возможно продолжение следует.
источник
Accomodator
Основано на моем другом боте LightWeight. Где Lightweight бот был прост, этот бот является гораздо более сложным для того , чтобы размещать до взаимодействия с другими ботами: как доброкачественный , так и deliberatly разрушительного.
Этот бот сначала побежит в случайно назначенную комнату, а затем попытается сделать ставку на лучшее сокровище в соотношении цена / вес. Если в комнате есть другие игроки, тогда предположим, что они также сделают ставку, поэтому вместо этого сделайте ставку на второе лучшее сокровище. Если эта ставка не удалась, то на следующем ходу ставка на следующее лучшее сокровище.
Как только ставка была успешной, повторяйте ставку для лучшего / второго лучшего, пока в комнате больше не будет сокровищ, а затем двигайтесь глубже в руины.
Для каждой комнаты входите в повторные торги за лучший / второй луч, пока в комнате больше не будет сокровищ, затем углубитесь в руины или если мы обнаружим, что мы не можем идти глубже, то перейдем в состояние «Выход» и начнем отбрасывать худшее. сокровище, пока мы не сможем гарантировать, что мы можем выйти из руин живыми.
Когда мы находимся в состоянии выхода, мы проверим, можем ли мы добавить 1 кг сокровища и все еще сделать его живым, если это так, тогда мы попытаемся сделать ставку на 1 кг сокровища, если нет, то мы отправимся в предыдущую комнату.
Его производительность довольно разнообразна ... однако, как правило, будет одним из трех лучших ботов.
источник
спринтер
Подобно Дайверу, Спринтер углубляется и подбирает лучшие предметы на своем пути назад.
Спринтер углубляется, затем вычисляет счет для каждого сокровища и подбирает что-либо выше определенного порога. Этот порог зависит от комнаты, в которой он находится в данный момент, потому что стоит брать предметы из комнат, расположенных глубже в руинах.
У меня все еще есть 2 оптимизма относительно "борьбы за сокровище", которые запланированы на следующие дни.
17.04 .: Негодяй стал слишком умным, Sprinter решил загнать его в ловушку. Сначала я хотел убить любого бота, который пытался вызвать Sprinter, но тест-драйвер, к сожалению, не обрабатывает исключения, которые происходят в init. Так что следующее исправление для негодяя довольно просто ...
источник
План впереди
В ответе Артемиды Фаул я использовал подсчет лучших / худших расчетов , но логика выбора полностью принадлежит мне и с тех пор была изменена, чтобы включить в нее несколько дополнительных факторов, таких как сокровища, которые можно было увидеть в более ранних комнатах (чтобы свести к минимуму собирание сокровище, только чтобы отследить, бросить и взять что-то еще).
Бот рискует настолько глубоко, насколько это кажется разумно безопасным для этого (этот расчет эффективно работает для погружения на определенную глубину, но обладает гибкостью обработки других начальных значений выносливости), собирает артефакты (отдавая приоритет высокой стоимости и низкому весу), затем начинает отступать, как только определяет, что больше не может нести.
На выходе он соберет любые дополнительные сокровища, которые он видит, что он может все еще безопасно нести к выходу. Он даже отбросит уже имеющиеся артефакты, если новый будет более выгодным и не приведет к истощению. Если у него есть место в рюкзаке, он поднимет новое сокровище, прежде чем бросить менее качественное, минимизируя борьбу с другими ботами.
источник
__init__
функция уже реализована, вам не нужно ее переопределять.Artyventurer
Бьет Пьяниц примерно на 1000 долларов! Не могу придумать креативное имя, но вот вы все:
Иногда большая часть кода здесь никогда ничего не делает (по крайней мере, когда я тестирую его на Drunkards), программа просто (пытается) найти лучший ход, включая обработку для ситуаций, в которые она пытается не попасть. Некоторые из них никогда не запускаются, они просто есть, поэтому я могу поиграть с числами, которые, вероятно, еще можно улучшить.
объяснение
if state.inventory ... worsti = None
Найдите «худший» предмет в инвентаре, то есть предмет, который имеет самое низкое соотношение стоимости и веса. Он хранит
worsti
, который содержит его индекс, его стоимость и вес, как кортеж, илиNone
если в инвентаре нет предметов.if self.drop ... return 'drop', worsti[0]
Если я велел ему бросить этот ход в последний ход (см. Ниже), и он может отбросить «худший» предмет, как рассчитано выше.
extra = ... * state.room
Подсчитайте, сколько у него осталось бы выносливости, если бы я сказал, чтобы он вернулся прямо сейчас.
if extra > CONTINUE_IN:\ return 'next'
Если это больше, чем CONTINUE_IN, вернитесь
'next'
.if extra < 0 and worsti:\ return 'drop', worsti[0]
Если это меньше
0
, отбросьте худший предмет.if extra < state.room:\ return 'previous'
Если он меньше номера комнаты (не может нести больше сокровищ), вернитесь назад.
if state.treasures: ... bestt = None
Найдите лучшее сокровище, которое нужно взять, как и в худшем предмете из описанного выше. Сохраните это в
bestt
.if extra > 0 and bestt: ... return 'take', bestt[0], bid
С текущими числами это выполняется всякий раз, когда мы зашли так далеко, и есть доступное сокровище. Если безопасно взять «лучшее» сокровище, значит, так оно и есть. Это минимальная ставка, или еще одна, если кто-то присутствует.
if bestt and worsti: ... return 'take', bestt[0], bid
С текущими числами этот блок кода никогда не будет выполнен, потому что предыдущий блок кода имеет более широкое условие. Это выполняется, если мы зашли так далеко, и в моем инвентаре и комнате есть и сокровища. Если «лучшее» сокровище в комнате более ценно, чем «худшее» сокровище в моем инвентаре, и было бы безопасно поменять их местами в течение следующих двух ходов, это так и есть.
return 'previous'
Если ничего из этого не произошло, просто вернитесь.
Обновление 16/04/19:
Противозаконные меры. Это станет войной торгов :(
Дальнейшее обновление 16/04/19:
Отменено предыдущее, вместо этого случайным образом переключается каждый второй элемент при поиске лучшего, например.
[1, 2, 3, 4, 5, 6] → [2, 1, 3, 4, 6, 5]
, Должно быть сложнее копировать :).Обновление 17/04/19:
Отменено предыдущее, вместо этого он стирает свой собственный исходный код . Это делает то,
__init__
что всегда будет раньшеScoundrel.enter_ruins
, и поэтому не позволит Scoundrel загружать его. Он заменяет свой код приget_action
первом вызове, так что он будет готов к следующему разу. ИСПРАВЛЕНО, негодяй теперь умирает по прибытии.Дальнейшее обновление 17/04/19:
Отменено предыдущее, вместо этого он заменяет свою
sys.modules
запись математическим модулем, поэтому, когда Scoundrel пытается загрузить его, он загружает математический модуль. :)Кроме того, я только что понял, что выносливость хода была 10 + вес / 5 , поэтому попытался это исправить.
Дальнейшее обновление 17/04/19:
Теперь включает чеснок из обоих предыдущих обновлений.
Обновление 18/04/19:
Поигравшись с цифрами и расчетами, теперь получаю от 2000 до 3000 долларов.
Дальнейшее обновление 18/04/19:
Удален файл-чеснок, как он был забанен, добавлен новый чеснок, который гарантирует, что
'draco'
он не отвечает за его работу, если он просто возвращаетсяprevious
в свой первый ход. Результатом стало загадочное погружение до 1200-1800 долларов, которое я изучаю.источник
Негодяй
Подлец в первую очередь работает, чтобы мешать другим участникам. В настоящее время он мешает Sprinter, Artyventurer и Accountant (этот список со временем будет расти при условии, что он отвечает интересам негодяя). Он делает это, имитируя других ботов, а затем либо переигрывая, либо урезая, либо иным образом сражаясь за реликвии. Таким образом, маловероятно, что эта запись когда-либо будет доминировать в таблице лидеров и вместо этого будет действовать как побуждающая сила. Текущая редакция на момент публикации публикует 2-е место со средней оценкой около 7.
Негодяй мешает попыткам других ботов изменить себя, чтобы защитить себя от негодяя, непосредственно выполняя код других участников как неотличимую копию клона. Проблемы с импортом, приводившие к дублированию участников, были решены путем создания клонов с помощью Reflection (редактирование войн, связанных с мелкими деталями математического определения, нежелательно с точки зрения обмена стека, но приведет к тому же результату). Проблемы KOTH также имеют историю, позволяющую это делать.
Негодяй заменяет Teamsters, чтобы сохранить Teamsters ради того, чтобы быть интересным. После этого редактирования, команды больше не должны очищаться контроллером.
Обновление от 17.04.2009: дальнейшие встречные меры.
Команды (признаны незаконными)
Но не стесняйтесь бежать на месте, где не более 8 других участников!
Эта запись (в то время как теперь явно недействительна), на самом деле, два бота, и контроллер будет счастливо очистит их обоих и добавит их в список участников (потому что ура, Python?)
Фаза 1:
1. Если на полу нет сокровища весом менее 3, он опускается вниз
2. Так как он гарантированно будет последним искателем приключений, вернувшимся на поверхность, все, что ему нужно сделать, - это найти кого-нибудь.
Фаза 2:
Название сокровищ действительно пригодилось для того, чтобы помочь логике не загружаться на мусор на 25 этаже и уходить рано, поскольку между двумя ботами не было возможности общаться (а TeamsterA всегда оказывался в комнате с кем-то еще раньше). TeamsterB вернулся).
Следующий логический вывод: создание армии
Теоретически это можно использовать для определения глубины и приобретения сокровищ из комнаты 98, однако, поскольку для этого потребуется более 2-х ботов, логика, составляющая этих ботов, будет становиться все более сложной, и, как я уверен, это незаконное представление за нарушение неписаного правила, поэтому я не собираюсь беспокоиться.
Эффективно
A
ждет в 30,B
ждет в 50 ...n
ныряет до 98, подбирает сокровище, перемещается в 97, бросает его (а затем умирает),n-1
поднимает его и перемещается в 96 ...C
бросает его (умирает),B
выбирает его вверх и движется до 30, падает (умирает),A
поднимает его и возвращается к выходу.Я считаю, что это займет 11 ботов.
Однако делать это не стоит, если вы не сможете восстановить около 4 сокровищ с этой глубины, чтобы конкурировать с такими записями, как PlanAhead или Artyventure, из-за масштаба между затратами на выносливость и средней стоимостью сокровищ.
Пример результатов
Редко оценивается в 4000 долларов, иногда достигает 6000 долларов.
источник
задом
Потому что он работает наоборот
Почему это называется Назад?
Потому что я взял «Бухгалтера» и попытался заставить его выполнить свою логику так, чтобы он мог глубоко погрузиться, а затем забрать предпочитаемую добычу на выходе (в обратном направлении от бухгалтера).
В конце концов, он по-прежнему собирает большую часть своих призов (собирая их до того, как это делают традиционные искатели при сборе, действуя задом наперед ко всем остальным), но это гораздо более избирательно. выбирает, какие из них он берет, хотя все еще собирает вещи на обратном пути.
Конечным результатом является то, что выносливость сохраняется на пути, в то же время отдавая приоритет ценным сокровищам, а затем пользуясь преимуществом глубокого поворота вокруг и легкого выбора на пути назад. Известно, что задом наперед собирать сокровища из комнаты 41 (и во время разработки входил, а затем сразу уходил, комната 42).
источник
Охотник за головами
Простой метод - лучший. Хватайте ценные и легкие сокровища, проходя как можно глубже. Возьмите менее ценные сокровища на обратном пути.
источник
облегченный
Простой бот, который все еще работает довольно хорошо.
Выйдя в руины (в настоящее время 21 комната), он возьмет лучшее сокровище в комнате, которое составляет всего 1 кг (отсюда и название бота) и является более ценным, чем наименее ценное сокровище в инвентаре. Если инвентарь полон, бросьте наименее ценное сокровище. Если никакое другое действие не выбрано, двигайтесь в руины. Если мы находимся на пределе нашей выносливости, чтобы быть в состоянии выйти живым, то отправляйтесь к выходу
источник
dumping
вenter_ruins
метод. Это будет на самом деле помнить это между играми и не будет работать в игре 2. Технически не допускается, но я добавил правило только сейчас (я забыл это раньше, но это было мое намерение), поэтому я немного ослаблю. : PMemorizer
Я могу отправить ботов в свой собственный KotH, верно?
Этот бот погружается в комнату 30 и запоминает все сокровища, которые он видел. В этот момент он начинает свой путь обратно ко входу, пытаясь взять хорошие сокровища, которые он помнил, видя в более ранних комнатах.
Я надеялся, что это будет лучше. Возможные улучшения могут быть достигнуты благодаря лучшему планированию и большей динамичности в отношении того, в какую комнату он прекращает погружаться, и большей готовности изучать варианты резервного копирования.
Обновление: теперь собирает сокровища весом 1 кг на сумму $ 60 или больше.
источник
[Turn 072] Ryu Ridley (Memorizer) collapsed in the doorway to room #1 and died of exhaustion
Задумавшийся
Я думаю, что он очень похож на Memorizer в том, что он использует знания посещенных комнат, чтобы выбрать, какие комнаты и сокровища собирать на обратном пути к выходу, однако он был получен независимо.
Этот бот бегает до случайной глубокой комнаты, в которой хранятся записи о найденных на этом пути сокровищах. Оказавшись в целевой комнате, он обдумает идеальный выбор сокровищ, чтобы вернуться к выходу. Каждый ход он будет обдумывать снова, чтобы определить наиболее вероятный лучший выбор сокровищ, чтобы взять.
В настоящее время существует простой алгоритм (обратная степень номера комнаты), который выдает предполагаемое количество сокровищ, которые были взяты (или будут взяты при посещении этого бота) для каждой комнаты, и поэтому эти сокровища игнорируются при размышлении о том, какие сокровища / комнаты взять из. У меня есть идеи для других более продвинутых алгоритмов, чтобы смоделировать, какие сокровища остаются. Но мне придется посмотреть, стоит ли это того.
источник
накопитель
Hoarder остается в комнате, пока не заберет все сокровища в комнате (или не подсчитает, что ему не хватает выносливости, чтобы продолжать брать / двигаться дальше). Когда все сокровища исчезнут, если бот сможет безопасно двигаться дальше, он продолжит процесс получения всех сокровищ.
источник
Backwards
«s»,Sprinter
«s» иMemorizer
«s»; потому что они знают, каковы относительные ценности каждого сокровища, которое они видят.водолаз
(Не могу проверить в данный момент, поэтому дайте мне знать, если это не работает.)
Лучшее сокровище глубже в руинах, так что ныряйте глубже, а затем возьмите все, что можем, на выходе.
источник
diving
определено?Jacob the Orphan (Diver) was sliced in half by a swinging blade trap.
Не уверен, что вы сделали не так, но это означает «недействительный возврат» AFAIK.