Об этом проекте

NEAT-AI-core представляет собой общее нативное ядро NEAT-AI — реализации алгоритма NEAT (NeuroEvolution of Augmenting Topologies), который развивает как веса, так и топологию нейронной сети. Репозиторий организован как рабочее пространство Cargo, членом которого является крейт neat-core, содержащий общую библиотеку вычислений и тесты. Возможности крейта. Скоринг, вычисление потерь и SIMD-ядра, используемые для обработки множества записей через одного эволюционировавшего индивида, которого в проекте называют «существом» (creature). Сборка по умолчанию и сборка wasm32 используют однопоточный путь; включение функции Cargo «parallel» добавляет параллельный скоринг записей на базе rayon для нативных платформ. Как последовательный, так и параллельный пути скоринга используют прямой проход через SIMD-путь с пакетом из 8 записей, затем группу из 4 записей и скалярный хвост. В README указано, что на зафиксированной производственной топологии безопасные ядра вносят заметные затраты на предварительную проверку, поэтому пользователям с собственной валидацией при загрузке рекомендуются «непроверяемые» (unchecked) аналоги; также отмечено, что нативное исполнение превосходит wasm32 по производительности на одно ядро. API скоринга. Ввод и вывод используют плоский непрерывный макет: запись i считывает данные из inputs[i * stride .. i * stride + stride], а результаты записываются в out[i * num_outputs .. (i + 1) * num_outputs]. Старые обертки векторов для каждой записи сначала были объявлены устаревшими, а затем удалены, поэтому вызывающие стороны должны упаковывать записи в один буфер и использовать плоские точки входа; нулевой шаг (stride) или буфер, размер которого не кратен количеству записей, вызывают панику вместо скрытого неправильного среза. Скомпилированные сети доступны только для чтения после создания. Поля являются приватными и доступны через аксессоры только для заимствования, а конструктор from_parts создает сеть из нейронов и синапсов в памяти, применяя ту же валидацию, что и конструктор на основе буфера, и отклоняя диапазон синапсов, выходящий за пределы таблицы. В README отмечено, что это является ломающим изменением для зависимых потребителей. Флаги функций. Параметр parallel выключен по умолчанию, поэтому сборки по умолчанию и wasm32 не включают символы rayon; checked-gather4 также выключен по умолчанию и восстанавливает индексацию с проверкой границ в помощнике gather4 для wasm32. Каждое ядро в модуле SIMD поставляется как безопасная функция, которая проверяет свой диапазон и вызывает панику при нарушении контракта, а также как «непроверяемый» двойник, контрактом безопасности которого является инвариант индекса при загрузке. WebAssembly. Каждый пуш публикует два бандла: сборку wasm64 Memory64, которую фиксируют новые ревизии, и неизменную сборку wasm32, которая хранится как окно для отката. Каждый бандл сопровождается контрольной суммой и SBOM, а выпуск ограничен проверками целостности бандла и архитектурного соответствия. Сборка и качество. Разработка ведется по принципу TDD; локальный контроль качества включает форматирование, clippy, тесты, документацию, проверку лицензий и уязвимостей, а также тесты shell-пакета bats. CI запускается при пулл-реквестах и вручную. Корневой манифест определяет профили dev и release для всего рабочего пространства (отладочная информация line-tables-only для быстрой пересборки в dev; opt-level 3 с fat LTO и одним юнитом генерации кода для release), в то время как target-cpu=native намеренно оставлен на усмотрение конечных потребителей бинарных файлов.