В этом задании вы сыграете дилемму зашумленного итератора.
В Дилемма Заключенного это сценарий в теории игр , где есть два игрока, каждый с двумя вариантами: сотрудничать или дефект. Каждый игрок делает лучше для себя, если он уходит, чем если бы он сотрудничал, но оба игрока предпочли бы результат, в котором оба игрока сотрудничали, чем тот, где оба игрока дефектовали.
Дилемма повторного заключенного - та же самая игра, за исключением того, что вы неоднократно играете с одним и тем же противником, и вы знаете, что играл ваш противник в прошлом. Ваша цель всегда состоит в том, чтобы набрать для себя наибольшее количество очков, независимо от того, как это делает ваш противник.
Шумная повторяющаяся дилемма заключенного вносит некоторый шум в общение. В ваших знаниях о том, что ваш оппонент играл в прошлом, появится немного шума. Вы также будете знать, какие движения вы сделали в прошлом. Уровень шума постоянен в течение раунда против одного и того же противника, но отличается в разных раундах.
Вызов
В этом задании вы напишите программу на Python 3, которая сыграет дилемму зашумленного итератора.
Ваша программа получит три входа:
Ваши собственные ходы, без применения случайных сальто.
Ходы вашего оппонента с применением случайных сальто.
Переменная состояния, которая начинается как пустой список каждый раунд, и которую вы можете изменить, если хотите. Вы можете игнорировать это, если не хотите его использовать.
Ваша программа должна выводить данные 'c'
для взаимодействия или 'd'
дефекта.
Например, вот программа, которая взаимодействует, если противник сотрудничал, по крайней мере, 60% времени в прошлом, после применения случайных бросков и для первых 10 бросков:
def threshold(my_plays, their_flipped_plays, state):
if len(their_flipped_plays) < 10:
return 'c'
opp_c_freq = their_flipped_plays.count('c')/len(their_flipped_plays)
if opp_c_freq > 0.6:
return 'c'
else:
return 'd'
Если вы не знаете Python, напишите свое представление в псевдокоде, и кто-то (я или другой участник сайта) может создать соответствующую программу Python.
Игровой процесс
Бегун турнира можно найти здесь: шумная игра . Беги, noisy-game.py
чтобы запустить турнир. Я буду держать этот репозиторий обновленным с новыми представлениями. Примеры программ можно найти в basic.py
.
Общий балл программы - это сумма баллов за 100 игр в игре.
Игра состоит из круговых матчей каждого игрока против каждого игрока, включая его самого. Матч состоит из 100 раундов. Раунд состоит из 300 ходов, каждый из которых включает в себя вывод 'c'
или'd'
.
Ваша заявка будет играть матч против каждой подачи, включая вашу собственную. Каждый матч будет состоять из 100 раундов. Во время каждого раунда вероятность переворота будет выбираться равномерно случайным образом [0, 0.5]
.
Каждый раунд будет состоять из 300 ходов. На каждом ходу обе программы будут получать все предыдущие попытки воспроизведения, которые они предприняли, и все предыдущие воспроизведения, сделанные другой программой, после применения переворотов, и переменную состояния, которая является изменяемым списком, который программа может изменить, если она хочет. Программы выведут свои ходы.
Ход оценивается следующим образом: если программа играет 'c'
, противоборствующая программа получает 2 балла. Если программа играет 'd'
, эта программа получает 1 балл.
Затем каждый ход переворачивается независимо с вероятностью, равной вероятности переворачивания, и сохраняется для показа противнику.
После того, как все раунды были сыграны, мы суммируем количество очков, которое каждый игрок получил в каждом матче. Затем мы используем следующую систему подсчета очков для подсчета очков каждого игрока в игре. Эта оценка выполняется после завершения всех матчей.
счет
Мы будем использовать эволюционную оценку. Каждая программа начинается с одинакового веса. Затем веса обновляются следующим образом для 100 итераций с использованием итоговых очков в игре:
Новый вес каждой программы пропорционален произведению ее предыдущего веса и его среднего общего балла, взвешенного по весам ее противников.
Применяется 100 таких обновлений, и итоговые веса являются баллами каждой программы за этот запуск игры.
Общая сумма очков будет суммой за 100 прогонов игры.
Все игроки получат правильные ответы на этот вызов, а также шесть основных программ, которые помогут нам начать.
Предостережения
Не модифицируйте входы. Не пытайтесь повлиять на выполнение любой другой программы, кроме как через сотрудничество или дефекты. Не делайте жертвенного представления, которое пытается распознать другое представление и принесет пользу этому противнику за свой счет. Стандартные лазейки запрещены.
РЕДАКТИРОВАТЬ: Представления не могут точно дублировать какие-либо из основных программ или любой более ранней подачи.
Если у вас есть вопросы, не стесняйтесь спросить.
Текущие результаты
nicht_genug: 40.6311
stealer: 37.1416
enough: 14.4443
wait_for_50: 6.947
threshold: 0.406784
buckets: 0.202875
change_of_heart: 0.0996783
exploit_threshold: 0.0670485
kickback: 0.0313357
tit_for_stat: 0.0141368
decaying_memory: 0.00907645
tit_for_whoops: 0.00211803
slider: 0.00167053
trickster: 0.000654875
sounder: 0.000427348
tit_for_tat: 9.12471e-05
stubborn_stumbler: 6.92879e-05
tit_for_time: 2.82541e-05
jedi2sith: 2.0768e-05
cooperate: 1.86291e-05
everyThree: 1.04843e-05
somewhat_naive: 4.46701e-06
just_noise: 1.41564e-06
growing_distrust: 5.32521e-08
goldfish: 4.28982e-09
vengeful: 2.74267e-09
defect: 3.71295e-10
alternate: 2.09372e-20
random_player: 6.74361e-21
Результаты только с ответами на этот вопрос и основные программы, которые игнорируют игру противника:
nicht_genug: 39.3907
stealer: 33.7864
enough: 20.9032
wait_for_50: 5.60007
buckets: 0.174457
kickback: 0.0686975
change_of_heart: 0.027396
tit_for_stat: 0.024522
decaying_memory: 0.0193272
tit_for_whoops: 0.00284842
slider: 0.00153227
sounder: 0.000472289
trickster: 0.000297515
stubborn_stumbler: 3.76073e-05
cooperate: 3.46865e-05
tit_for_time: 2.42263e-05
everyThree: 2.06095e-05
jedi2sith: 1.62591e-05
somewhat_naive: 4.20785e-06
just_noise: 1.18372e-06
growing_distrust: 6.17619e-08
vengeful: 3.61213e-09
goldfish: 3.5746e-09
defect: 4.92581e-10
alternate: 6.96497e-20
random_player: 1.49879e-20
выигрыш
Конкурс будет оставаться открытым в течение неопределенного времени, так как новые материалы публикуются. Тем не менее, я объявлю победителя (приму ответ) по результатам 1 месяц после опубликования этого вопроса.
источник
exploit_threshold()
несколько раз пытался скопировать какexploit_threshold1()
и т. д. и добавил их вplayers
список. Почему я получаю совершенно разные результаты для идентичных стратегий?Ответы:
Genug ist nicht genug
(также можно назвать
enough2
илиstealback
)Я узнал, что оригинальная синица для двух татов действительно ждала двух последовательных татов, как это
tit_for_whoops
делает, и, действительно, кажется, что мы должны простить и забыть (ну, почти ...) более ранние одиночные таты. И много игроков дефект в последних раундах. Я до сих пор предпочитаю быть милым, когда все было хорошо, но планка устойчивости бота продолжает снижаться.источник
Тит-For-упс
Вдохновлен стратегией от ncase.me/trust
Дефекты только в том случае, если другой игрок сбежал дважды подряд, чтобы избежать недоразумений.
источник
Изменение сердца
Изменения в сердце на полпути. Удивительно хорошо.
источник
Стратегия Stealer
Вдохновленный достаточно, change_of_heart и tit-for-whoops. Должно быть немного больше, чтобы прощать. Я пытался настроить цифры для достижения наилучших результатов, но они не хотели сильно меняться.
источник
Тит-For-Time
Если ты проводил большую часть времени, причиняя мне боль, я просто сделаю тебе больно. Вероятно.
источник
Растущее недоверие
Чем больше оппонент меня предает, тем меньше я могу верить, что это был просто шум.
источник
state
аргумент, что по умолчанию это список? Списки изменчивы, поэтому состояние можно легко изменить.Jedi2Sith
Начинается все хорошее и самоотверженное, но со временем влияние темной стороны неуклонно усиливается, вплоть до точки невозврата. Это влияние не остановить, но все плохие вещи, которые он видит, просто способствуют силе темной стороны ...
Попробуйте онлайн!
источник
ползунок
Начинается с «c» и постепенно скользит к «d» или от него.
источник
Упрямый Спотыкатель
Исходя из вашей стратегии порога эксплойта с единой последовательной игрой, отслеживается переключение между дефектом и в основном сотрудничество
ОБНОВЛЕНИЕ: отслеживает как два последовательных, так и три последовательных воспроизведения, наказывая только в более жестких условиях и добавляя случайный выбор, если не уверен
ОБНОВЛЕНИЕ 2: Удалено условие и добавлена функция распределения
источник
Noise Bot
Я определенно сотрудничаю с ботом. Это просто шум.
источник
Хватит значит хватит
Начинается как синица для двух татов, где эти два тита не должны быть последовательными (в отличие от
tit_for_whoops
). Если это должно игратьd
слишком часто, это идет -d
итого.источник
Золотая рыбка Бот
Золотая рыбка никогда не прощает, но она быстро забывает.
источник
источник
Разлагающаяся память
Весит новейшая история больше. Медленно забывает прошлое.
источник
взятка
Некоторые смутные идеи ...
источник
Действительно не получает всю "шум" вещь
Никогда не прощает предателя.
источник
Эхолот:
редактировать: добавлен ответный удар в сценариях с низким уровнем шума
в основном, если все 4 первых хода согласованы, это означает, что мы должны ожидать меньше шума, чем обычно. порой делайте небольшие дефекты, чтобы компенсировать меньшее количество баллов, которые мы получили бы, если бы никогда не отказывались, и чтобы его можно было обвинить в шуме. мы также ответим, если они перестанут действовать против нас
если наш противник делает много дефектов в те ходы (2 или более), мы просто возвращаемся к ним. если бы это был просто шум, шум все равно бы повлиял на наши движения.
в противном случае, если бы только 1 ход был дефектным, мы просто делали простое остроумие до конца игры.
источник
чередовать
Выбирает случайным образом в первом раунде, затем чередуется. Всегда дефекты в последних 10 раундах.
источник
Ждать 50
После 50 дефектов, пусть это будет!
источник
Somehwat наивный
Я просто предполагаю, что если вы сбежали меньше, чем вероятность (примерно) в последние n ходов, это был шум, а не то, что вы злые!
Не могу понять, лучший русский , может посмотреть дальше.
источник
Каждые три
Дефекты каждые три оборота независимо. Также дефекты последних 50 витков. Также дефекты, если его противник сбил 4 из 5 последних раундов.
источник
Ковши
Играет приятно для начала. Просматривает их последние 20, если <25% d, возвращает c,> 75% d, возвращает d, и между ними выбирается случайным образом по линейной вероятностной функции. Последние 50, дефекты. Было это в прошлом 10, но видел много последних 50 дефектов.
Впервые здесь, так что дайте мне знать, если что-то нужно исправить (или как я могу это проверить).
источник
players
для быстрой итерации.Тит-For-Stat
Дефекты, если противник сбежал более половины времени.
источник