تمثل خريطة ثنائية الأبعاد من الزوجي في عدد قليل من "المعلمات" قدر الإمكان

StackOverflow https://stackoverflow.com/questions/741857

سؤال

أنا أعمل على لعبة AI بدوره باستخدام تقنية الشبكة العصبية المعروفة باسم مرتب. وبعد أحاول تدريب شبكة يمكن أن تتحرك حول مساحة ثنائية الأبعاد (X & Y) بالنظر إلى مجموعة متنوعة من القيم المخزنة في ما هو بفعالية مجموعة ثنائية الأبعاد.

أستطيع أن أرى استراتيجيتين لاستخدام الشبكة العصبية:

  1. بالنسبة لكل "خلية" في الشبكة، توفر الدرجات من الاستدلال المختلفة كمدخلات إلى الخلايا العصبية وإنشاء NN بفعالية نظام "تسجيل" معقد للغاية. انقل الشخصية غير المسرحية (NPC) إلى الموقع بأعلى درجات.

  2. قم بإنشاء قيمة مضغوطة لكل تدبير Heiuristic (مضغوط بطريقة أو بأخرى إلى عدد قليل من البتات) وتوفير الخلايا العصبية المدخلات لكل من هذه التدابير.

أنا مهتم تماما بالخيار الثاني لأنه يقدم أقل قدر من الحسابات المطلوبة (وقت تشغيل اللعبة طويلا جدا)، ومع ذلك، فأنا مرتبك فيما يتعلق بالنهج الذي يمكنني استخدامه لإنشاء إصدار "التمثيل الصغير" من الاثنين القيم التموينية الأبعاد. أعلم أن هناك تقنيات مثل التحولات فورييه هناك، ولكن لا أعرف إذا كانت هذه سوف تناسب مشكلتي. في الأساس، أبحث عن طريقة لتحويل مجموعة 50x50 من الزوجي إلى واحد أو ربما قيمتين مزدوجتين. يمكن أن تكون هذان القيمتين المزدوجين مضغوطا، لا أحتاج إلى أن أكون قادرا على إخراج القيم الأصلية، فأنا بحاجة فقط إلى آلية معقولة لتغيير بيانات الإدخال في بصمة صغيرة.

بديل لهذه الاحتمالات هو تشفير بطريقة أو بأخرى "منطقة" بناء على مسافة من NPC (حتى تحصل على القيم الفعلية لخلية "إغلاق"، وتقريب لخلية "بعيدة"). لا أعرف بالضبط كيف سأتخلص من ذلك، لكنها على الأقل تتخلص من الحاجة إلى تقييم كل خلية كل منعطف من اللعبة (نظرا لأنني أبحث عن حوالي 5 ملايين جولة في حوالي 1 ثانية لكل جولة، أي تبسيط يمكنني التوصل إلى ساعد بشكل كبير).

أعتذر إذا لم يكن هذا مناسبا كبيرا، فهذه مشكلة صعبة للغاية قد حظت بي لفترة من الوقت، ولا أستطيع التفكير في طريقة سهلة لوصفها.

شكرا لك،

إيدان

تم تحريره لإضافة (وتغيير العنوان):

بفضل كريس كاردنا ما أبحث عنه. ما أبحث عنه هو وسيلة لتقريب خط (يمكنني تحويل الخريطة 2D إلى خط) في عدد قليل من المعلمات قدر الإمكان. لقد استخدمت تحفايات مكعبة للاستيفاء من قبل، ومع ذلك، أحتاج إلى شيء أكبر قدر ممكن من القدر من القدر من مجموعة البيانات التي تختلف بين 0.0 و 1.0 بقوة. ما أنا أعلم البحث عن أفترض هو "التجزئة" للخريطة.

أعلم أن هناك تقنيات مثل الروايات المكعبة التي يمكنني ممارسة بعض "النقاط الرئيسية" من، وهذه القيم تشبيه معقول لما أبحث عنه. أحتاج إلى طريقة لأخذ قيم 2500 وتصل إلى تمثيل صغير لهذه القيم التي يمكنني استخدامها للشبكة العصبية. أعتقد أنه يمكن تدريب NN على استنتاج المعنى الحقيقي لهذه التمثيلات، أو على الأقل لتحديد بعض الارتباط بين التمثيل والعالم الحقيقي، لذلك لا يحتاج بالضرورة إلى أن تكون وظيفة عكسية، لكنني لا أعتقد تعمل العديد من الوظائف في اتجاه واحد (مثل MD5، Sha) بالفعل مفيدة للغاية ...

هل كانت مفيدة؟

المحلول

في الأساس، فإن أي خوارزمية ضغط الرسومات سوف تفعل ما تريد. يتم تحسينهم بشدة لضغط الصفائف 2D من الأرقام في أصغر البصمة الممكنة.

تم تحريره لإضافة:

الشيء الآخر الذي يجب مراعاته، نظرا لأنك تتطلع إلى استخدام ضغط لتقليل وقت المعالجة، هو أن الحصول على نسب ضغط عالية حقا تتضمن عموما حسابا أكبر لضغط الصفيف وإلغاء ضغطه. يمكنك الوصول إلى نقطة حيث تقضي المزيد من الوقت في ضغط وإلغاء ضغط الصفيف من تشغيل الشبكة العصبية.

تم تحريرها مرة أخرى لإضافة:

بناء على تعليقاتك، يبدو وكأنه ما قد تريده هو منحنى ملء الفضاء. وبعد استخدم المنحنى لتحويل صفيف 50x50 * إلى خط 1x2500 ثم الخروج باستخدام صيغة تقارب القيم التي تريدها لكل خلية من الصفيف.

* هل يجب أن يكون الصفيف 50x50؟ قد يكون من الأسهل بكثير ملء منحنى ملء الفضاء إذا كان مربعا من الأبعاد المختلفة قليلا. يعمل منحنى Hilbert بشكل جيد للأبعاد التي تعد صلاحيات اثنين، على سبيل المثال.

نصائح أخرى

شيء واحد يمكنك محاولةه هو تناول FFT من خط 1D الخاص بك ثم إزالة المصطلحات لاحقا (عالية التردد). على سبيل المثال، في ماتلاب فعلت ما يلي:

x = [1:1000];
y = rand(1,1000);
f = fft(y, 250); % truncate to 250 terms
plot(x,y, x,abs(ifft(f), 1000));

ما يميل إلى أن يحدث هو أن قمم IFFT من F كانت قريبة جدا من قمم ذ. إنهم ليسوا بالضرورة أعلى نقاط من y، لكنهم كانوا من القمم. على سبيل المثال، تم تشغيل هذا المدى، كانت هناك قمم في X = 424 و 475 و 725 في FFFT FFT المقلوبة من F، وكانت هناك أيضا قمم في Y في X = 423 و 475 و 726. ومع ذلك، كان Max العالمي Y في X = 503، التي كانت ذروة في IFFT (F)، ولكن ليس مرتفعا جدا.

ومع ذلك، فإن هذا فقط يقطع استخدام بياناتك فقط في النصف، لأنني حولت 1000 زوجة إلى 250 قيما معقدة. يمكن الحصول على زيادة أخرى باستخدام الجزء الحقيقي فقط من FFT:

x = [1:1000];
y = rand(1,1000);
f = real(fft(y, 250)); % only uses 1/4 the space now
plot(x,y, x,abs(ifft(f, 1000)));

هذا لا يزال قد أسفر عن نتائج جيدة جدا، مع كل ذروة رئيسية من IFFT (F) المقابلة ذروة في Y التي كانت على الأكثر سوى مسافة 2 مسافة من 2 من الوقت، وتستخدم 1/4 مساحة تخزينها مباشرة وبعد

ومع ذلك، لا يزال هذا لا يحصل عليك نتائج "قيم واحد أو اثنين مزدوج". أنت الآن تعبأ 2500 زوجة إلى 625. يمكنك التجربة عن طريق خفض المزيد من المصطلحات، ولكن سيتعين عليك اختبار المزيد من القيم "إغلاق" عن طريق خفض المزيد من المصطلحات. ربما يمكنك الاحتفاظ بأول 10٪ من المصطلحات، والعثور على الحد الأقصى، ثم انظر إلى مسافة 3 أو 4؛ هذا من شأنه أن يقلل من 2500 زوجك إلى "مجرد" 250. سيشتعد الاختبار فقط ما يعمل بشكل أفضل لتطبيقك.

إذا كنت حقا يائسة، يمكنك أن تنخفض بنسبة تصل إلى أقل ترددات 1٪، والبحث عن 5 أو 6 في أي من الاتجاهين للذروة الحقيقية. ولكن هذا لا يزال يتركك مع 25 زوجي.

لا أعتقد أن هناك بأي طريقة لتحويل 2500 زوجة إلى 1 أو 2 فقط، ولديها عكسها في أي شيء ذي معنى. ألق نظرة على نظرية نظرية المعلومات لمعرفة السبب. أقترح عليك الحصول على matlab أو gnu اوكتاف، أو حتى التفوق، واللعب مع شيء من هذا القبيل والعثور على النتائج الأفضل بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top