عن المشروع

تعتبر NEAT-AI-core النواة الأصلية المشتركة بلغة Rust لـ NEAT-AI، وهي تنفيذ لخوارزمية NEAT (NeuroEvolution of Augmenting Topologies)، وهي الخوارزمية التي تطور كلاً من الأوزان وطوبولوجيا الشبكة العصبية. المستودع عبارة عن مساحة عمل Cargo التي يضم عضوها، crate neat-core، مكتبة الحوسبة المشتركة مع اختباراتها. ما يوفره الـ crate: عمليات التقييم (Scoring)، والخسارة (loss)، ونوى SIMD المستخدمة لتمرير العديد من السجلات عبر فرد متطور واحد، والذي يطلق عليه المشروع اسم creature. يتخذ البناء الافتراضي وبناء wasm32 مساراً أحادي الخيط؛ بينما يضيف تفعيل ميزة Cargo parallel تقييماً للسجلات متوازياً للبيانات يعتمد على rayon في الأهداف الأصلية. يقود كلا مساري التقييم (التسلسلي والمتوازي) التمرير الأمامي عبر مسار SIMD مجمع من 8 سجلات، تليها مجموعة من 4 سجلات ثم ذيل قياسي (scalar tail). يشير ملف README إلى أنه في الطوبولوجيا الإنتاجية المعتمدة، تحمل النوى الآمنة تكلفة مسبقة ملموسة، لذا يتم توجيه المستهلكين الذين لديهم تحقق خاص بهم عند التحميل إلى النوى غير المفحوصة (unchecked twins)، وأن المسار الأصلي يتفوق على مسار wasm32 لكل نواة. واجهة برمجة تطبيقات التقييم (Scoring API): تستخدم المدخلات والمخرجات تخطيطاً مسطحاً ومتصلاً: يقرأ السجل i المدخلات من [i * stride .. i * stride + stride] وتوضع مخرجاته في [i * num_outputs .. (i + 1) * num_outputs]. تم أولاً إلغاء دعم أغلفة المتجهات لكل سجل ثم إزالتها، لذا يجب على المستدعين حزم السجلات في مخزن مؤقت واحد واستدعاء نقاط الدخول المسطحة؛ ويؤدي وجود stride صفري أو مخزن مؤقت ليس عدداً صحيحاً من السجلات إلى حدوث panic بدلاً من تقسيم البيانات بشكل خاطئ بصمت. الشبكات المجمعة تكون للقراءة فقط بعد الإنشاء. الحقول خاصة ويتم الوصول إليها عبر أدوات وصول للاقتراض فقط، ويقوم منشئ from_parts ببناء شبكة من العصبونات والتشابكات الموجودة في الذاكرة، مع تطبيق نفس التحقق المستخدم في المنشئ القائم على المخزن المؤقت ورفض نطاق التشابك الذي يتجاوز الجدول. يشير ملف README إلى أن هذا تغيير جذري للمستهلكين في المراحل اللاحقة. أعلام الميزات (Feature flags): ميزة parallel معطلة افتراضياً، لذا فإن البناء الافتراضي وبناء wasm32 لا يسحبان أي رموز rayon؛ كما أن checked-gather4 معطلة افتراضياً وتعيد فهرسة التحقق من الحدود في مساعد gather4 الخاص بـ wasm32. يتم شحن كل نواة في وحدة SIMD كدالة آمنة تتحقق من نطاقها وتؤدي إلى panic إذا لم يتحقق العقد، بالإضافة إلى توأم غير مفحوص يكون عقد الأمان فيه هو ثابت الفهرس عند التحميل. WebAssembly: ينشر كل دفع (push) حزمتين: بناء wasm64 Memory64 تثبته المراجعات الجديدة، وبناء wasm32 غير متغير يتم الاحتفاظ به كنافذة تراجع، ولكل منهما ملف checksum جانبي وSBOM، وتخضع لعمليات تحقق من الحزمة وتكافؤ البنية قبل الإصدار. البناء والجودة: يتبع التطوير منهجية التطوير القائم على الاختبار (TDD)؛ حيث تقوم بوابة الجودة المحلية بتشغيل التنسيق، وclippy، والاختبارات، والوثائق، والتحقق من التراخيص والتنبيهات، واختبارات bats shell-suite، ويتم تشغيل CI في طلبات السحب (pull requests) والإرسال اليدوي. يحدد البيان الرئيسي ملفات تعريف التطوير والإصدار على مستوى مساحة العمل (معلومات تصحيح الأخطاء line-tables-only لإعادة بناء سريعة في التطوير؛ ومستوى تحسين opt-level 3 مع fat LTO ووحدة codegen واحدة للإصدار)، بينما يتم ترك target-cpu=native عمداً للمستهلكين النهائيين للثنائيات بدلاً من تثبيتها هنا.