Проект написан в качестве вступительного экзамена ML&DL, зимний отбор 2022 года
Задача - разработать симуляцию жизни океана по определенным правилам Океан представляется двумерным массивом, каждая клетка которого может содержать:
- пустоту (представляется как цифра 0)
- скалу (представляется как цифра 1)
- рыбу (представляется как цифра 2)
- креветку (представляется как цифра 3).
У каждой клетки есть ровно 8 соседей. Все клетки за пределами игрового океана считаются пустыми.Скалы не подвергаются изменениям в течение каждой генерации.
Рыбы и креветки существуют по следующим правилам:
- если у рыбы/креветки 2 или 3 соседа, то она не изменяется (продолжает жить)
- если у рыбы/креветки менее 2 соседей или более 4 соседей, то она погибает (значение клетки изменяется на 0 (пустота) )
- рыбы и креветки живут отдельно друг от друга - креветки не влияют на рыб, рыбы не влияют на креветок
Пустая клетка подчиняется следующему закону:
- если у нее ровно 3 соседа-рыб, то ее значение меняется на 2 (в клетке зарождается рыба)
- если у нее ровно 3 соседа-креветок и нет 3 соседов-рыб, то ее значение меняется на 2 (в клетке зарождается рыба)
Содержит ноутбук с отображением жизни океана без анимации (отображение идет в качестве вывода двумерного массива, содержащего целочисленные значения от 0 до 3 включительно). Вывод выглядит следующим образом:
В случае, если предыдущая итерация жизни океана равна последующей итерации (океан перестает изменяться), то выводится сообщение о "смерти" океана:
Содержит ноутбук с более наглядным представлением жизни океана - вместо вывода океана в качестве двумерного массива с цифрами выводится визуализация.
Изначально выводится пример визуализации самого океана:
Последством выполнения команды HTML(anim.to_html5_video())
будет выведено видео в формате .mp4 длительностью 25 секунд.
Файл с примером визуализации лежит в папке img.
Работа обоих файлов строится на 3 функциях - create
, get_neigh
и next_step
. Рассмотрим каждую из функций:
Данной функции на вход подается число N - линейный размер океана, и кортеж чисел chance - шанс появления каждой из клеток (пустоты, скалы, рыбы и креветки) в океане. Функция возвращает ocean - двумерный массив, являющийся океаном
Данной функции на вход передается ocean - двумерный массив (изображение океана), N - линейный размер океана, x, y - координаты определнной клетки. Функция возваращет [fish_count, shrimp_count] - количество рыб и креветок по соседству с клеткой с коодинатами x и y
Данной функции на вод передается ocean - двумерный массив (изображение океана), prot_ocean - копия океана (создается по той причине, что все клетки океана меняются не последовательно, а одновременно), и N - линейный размер океана. Внутри вункции находится вложенный цикл, который "проходится" по всем клеткам океана и в зависимости от их "содержимого" (пустота, рыба и т.д.) вызывает функцию get_neigh
и при необходимости меняет содержимое клетки.