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 акров.

Date: 2026-04-23 17:21 (UTC)
From: [personal profile] ichthuss
Жду третьей части, "Кодекс vs Хаммурапи".