Комментарии 57
Было бы интересно увидеть ссылку на бинарник, для тех, у кого есть jre, но нет jdk. :)
породить нового зайца можно будет только после 20 съеденных трав, а волка после 5 съеденных зайцев. Тогда они не будут самопорождаться без еды. А с учетом старения будут участками вымирать, давая траве (и зайцам) возможность вырасти и накормить тех, кто не сидит на месте.
На данный момент с этой задачей хорошо справляется «взрослость». Она показатель того, что что-то было съедено, в противном случае существо бы просто не дожило до взрослой стадии. Более того, поведение существ нужно будет менять под новые правила, иначе действовать они будут неэффективно.
В природе всё отлаживалось миллиард лет. И случайность ту ни при чём.
Отладки не получится, если вся популяция вымрет. Чтобы все "само отлаживалось", надо, чтобы организмы приспосабливались быстрее, чем вымирают. В модели автора это явно не так.
Это сложно назвать отладкой
— дальность зрения, за счёт постоянного небольшого увеличения энергозатрат;
— скорость бега, за счёт постоянного небольшого увеличения энергозатрат и увеличения энергозатрат на передвижение;
— масса тела, больше накапливаемый запас энергии, за счёт увеличения энергозатрат на передвижение…
Осталось испробовать генетический алгоритм эволюции с отбором, изменчивостью и наследственностью...
Забавно. Как знакомо…
Сам такие задачи делал в рамках лабораторных (даже не курсовая..)
Правда не просто так, а в рамках изучения классов и наследования C++.
Базовый класс животное… наследуемые классы зверей со своими свойствами и поведением.
И общий цикл тайминга, передающий в цикле управления объектам классов.
(вариант с многонитевой средой — отдельная лаба..)
А в этом решении от понятия объектное программирование отказались вообще.
На мой взгляд, зря. Классическая задача придуманная как будто специально под это.
Хотя… может быть и нет. по описанию и кусочку кода судить сложно.
А в этом решении от понятия объектное программирование отказались вообще.
На мой взгляд, зря. Классическая задача придуманная как будто специально под это.
Я бы поспорил. Взгляните на остальной код — ссылка на репозиторий указана.
Если волк и заяц оказываются в одном квадрате, волк съедает кроликаКролик у волка с собой? :)
Помню после публикации вот этой в 10-м году: geektimes.ru/post/90571 тоже стал делать подобное…
У меня не было клеток, было свободное поле. Были деревья (ну или трава, не знаю как назвать верно), которые росли со временем, и раскидывали семена в заданном радиусе. И были существа (по аналогии с вдохновившей меня статьей назывались флексы), которые жрали травку, ну и сделал так же вероятность каннибализма в случае голода (опять же под впечатлением статьи). Размножение, смерть от старости — все это тоже было. ДНК как таковой не было, но в потомстве учитывалась скорость родителей, радиус зрения, уровень хищничества и тп параметры.
ИИ был примерно такой — были потребность есть, потребность двигаться (чтобы шарились по карте), потребность размножется. Все это складывалось и по вероятности выбиралось действие. (Например если только поел — то потребность есть = 0, со временем повышается, если давно не размножался — то потребность размножаться =10, потребность двигаться всегда была = 5, генерится число от 0 до 15, если 0-10 — то выбираем размножаться, если 10-15 — то шаримся по карте). В случае если перс хищник надо было еще догнать жертву. Был стек действий, чтобы можно было запланировать несколько действий и выполнять их, если еще актуальны. Хотя сейчас я бы делал это на основе GOAP (очень похоже на то что я реализовал тогда, только GOAP круче).
Делал огонь и тп, чтобы персы теряли энергию, после этого они они запоминали идентификатор объекта и те которые обожглись уже не лезли в огонь. Могли при встрече обмениваться идентификаторами опасностей и ништяков, как будто язык такой у них был (один обжегся, рассказал при встрече другому — другой уже не полезет в огонь).
Баланс — да, сложно было добиться устойчивой системы. И быстродействие, у меня было все в риалтайме и без клеток (еще и в 3Д, хотя и плоскими спрайтами :)), через некоторое время начинало жутко тормозить. Ну и времени все это отнимало кучу.
Сча прямо ностальгия, после прочтения статьи.
получаются весёлые картинки, если волк с зайцем в одной клетке
И я хотел сделать с рыбками: хищными и не хищными. Так же хотел добавить объекты вроде камней, островов, потом хотел растянуть карту динамически, потом хотел чтобы они двигались попиксельно, а не большими квадратами, потом, чтобы объединялись в группы, потом, чтобы группы двигались определенными маршрутами, потом меняли маршрут, чтобы можно было управлять группами или даже каждой рыбкой в отдельности, посылать команды ей, сохранять текущее состояние игры, чтобы продолжить потом с сохраненного места, потом чтобы это были не только рыбки, а все что угодно.
Потом испытал слишком сильную эйфорию от своей идеи и понял, что это потянет на огромное количество кода и времени и к тому же не был уверен, что моя идея правильная и осуществима, и что я верно продумал все, так что оставил не на долго, чтобы подумать, в итоге уже год не могу вернуться и начать заново. Не могу придумать какие технологии лучше задействовать.
Но вы меня вдохновили.
https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
Кстати, тем кто изучает программирование это направление — это огромное количество забавных игровых задач для практики.
Есть хорошая книжка по теме:
Математическое моделирование и исследование устойчивости биологических сообществ
Можно без постановки экспериментов проанализировать к чему сойдутся популяции при всевозможных начальных условиях.
Статья «Акулы и рыбы ведут экологическую войну на тороидальной планете Аква-Тор»
В мире науки, 1985 №2. По этой статье несколько раз делал программки для освоения разных языков программирования. Пару раз сам проводил занятия, используя этот материал для обучения. Кравивая модель.
- возможность задавать различное поведение для разных участников
- возможность передавать свой код потомству
И точно так же зацепило.
В итоге появились, камни, трава, лисы, оградки, лисы имели область видимости зайцы то же. Лисы искали зайцев или лис, зайцы искали траву или лис. Так же умели искать путь в лабиринтах оградок. Но система так и не стала стабильной. были параметры при которой она становилась стабильной, но… Сделать беременность лисам и зайцам я тогда не додумался :)
Решил эту проблему путем введения «полового голода» — волк начинал интересоваться самками только когда соответствующий счетчик достигал какого-то значения. При рождении он выставлялся на ноль, после спаривания также обнулялся.
Правда, устойчивой в долгосрочной перспективе модели у меня не получилось, а дальше усложнять модель я уже не стал, так как изначальная цель была просто вспомнить питон.
Игра в Бога, или как я «Волчий остров» писал