vak: (Знайка)
[personal profile] vak
Решил я посмотреть, насколько Claude Code умнее Курсора. Дал ему ту же задачку: выработать стратегию игрока Хамурапи. Получилось существенно лучше. Вот бот, то есть скрипт на Питоне, выполняющий один сеанс игры: one_game.py. А вот описание стратегии:

Цели

Пройти все 10 лет, не допустив «национальной катастрофы» (массового голода или нехватки земли), и удерживать средний уровень голода ниже 3% в год — в игре это считается «великолепным» результатом.

Как работает ежегодный цикл игры

После того как вы решаете, сколько земли купить или продать, сколько зерна выделить на питание и сколько акров засеять, игра выполняет расчёты в следующем порядке:
  1. Урожай — каждый засеянный акр даёт от 1 до 5 бушелей случайным образом.
  2. Крысы — с вероятностью 40% они съедают от четверти до половины запасённого зерна.
  3. Иммиграция — новые жители прибывают в зависимости от благосостояния города (чем больше земли и зерна, тем больше приток).
  4. Чума — примерно раз в 7 лет умирает половина населения.
  5. Голод — каждый, кто не получил 20 бушелей пищи, умирает. Если за один год умирает более 45%, вас немедленно смещают с должности.
  6. Конец игры — если в среднем более 33% населения умирает от голода в год или в конце остаётся менее 7 акров на человека, вы также проигрываете.

Что делает бот каждый год

Держит запас зерна. После кормления всех жителей бот всегда старается оставить часть зерна в резерве как защиту от неурожая и нашествий крыс. Без запаса один неудачный год может уничтожить город.

Засевает как можно больше. Каждый засеянный акр — это инвестиция: даже при худшем урожае (1 бушель с акра) больше посевов означает больше зерна в следующем году. Резерв держится достаточно небольшим, чтобы не мешать посеву.

Покупает землю только при избытке. Бот покупает землю лишь тогда, когда есть значительный избыток зерна — достаточно, чтобы оплатить покупку и при этом прокормить всех в плохой год. Слишком активные покупки оставляют город без пищи при неурожае.

Продаёт землю в чрезвычайных ситуациях, но осторожно. Когда зерна не хватает, бот продаёт землю, чтобы получить еду. Сначала продаётся только излишек сверх 8 акров на человека (комфортный запас прочности). Если этого недостаточно, чтобы не превысить порог в 45% смертности, продаётся больше — но процесс останавливается, как только риск смещения исчезает.

Прекращает продажу, как только риск смещения устранён. Это самое важное и контринтуитивное правило. Продавать ещё больше земли, чтобы спасти всех в плохой год, кажется гуманным, но это оборачивается проблемами: выживших нужно кормить и в будущем, и если следующий год снова окажется неурожайным, появится больше ртов при меньшем количестве земли. В итоге голод просто переносится на более поздний год, а не уменьшается. Остановка на минимально безопасном уровне позволяет удерживать население в пределах, которые может прокормить имеющаяся земля.

Почему сложно добиться меньше 3% голода

Случайность в игре довольно жёсткая. Урожай распределяется случайно от 1 до 5 бушелей с акра, и примерно в 60% игр за 10 лет происходит два или более подряд плохих урожая. В таких случаях запасы зерна истощаются быстрее, чем их можно восполнить продажей земли, и некоторый голод неизбежен при любой стратегии.

В играх без неурожайных лет или с одним таким годом (около 40% случаев) бот обычно достигает 0% голода или лишь одного слабого эпизода — значительно ниже цели в 3%. В остальных случаях он удерживает смертность чуть ниже порога смещения (45%), сохраняя при этом достаточно земли, чтобы завершить игру.

Чего ожидать

  • Вероятность успеха: 100% — город всегда переживает все 10 лет.
  • Средний уровень голода: около 4–5% при случайных условиях; примерно 35–40% игр укладываются в менее чем 3%.
  • Итоговая земля: обычно 10–12 акров на человека, значительно выше минимального порога в 7 акров.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org