الإصدار 12 تطلق اليوم! (وهي قفزة كبيرة للغة ولفرام والرياضيات)



روابط سريعة


- الطريق إلى الإصدار 12
- أولا ، بعض الرياضيات
- حساب التفاضل والتكامل من عدم اليقين
- الرياضيات الكلاسيكية ، الابتدائية والمتطورة
- أكثر مع المضلعات
- الحوسبة مع متعدد الوجوه
- هندسة إقليدس على شكل هندسي
- الذهاب فائقة رمزية مع النظريات البديهية
- مشكلة ن الجسم
- ملحقات اللغة والراحة
- المزيد من وظائف التعلم الآلي
- الأحدث في الشبكات العصبية
- الحوسبة مع الصور
- التعرف على الكلام وأكثر مع الصوت
- معالجة اللغة الطبيعية
- الكيمياء الحاسوبية
- الحوسبة الجغرافية الموسعة
- الكثير من التحسينات التصور قليلا
- تشديد تكامل قاعدة المعرفة
- دمج البيانات الكبيرة من قواعد البيانات الخارجية
- RDF ، سباركل وكل ذلك
- التحسين العددي
- تحليل العناصر الخطية غير الخطية
- المترجم الجديد المتطور
- استدعاء بيثون واللغات الأخرى
- المزيد من أجل Wolfram "Super Shell"
- العرائس متصفح الويب
- ميكروكنترولر مستقل
- استدعاء لغة ولفرام من بايثون وأماكن أخرى
- ربط الكون الكون
- البيئات المحاكاة للتعلم الآلي
- Blockchain (و CryptoKitty) حساب
- والتشفير العادي كذلك
- الاتصال بموجز البيانات المالية
- تحديثات هندسة البرمجيات والنظام الأساسي
- والكثير غيرها ...


16 أبريل 2019 - ستيفن ولفرام


الطريق إلى الإصدار 12



نصدر اليوم الإصدار 12 من Wolfram LanguageMathematica ) على منصات سطح المكتب ، وفي Wolfram Cloud . أصدرنا الإصدار 11.0 في أغسطس 2016 ، 11.1 في مارس 2017 ، 11.2 في سبتمبر 2017 و 11.3 في مارس 2018 . إنها قفزة كبيرة من الإصدار 11.3 إلى الإصدار 12.0. هناك 278 وظيفة جديدة تمامًا ، في 103 مناطق ، بالإضافة إلى آلاف التحديثات المختلفة عبر النظام:
صورة

في " عدد صحيح " مثل 12 ، هدفنا هو توفير مجالات جديدة مليئة بالكامل وظائف. ولكن في كل إصدار نريد أيضًا تقديم أحدث نتائج جهودنا في البحث والتطوير. في 12.0 ، يمكن اعتبار نصف وظائفنا الجديدة بمثابة مناطق تشطيب تم البدء بها في الإصدارات السابقة ".1" - في حين أن نصف وظائفنا الجديدة تبدأ. سأناقش كلا النوعين من الوظائف في هذه المقالة ، لكنني سأركز بشكل خاص على تفاصيل الجديد في الانتقال من 11.3 إلى 12.0.

يجب أن أقول أنه الآن بعد الانتهاء من 12.0 ، أنا مندهش من مقدار ما فيه ، وكم أضفنا منذ 11.3. في ملاحظتي الرئيسية في مؤتمر Wolfram Technology الخاص بنا في أكتوبر الماضي ، قمت بتلخيص ما كان لدينا حتى هذه المرحلة - وحتى هذا استغرق حوالي 4 ساعات. الآن هناك المزيد.

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

حسناً ، ما الجديد في 12.0؟ هناك بعض الأشياء الكبيرة والمفاجئة - لا سيما في الكيمياء والهندسة وعدم اليقين العددي وتكامل قاعدة البيانات . لكن بشكل عام ، هناك الكثير من الأشياء في العديد من المناطق - وفي الواقع ، حتى الملخص الأساسي في مركز الوثائق يبلغ طوله 19 صفحة:

صورة

أولا ، بعض الرياضيات



على الرغم من أن الغالبية العظمى مما تفعله لغة Wolfram (و Mathematica) لا تعتبر عادةً رياضيات ، إلا أننا لا نزال نضع مجهودًا كبيرًا في مجال البحث والتطوير لدفع حدود ما يمكن القيام به في الرياضيات. وكمثال أول على ما أضفناه في 12.0 ، إليك ComplexPlot3D الملونة إلى حد ما :

صورة

كان من الممكن دائمًا كتابة كود Wolfram Language لإنشاء قطع في الطائرة المعقدة. لكن الآن فقط تمكنا من حل مشاكل الرياضيات والخوارزمية اللازمة لأتمتة عملية التخطيط القوي للوظائف المرضية في الطائرة المعقدة.

منذ سنوات أذكر أنني أتآمر بالتخطيط الشاق لوظيفة dilogarithm ، بأجزائها الحقيقية والخيالية. الآن ReImPlot يفعل ذلك:

صورة

تصور الوظائف المعقدة هو (التورية جانبا) قصة معقدة ، مع التفاصيل التي تحدث فرقا كبيرا في ما يلاحظه المرء عن الوظيفة. ومن بين الأشياء التي قمنا بها في 12.0 تقديم طرق موحدة محددة بعناية (مثل وظائف اللون المسماة) لتسليط الضوء على ميزات مختلفة:

صورة

حساب التفاضل والتكامل من عدم اليقين



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

المفتاح هو الكائن الرمزي حول [ x، δ ] ، والذي يمثل قيمة "حول x " ، مع عدم اليقين δ :

صورة

يمكنك إجراء الحساب باستخدام Around ، وهناك حساب التفاضل والتكامل الكامل لكيفية الجمع بين أوجه عدم اليقين:

صورة

إذا قمت بالتخطيط حول الأرقام ، فسيتم عرضها مع أشرطة الخطأ:

صورة

هناك الكثير من الخيارات - مثل هذه طريقة لإظهار عدم اليقين في كل من x و y :

صورة

يمكن أن يكون لديك حول الكميات:

صورة

ويمكن أن يكون لديك أيضًا كائنات حول رمزية:

صورة

ولكن ما هو حقا كائن حول ؟ إنه شيء توجد فيه قواعد معينة لدمج حالات عدم اليقين ، والتي تستند إلى توزيعات طبيعية غير مرتبطة. ولكن لا يوجد أي تصريح بأن Around [ x، δ ] يمثل أي شيء في الواقع بالتفصيل يتبع التوزيع الطبيعي - أي أكثر من ذلك Around [ x، δ ] يمثل رقمًا على وجه التحديد في الفاصل الزمني المحدد بواسطة الفاصل الزمني [{ x - δ، x + δ }]. إنها فقط التي تنشر الكائنات المحيطة بها أخطاءها أو عدم اليقين وفقًا لقواعد عامة متسقة تلتقط بنجاح ما يتم عادةً في العلوم التجريبية.

حسنًا ، لذلك لنفترض أنك أجريت مجموعة من القياسات لبعض القيمة. يمكنك الحصول على تقدير للقيمة - إلى جانب عدم اليقين فيها - باستخدام MeanAround (ونعم ، إذا كانت القياسات نفسها بها أوجه عدم يقين ، فسيتم أخذها في الاعتبار عند تقدير مساهماتها):

صورة

وظائف في جميع أنحاء النظام - وخاصة في التعلم الآلي - بدأت في الحصول على خيار ComputeUncertainty -> True ، مما يجعلها تعطي الأشياء المحيطة بدلاً من الأرقام الخالصة.

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

هناك المزيد من الدقة عند التعامل مع أشياء مثل الصيغ الجبرية. إذا استبدل أحدهم x هنا بـ Around ، فتبعًا لقواعد Around ، يفترض أن كل مثيل غير مرتبط:

صورة

لكن ربما يريد المرء أن يفترض هنا أنه على الرغم من أن قيمة x قد تكون غير مؤكدة ، إلا أنها ستكون هي نفسها لكل حالة ، ويمكن للمرء القيام بذلك باستخدام الدالة AroundReplace (لاحظ أن النتيجة مختلفة):

صورة

هناك الكثير من الدقة في كيفية عرض أرقام غير مؤكدة. مثل عدد زيارات 0s التي يجب عليك وضعها:

صورة

أو ما مدى دقة عدم اليقين التي يجب تضمينها (هناك نقطة توقف تقليدية عندما تكون الأرقام الزائدة 35):

صورة

في الحالات النادرة التي يعرف فيها الكثير من الأرقام (على سبيل المثال ، بعض الثوابت المادية ) ، يريد المرء الانتقال إلى طريقة مختلفة لتحديد عدم اليقين:

صورة

ويستمر. ولكن تدريجياً سيبدأ Around في الظهور في جميع أنحاء النظام. بالمناسبة ، هناك الكثير من الطرق الأخرى لتحديد الأرقام المحيطة . هذا رقم به خطأ نسبي 10٪:

صورة

هذا هو أفضل ما يمكن عمله حول تمثيل الفاصل الزمني:

صورة

للتوزيع ، يحسب حول التباين:

صورة

يمكن أن تأخذ في الاعتبار عدم التناسق من خلال إعطاء أوجه عدم اليقين غير المتماثلة:

صورة

الرياضيات الكلاسيكية ، الابتدائية والمتطورة



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

صورة

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

عندما نقول " دمج" ، فإننا نعني "العثور على جزء لا يتجزأ" ، بمعنى المضاد. لكن في حساب التفاضل والتكامل الأولي ، يريد الناس أن يروا ثوابت واضحة للتكامل (كما هو الحال دائمًا في Wolfram | Alpha ) ، لذلك أضفنا خيارًا لذلك (و C [ n ] له أيضًا نموذج إخراج جديد جيد):

صورة

عندما نقيس قدرات التكامل الرمزية الخاصة بنا ، فإننا نقوم بعمل جيد حقًا. ولكن هناك دائمًا ما يمكن القيام به ، لا سيما فيما يتعلق بالعثور على أبسط أشكال التكاملات (وعلى المستوى النظري ، هذه نتيجة حتمية لعدم استحالة تكافؤ التعبير الرمزي). في الإصدار 12.0 ، واصلنا الانتقاء عند الحدود ، مع إضافة حالات مثل:

صورة
صورة

في الإصدار 11.3 قدمنا ​​تحليلا مقارب ، لتكون قادرة على العثور على القيم مقارب من التكاملات وهلم جرا. الإصدار 12.0 يضيف مبالغ مقاربة ، وتكرارات مقاربة وحلول مقاربة للمعادلات:

صورة
صورة

واحدة من الأشياء العظيمة في جعل الرياضيات الحسابية هو أنه يعطينا طرق جديدة لشرح الرياضيات نفسها. والشيء الذي نقوم به هو تحسين وثائقنا بحيث تشرح الرياضيات بالإضافة إلى الوظائف. على سبيل المثال ، إليك بداية الوثائق المتعلقة بالحد - مع الرسوم البيانية وأمثلة من الأفكار الرياضية الأساسية:

صورة

أكثر مع المضلعات



لقد كانت المضلعات جزءًا من لغة Wolfram منذ الإصدار 1. لكن في الإصدار 12.0 ، يتم تعميمها: الآن هناك طريقة منهجية لتحديد الثقوب فيها. تتمثل حالة الاستخدام الجغرافي الكلاسيكية في مضلعات جنوب إفريقيا - مع وجود ثقب في بلد ليسوتو .

في الإصدار 12.0 ، مثل Root ، يحصل Polygon على شكل عرض جديد مناسب:

صورة

يمكنك حسابها كما كان من قبل:

صورة

RandomPolygon هو جديد أيضا. يمكنك أن تسأل ، على سبيل المثال ، عن خمسة مضلعات محدبة عشوائية ، ولكل منها 10 رؤوس ، ثلاثية الأبعاد:

صورة

هناك الكثير من العمليات الجديدة على المضلعات. مثل PolygonDecomposition ، والتي يمكن ، على سبيل المثال ، أن تتحلل المضلع إلى أجزاء محدبة:

صورة
صورة

تقدم المضلعات ذات الثقوب حاجة لأنواع أخرى من العمليات أيضًا ، مثل OuterPolygon و SimplePolygonQ و CanonicalizePolygon .

الحوسبة مع متعدد الوجوه



تعد المضلعات واضحة إلى حد ما: فأنت فقط تعطي رؤوسها بالترتيب (وإذا كانت بها ثقوب ، فأنت تعطي أيضًا رؤوس الثقوب). تعد الأشكال المتعددة السطوح أكثر تعقيدًا: بالإضافة إلى إعطاء الرؤوس ، عليك أن تقول كيف تتشكل هذه الرؤوس. ولكن في الإصدار 12.0 ، يتيح لك Polyhedron القيام بذلك بشكل عام ، بما في ذلك الفراغات (التناظرية ثلاثية الأبعاد للثقوب) ، إلخ.

لكن أولاً ، مع الاعتراف بسنوات 2000+ من التاريخ ، تقدم النسخة 12.0 وظائف المواد الصلبة الأفلاطونية الخمسة:

صورة

وبالنظر إلى المواد الصلبة الأفلاطونية ، يمكن للمرء أن يبدأ على الفور الحوسبة معهم:

صورة

هذه هي الزاوية الصلبة الموضحة في قمة الرأس 1 (نظرًا لأنها أفلاطونية ، فإن كل الرؤوس تعطي الزاوية نفسها):

صورة

وإليك عملية تتم على متعدد السطوح:

صورة
صورة

إلى جانب المواد الصلبة الأفلاطونية ، فإن الإصدار 12 يبني أيضًا كل " الأشكال المتعددة الوجوه " (تلتقي الحواف والوجوه m في كل قمة) - ويمكنك أيضًا الحصول على إصدارات متعددة السطوح رمزية من الأشكال متعددة السطوح المسماة من PolyhedronData :

صورة

يمكنك إنشاء أي متعدد السطوح (بما في ذلك واحد "عشوائي" ، مع RandomPolyhedron ) ، ثم القيام بكل ما تريده على الحسابات:

صورة
صورة

هندسة إقليدس على شكل هندسة محسوبة



الرياضيات ولغة Wolfram قوية جداً في القيام بكل من الهندسة الحسابية الصريحة والهندسة المتمثلة في الجبر . ولكن ماذا عن الهندسة بالطريقة التي يتم بها في عناصر Euclid - في أي واحد يقوم بتأكيدات هندسية ومن ثم يرى ما هي عواقبها؟

حسنًا ، في الإصدار 12 ، مع برج التكنولوجيا بالكامل الذي قمنا ببنائه ، أصبح بمقدورنا أخيرًا تقديم نمط جديد من الحسابات الرياضية - وهذا في الواقع يعمل على أتمتة ما كان يقوم به Euclid قبل أكثر من 2000 عام. تتمثل الفكرة الرئيسية في تقديم "مشاهد هندسية" رمزية تحتوي على رموز تمثل بنيات مثل النقاط ، ثم لتعريف الكائنات والعلاقات الهندسية من حيثها.

على سبيل المثال ، إليك مشهدًا هندسيًا يمثل مثلث a و b و c ودائرة من خلال a و b و c ، مع الوسط o ، مع القيد الذي هو o عند نقطة المنتصف للخط من a إلى c :

صورة

هذا بحد ذاته شيء رمزي. ولكن يمكننا أن نفعل العمليات على ذلك. على سبيل المثال ، يمكننا أن نطلب نسخة عشوائية منه ، والتي تكون فيها a و b و c و o محددة:

صورة

يمكنك إنشاء العديد من الحالات العشوائية كما تريد. نحاول جعل الحالات عامة بقدر الإمكان ، دون أي مصادفات لا تفرضها القيود:

صورة

حسنًا ، ولكن الآن دعونا "نلعب Euclid" ، ونجد التخمينات الهندسية المتسقة مع الإعداد لدينا:

صورة

لمشهد هندسي معين ، قد يكون هناك الكثير من التخمينات الممكنة. نحن نحاول اختيار تلك مثيرة للاهتمام. في هذه الحالة ، نتوصل إلى اثنين - وما هو موضح هو الأول: أن الخط ba عمودي على الخط cb. كما يحدث ، تظهر هذه النتيجة فعليًا في Euclid (في الكتاب 3 ، كجزء من العرض 31 ) - على الرغم من أنها تسمى عادة نظرية Thales .

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

صورة

في 12.0 هناك الكثير من الوظائف الهندسية الجديدة والمفيدة التي تعمل على إحداثيات واضحة:

صورة
صورة

بالنسبة للمثلثات ، يوجد 12 نوعًا من "المراكز" المدعومة ، ونعم ، يمكن أن يكون هناك إحداثيات رمزية:

صورة

ولدعم إعداد البيانات الهندسية ، نحتاج أيضًا إلى " تأكيدات هندسية ". في 12.0 ، يوجد 29 نوعًا مختلفًا - مثل "Parallel" ، و "Congruent" ، و "Tangent" ، و "Convex" ، إلخ. فيما يلي ثلاث دوائر تم التأكيد عليها بأنها الظل المماثل:

صورة

الذهاب فائقة رمزية مع النظريات البديهية



الإصدار 11.3 قدم FindEquationalProof لتوليد تمثيل رمزي للبراهين . ولكن ما البديهيات التي ينبغي استخدامها لهذه البراهين؟ الإصدار 12.0 يقدم AxiomaticTheory ، والذي يعطي البديهيات لمختلف نظريات البديهية الشائعة.

إليك نظام البديهية المفضل لدي الشخصي :

صورة

ماذا يعني هذا؟ بمعنى أنه تعبير رمزي أكثر مما اعتدنا عليه. في شيء مثل 1 + x لا نقول ما هي قيمة x ، لكننا نتخيل أنه يمكن أن يكون لها قيمة. في التعبير أعلاه ، تمثل a و b و c "رموزًا رسمية" خالصة تخدم دورًا هيكليًا أساسيًا ولا يمكن اعتبارها ذات قيم محددة.

ماذا عن النقطة المركزية؟ في 1 + x نعرف ماذا تعني +. لكن المقصود أن يكون المشغل مجردة بحتة. الهدف من البديهية هو في الواقع تحديد قيد على ما يمكن أن يمثله. في هذه الحالة بالذات ، اتضح أن البديهية هي بديهية للجبر المنطقي ، بحيث يمكن أن تمثل Nand و Nor . ولكن يمكننا استنتاج عواقب البديهية بشكل رسمي تمامًا ، على سبيل المثال مع FindEquationalProof :

صورة

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

صورة

ماذا تفعل "ناند" هناك؟ إنه اسم للمشغل (ولكن لا ينبغي تفسيره على أنه أي شيء يتعلق بقيمة المشغل). في البديهيات لنظرية المجموعة ، على سبيل المثال ، تظهر العديد من العوامل:

صورة

هذا يعطي التمثيل الافتراضي للعديد من العوامل هنا:

صورة

تعرف النظرية البديهية حول النظريات البارزة لأنظمة بديهية معينة:

صورة

تم تقديم الفكرة الأساسية للرموز الرسمية في الإصدار 7 ، لفعل أشياء مثل تمثيل المتغيرات الوهمية في بنيات تم إنشاؤها مثل هذه:

صورة
صورة
صورة

يمكنك إدخال رمز رسمي باستخدام \ [FormalA] أو Esc ، a ، Esc ، إلخ. لكن مرة أخرى في الإصدار 7 ،
\ [الفورمالا] تم تقديمه ك. وهذا يعني أن التعبير أعلاه يشبه:

صورة

اعتقدت دائما أن هذا بدا معقدا بشكل لا يصدق. وبالنسبة للنسخة 12 ، أردنا تبسيطها. لقد جربنا العديد من الاحتمالات ، لكن في النهاية استقرنا على النقاط السفلية الرمادية الفردية - والتي أعتقد أنها تبدو أفضل بكثير.

في AxiomaticTheory ، كل من المتغيرات والعوامل "رمزية بحتة". ولكن هناك شيء واحد مؤكد هو arity لكل مشغل ، والذي يمكن للمرء أن يسأل AxiomaticTheory :

صورة
صورة

بسهولة ، يمكن تغذية تمثيل المشغلين والعناصر في المجموعات على الفور ، للحصول على تعبيرات محتملة تتضمن متغيرات معينة:

صورة

مشكلة ن الجسم



تمثل النظريات البديهية منطقة تاريخية كلاسيكية للرياضيات. منطقة تاريخية كلاسيكية أخرى - أكثر بكثير على الجانب التطبيقي - هي مشكلة n -body . الإصدار 12.0 يقدم NBodySimulation ، والذي يعطي محاكاة لمشكلة الجسم n. فيما يلي مشكلة ثلاثية الجسم (فكر في Earth-Moon-Sun ) في ظروف أولية معينة (وقانون القوة العكسية المربعة):

صورة

يمكنك أن تسأل عن جوانب مختلفة من الحل ؛ هذا يرسم المواقف كدالة للوقت:

صورة

تحتها ، هذا هو مجرد حل المعادلات التفاضلية ، ولكن - مثل SystemModel - يوفر NBodySimulation طريقة مناسبة لإعداد المعادلات والتعامل مع حلولها. ونعم ، تم بناء قوانين القوة القياسية ، ولكن يمكنك تحديد قوانينك الخاصة.

امتدادات اللغة والراحة



لقد قمنا بتلميع جوهر لغة Wolfram منذ أكثر من 30 عامًا ، وفي كل إصدار متتالي نصل إلى تقديم بعض الإضافات ووسائل الراحة الجديدة.

لدينا معلومات الوظيفة منذ الإصدار 1.0 ، لكن في 12.0 قمنا بتوسيعها إلى حد كبير. كانت تستخدم فقط لإعطاء معلومات حول الرموز (على الرغم من أنه تم تحديثها أيضًا):

صورة

لكنه الآن يقدم أيضًا معلومات حول الكثير من أنواع الكائنات. إليك معلومات عن مصنف:

صورة

فيما يلي معلومات حول كائن سحابة:

صورة

حرك مؤشر الماوس فوق الملصقات الموجودة في "مربع المعلومات" ويمكنك معرفة أسماء الخصائص المطابقة:

صورة

بالنسبة للكيانات ، تقدم المعلومات ملخصًا لقيم الممتلكات المعروفة:

صورة

خلال الإصدارات القليلة الماضية ، قدمنا ​​الكثير من أشكال عرض الملخصات الجديدة. في الإصدار 11.3 قدمنا Iconize ، والتي هي في الأساس وسيلة لإنشاء نموذج عرض موجز لأي شيء. لقد أثبت Iconize أنه أكثر فائدة مما توقعنا في البداية. إنه أمر رائع لإخفاء التعقيدات غير الضرورية في دفاتر الملاحظات وفي أجزاء من رمز Wolfram Language. في 12.0 ، أعدنا تصميم طريقة عرض Iconize ، خاصة لجعلها "تقرأ بشكل جيد" داخل التعبيرات والرمز.

يمكنك رمز أي شيء بشكل صريح:

صورة

اضغط على + وسترى بعض التفاصيل:

صورة

صحافة صورة وستحصل على التعبير الأصلي مرة أخرى:

صورة

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

عندما تكتب الشفرة ، يكون من المريح غالبًا أن "ترمز إلى المكان". تتيح لك قائمة النقر بزر الماوس الأيمن الآن القيام بذلك:

صورة

نتحدث عن العرض ، إليك شيء صغير ولكنه مريح أضفناه في 12.0:

صورة

وإليك بعض "وسائل الراحة" الأخرى التي أضفناها:

صورة
صورة

كانت البرمجة الوظيفية دائمًا جزءًا أساسيًا من لغة Wolfram. لكننا نتطلع باستمرار إلى توسيع نطاقه ، وتقديم بدايات جديدة مفيدة بشكل عام. مثال في الإصدار 12.0 هو SubsetMap :

صورة
صورة

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

لقد بدأت صياغة ما هو الآن SubsetMap منذ حوالي عام. لقد أدركت بسرعة أنه في الحقيقة كان بإمكاني استخدام هذه الوظيفة في جميع أنواع الأماكن على مر السنين. ولكن ما الذي يجب أن يطلق عليه "كتلة العمل الحسابي"؟ كان اسم العمل الأولي هو ArrayReplaceFunction (والذي اختصرته إلى ARF في ملاحظاتي). في سلسلة من الاجتماعات (الحية) ذهبنا جيئة وذهابا. كانت هناك أفكار مثل ApplyAt (ولكنها ليست حقًا تنطبق ) و MutateAt (لكنها لا تقوم بإجراء طفرة بالمعنى الحقيقي للقيمة ) ، وكذلك RewriteAt و ReplaceAt و MultipartApply و ConstructInPlace . كانت هناك أفكار حول أشكال " أداة تزيين الوظائف" ، مثل PartAppliedFunction و PartwiseFunction و AppliedOnto و AppliedAcross و MultipartCurry .

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

المزيد من وظائف التعلم الآلي



لسنوات عديدة ، عملنا بجد لجعل Wolfram Language أعلى نظام وأتمتة لأداء أحدث تقنيات التعلم . في وقت مبكر ، قدمنا ​​"الوظائف الفائقة" التصنيف والتنبؤ التي تقوم بمهام التصنيف والتنبؤ بطريقة آلية بالكامل ، وتختار تلقائيًا أفضل طريقة للإدخال المعين المحدد. على طول الطريق ، قدمنا ​​وظائف فائقة أخرى - مثل SequencePredict و ActiveClassification و FeatureExtract .

في الإصدار 12.0 ، لدينا العديد من وظائف التعلم الآلي الجديدة المهمة. يوجد FindAnomalies ، والذي يجد "العناصر الشاذة" في البيانات:

صورة

مع هذا ، هناك DeleteAnomalies ، التي تحذف العناصر التي تعتبرها غير طبيعية :

صورة

هناك أيضًا SynthesizeMissingValues ، الذي يحاول إنشاء قيم معقولة لأجزاء البيانات المفقودة:

صورة

كيف تعمل هذه الوظائف؟ تعتمد جميعها على وظيفة جديدة تسمى LearnDistribution ، والتي تحاول معرفة التوزيع الأساسي للبيانات ، مع تقديم مجموعة معينة من الأمثلة. إذا كانت الأمثلة مجرد أرقام ، فستكون هذه في الأساس مشكلة إحصائية قياسية ، والتي يمكننا من خلالها استخدام شيء ما مثل EstimDistribution . لكن النقطة حول LearnDistribution هي أنه يعمل مع البيانات من أي نوع ، وليس فقط الأرقام. هنا تتعلم توزيعًا أساسيًا لمجموعة من الألوان:

صورة

بمجرد أن يكون لدينا هذا "التوزيع المكتسب" ، يمكننا أن نفعل كل أنواع الأشياء به. على سبيل المثال ، هذا يولد 20 عينة عشوائية منه:

صورة

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

ومثلما يحدث بالنسبة للتوزيع الرقمي العادي ، يمكننا حساب PDF لمقطع معين من البيانات. من المحتمل أن يكون اللون الأرجواني في ضوء توزيع الألوان التي تعلمناها من أمثلةنا:

صورة

لكن اللون الأحمر غير محتمل حقًا:

صورة

بالنسبة إلى التوزيعات العددية العادية ، هناك مفاهيم مثل CDF تخبرنا بالاحتمالات التراكمية ، قل أننا سنحصل على نتائج "أبعد من القيمة". بالنسبة لمساحات الأشياء التعسفية ، لا يوجد حقًا مفهوم "المزيد". لكننا توصلنا إلى وظيفة نسميها RarerProbability ، والتي تخبرنا ما هو الاحتمال الكلي لإنشاء مثال بتنسيق PDF أصغر من شيء نقدمه:

صورة
صورة

الآن لدينا طريقة لوصف الحالات الشاذة: إنها مجرد نقاط بيانات لها احتمال نادر للغاية. وفي الحقيقة ، يحتوي FindAnomalies على خيار AcceptanceThreshold (بقيمة افتراضية 0.001) يحدد ما يجب اعتباره "صغير جدًا".

حسنًا ، ولكن دعونا نرى هذا العمل على شيء أكثر تعقيدًا من الألوان. دعنا ندرب كاشفًا شاذًا من خلال النظر في 1000 مثال من الأرقام المكتوبة بخط اليد:

صورة

الآن يمكن لـ FindAnomalies أن تخبرنا ما هي الأمثلة الشاذة:

صورة

الأحدث في الشبكات العصبية



قدمنا ​​أولاً إطارنا الرمزي لبناء واستكشاف واستخدام الشبكات العصبية في عام 2016 ، كجزء من الإصدار 11. وفي كل إصدار منذ ذلك الحين أضفنا جميع أنواع الميزات الحديثة. في يونيو 2018 قدمنا مستودعاتنا Neural Net Repository لتسهيل الوصول إلى أحدث موديلات الشبكات العصبية من Wolfram Language - وبالفعل ، يوجد ما يقرب من 100 عارض برعاية من أنواع مختلفة كثيرة في المستودع ، مع إضافة نماذج جديدة طوال الوقت.

لذلك إذا كنت بحاجة إلى أحدث شبكة BERT "للمحول" العصبية (التي تمت إضافتها اليوم!) ، يمكنك الحصول عليها من NetModel :

صورة

يمكنك فتح هذا الأمر ورؤية الشبكة المعنية (ونعم ، لقد قمنا بتحديث عرض الرسوم البيانية الصافية للإصدار 12.0):

صورة

ويمكنك استخدام الشبكة فورًا ، هنا لإنتاج مجموعة من "ميزات معنى":

صورة

في الإصدار 12.0 قدمنا ​​العديد من أنواع الطبقات الجديدة - لا سيما AttentionLayer ، والذي يتيح للمرء إعداد أحدث بنيات "المحولات" - وعززنا قدراتنا "البرمجة الوظيفية الصافية العصبية" ، مع أشياء مثل NetMapThreadOperator NetFoldOperator . بالإضافة إلى هذه التحسينات "داخل الشبكة" ، يضيف الإصدار 12.0 جميع أنواع حالات NetEncoder و NetDecoder الجديدة ، مثل الرمز المميز BPE للنص بمئات اللغات ، والقدرة على تضمين وظائف مخصصة للحصول على البيانات من وإلى شبكات العصبية.

لكن بعض التحسينات الأكثر أهمية في الإصدار 12.0 هي بنية أساسية أكثر. يدعم NetTrain الآن التدريب متعدد الجرافيك ، بالإضافة إلى التعامل مع الحسابات الدقيقة المختلطة ، ومعايير التوقف المبكرة المرنة. نحن مستمرون في استخدام إطار عمل الشبكة العصبية ذي المستوى المنخفض من MXNet (الذي كنا مشاركين رئيسيين فيه ) - حتى نتمكن من الاستفادة من أحدث تحسينات الأجهزة. هناك خيارات جديدة لمعرفة ما يحدث أثناء التدريب ، وهناك أيضًا NetMeasurements التي تتيح لك إجراء 33 نوعًا مختلفًا من القياسات على أداء الشبكة:

صورة

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

الحوسبة مع الصور



قدمنا ImageIdentify ، لتحديد ما هي صورة ، مرة أخرى في الإصدار 10.1. في الإصدار 12.0 تمكنا من تعميم هذا ، ليس فقط لمعرفة ما هي الصورة ، ولكن أيضا ما في الصورة. لذلك ، على سبيل المثال ، ستظهر لنا ImageCases حالات أنواع معروفة من الكائنات في صورة ما:

صورة

لمزيد من التفاصيل ، يعطي ImageContents مجموعة بيانات حول محتويات الصورة:

صورة

يمكنك إخبار ImageCases بالبحث عن نوع معين من الأشياء:

صورة

ويمكنك أيضًا اختبار لمعرفة ما إذا كانت الصورة تحتوي على نوع معين من الأشياء:

صورة

بمعنى ما ، يشبه ImageCases إصدارًا عامًا من FindFaces ، للعثور على الوجوه البشرية في صورة ما. هناك شيء جديد في الإصدار 12.0 وهو أن FindFaces و FaceialFeatures أصبحت أكثر فاعلية وقوة - مع FindFaces الآن يعتمد على الشبكات العصبية بدلاً من معالجة الصور الكلاسيكية ، وأصبحت شبكة FaceialFeatures الآن 10 ميجابايت بدلاً من 500 ميجابايت:

صورة

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

مثال في الإصدار 12.0 هو إطار عمل ImagePyramid ، لإجراء معالجة الصور متعددة النطاقات:

صورة

هناك العديد من الوظائف الجديدة في الإصدار 12.0 المعنية بحساب اللون. الفكرة الأساسية هي ColorsNear ، والتي تمثل حيًا في فراغ اللون الحسي ، هنا حول اللون Pink :

صورة

يمكن استخدام فكرة الأحياء اللونية ، على سبيل المثال ، في وظيفة ImageRecolor الجديدة:

صورة

التعرف على الكلام وأكثر مع الصوت



عندما أجلس على جهاز الكمبيوتر الخاص بي أكتب هذا ، سأقول شيئًا لجهاز الكمبيوتر الخاص بي ، وألتقطه :

صورة

إليكم طيفًا للصوت الذي التقطته:

صورة

حتى الآن يمكننا القيام بذلك في الإصدار 11.3 (على الرغم من أن Spectrogram حصلت على 10 مرات أسرع في 12.0). ولكن الآن هنا شيء جديد:

صورة

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

في الوقت الحالي ، نعتبر " التعرف على الكلام" تجريبيًا ، وسنواصل تحسينه. ولكن من المثير للاهتمام أن نرى مهمة حسابية كبيرة أخرى تصبح مجرد وظيفة واحدة في لغة Wolfram.

في الإصدار 12.0 ، هناك تحسينات أخرى أيضًا. يدعم SpeechSynthesize اللغات الجديدة والأصوات الجديدة (كما هو موضح بواسطة VoiceStyleData []).

يوجد الآن WebAudioSearch - غير مكافئ لـ WebImageSearch - يتيح لك البحث عن الصوت على الويب:

صورة

يمكنك استرداد كائنات الصوت الفعلية:

صورة

ثم يمكنك عمل برامج طيفية أو قياسات أخرى:

صورة

ثم - الجديد في الإصدار 12.0 - يمكنك استخدام AudioIdentify لمحاولة تحديد فئة الصوت (هل هذا الديك يتحدث؟):

صورة

ما زلنا نعتبر AudioIdentify التجريبية. إنها بداية مثيرة للاهتمام ، لكنها بالتأكيد لا تعمل ، مثل ImageIdentify .

تتمثل وظيفة الصوت الأكثر نجاحًا في PitchRecognize ، التي تحاول التعرف على التردد السائد في إشارة صوتية (تستخدم كلا من أساليب الشبكة "الكلاسيكية" والعصبية). لا يمكن بعد التعامل مع "الحبال" ، لكنه يعمل بشكل مثالي إلى حد كبير على "الملاحظات الفردية".

عندما يتعامل المرء مع الصوت ، غالبًا ما لا يريد المرء فقط تحديد ما هو موجود في الصوت ، ولكن أيضًا التعليق عليه. الإصدار 12.0 يقدم بداية إطار صوتي واسع النطاق. في الوقت الحالي ، يمكن لـ AudioAnnotate تحديد المكان الذي يوجد فيه صمت ، أو حيث يوجد شيء بصوت عالٍ. في المستقبل ، سنقوم بإضافة تعريف المتكلم وحدود الكلمات ، والكثير غيرها. وللمواكبة مع ذلك ، لدينا أيضًا وظائف مثل AudioAnnotationLookup ، لالتقاط أجزاء من كائن صوتي تم شرحه بطرق معينة.

تحت كل هذه الوظيفة الصوتية عالية المستوى ، هناك بنية أساسية كاملة للمعالجة الصوتية منخفضة المستوى. الإصدار 12.0 يعزز إلى حد كبير AudioBlockMap (لتطبيق المرشحات على الإشارات الصوتية) ، وكذلك يقدم وظائف مثل ShortTimeFourier .

يمكن رؤية الطيفية مثل التناظرية المستمرة لدرجة موسيقية ، حيث يتم رسم الملاعب كدالة للوقت. في الإصدار 12.0 ، يوجد الآن InverseSpectrogram - ينتقل من مجموعة من البيانات الطيفية إلى الصوت. منذ الإصدار 2 في عام 1991 ، كان لدينا تشغيل لتوليد الصوت من وظيفة (مثل Sin [100 t]). الآن مع Inverse Spectrogram لدينا طريقة للانتقال من "الصورة النقطية لوقت التردد" إلى الصوت. (ونعم ، هناك مشكلات صعبة حول أفضل التخمينات للمراحل عندما يكون لدى واحد فقط معلومات ضخمة.)

معالجة اللغة الطبيعية



بدءًا من Wolfram | Alpha ، كان لدينا قدرات قوية في فهم اللغة الطبيعية (NLU) لفترة طويلة. وهذا يعني أنه بالنظر إلى جزء من اللغة الطبيعية ، فإننا نفهمها على أنها لغة ولفرام - حيث يمكننا بعد ذلك أن نحسب ونحسب من:

صورة

ولكن ماذا عن معالجة اللغة الطبيعية (NLP) - في المكان الذي نأخذ فيه مقاطع طويلة من اللغة الطبيعية ، ولا نحاول فهمها تمامًا ، ولكن بدلاً من ذلك نعثر فقط على ميزات معينة أو نعالجها؟ لقد منحتنا وظائف مثل TextSentences و TextStructure و TextCases و WordCounts القدرات الأساسية في هذا المجال لفترة من الوقت. لكن في الإصدار 12.0 - من خلال الاستفادة من أحدث تقنيات التعلم الآلي ، بالإضافة إلى قدرات NLU وطويلة الأمد الخاصة بنا - قفزنا الآن إلى وجود قدرات قوية للغاية في البرمجة اللغوية العصبية.

محور هو نسخة محسنة بشكل كبير من TextCases . الهدف الأساسي من TextCases هو البحث عن حالات لأنواع مختلفة من المحتوى في جزء من النص. مثال على ذلك مهمة NLP الكلاسيكية المتمثلة في "التعرف على الكيانات" - حيث تجد TextCases هنا أسماء البلدان التي تظهر في مقالة Wikipedia حول ocelots :

صورة

يمكن أن نسأل أيضًا عن الجزر المذكورة ، لكن الآن لن نطلب تفسير لغة Wolfram:

صورة

حقائب Text Text ليست مثالية ، لكنها جيدة:

صورة

يدعم مجموعة كاملة من أنواع المحتوى المختلفة أيضًا:

صورة

يمكنك أن تطلب منه العثور على الضمائر ، أو البنود أو الكميات النسبية المخفضة ، أو عناوين البريد الإلكتروني ، أو تواجد أي من 150 نوعًا من الكيانات (مثل الشركات أو النباتات أو الأفلام ). يمكنك أيضًا أن تطلب منه اختيار نصوص خاصة بلغات الإنسان أو الكمبيوتر ، أو التي تتناول موضوعات معينة (مثل السفر أو الصحة ) ، أو التي لديها شعور إيجابي أو سلبي . ويمكنك استخدام تصميمات مثل Containing لطلب مجموعات من هذه الأشياء (مثل عبارات الاسم التي تحتوي على اسم النهر):

صورة

يتيح لك TextContents رؤية ، على سبيل المثال ، تفاصيل جميع الكيانات التي تم اكتشافها في جزء معين من النص:

صورة

ونعم ، يمكن للمرء من حيث المبدأ استخدام هذه القدرات من خلال FindTextualAnswer لمحاولة الإجابة على الأسئلة من النص - ولكن في مثل هذه الحالة ، يمكن أن تكون النتائج غريبة للغاية:

صورة

بالطبع ، يمكنك الحصول على إجابة حقيقية من قاعدة المعرفة الفعلية المضمنة لدينا:

صورة

بالمناسبة ، في الإصدار 12.0 أضفنا مجموعة متنوعة من "وظائف راحة اللغة الطبيعية" الصغيرة ، مثل المرادفات والمتضادات :

صورة

الكيمياء الحاسوبية



واحدة من المجالات الجديدة "المفاجئة" في الإصدار 12.0 هي الكيمياء الحاسوبية. لدينا بيانات عن المواد الكيميائية المعروفة الصريحة في قاعدة معارفنا لفترة طويلة. لكن في الإصدار 12.0 ، يمكننا حساب الجزيئات المحددة ببساطة كأشياء رمزية خالصة. إليك كيف يمكننا تحديد ما يتبين أنه جزيء ماء:

صورة

وإليك كيفية تقديم عرض ثلاثي الأبعاد:

صورة

يمكننا التعامل مع "المواد الكيميائية المعروفة":

صورة

يمكننا استخدام أسماء IUPAC التعسفية:

صورة

أو نحن "نصنع" المواد الكيميائية ، على سبيل المثال تحديدها بواسطة سلاسل SMILES الخاصة بها:

صورة

لكننا لسنا مجرد توليد الصور هنا. يمكننا أيضًا حساب الأشياء من التماثلات الشبيهة بالهيكل:

صورة

بالنظر إلى الجزيء ، يمكننا أن نفعل أشياء مثل إبراز روابط الكربون بالأكسجين:

صورة

أو قم بتمييز الهياكل ، على سبيل المثال المحدد بواسطة سلاسل SMARTS (هنا أي حلقة من 5 أعضاء):

صورة

يمكنك أيضًا إجراء عمليات بحث عن "أنماط الجزيئات" ؛ النتائج تأتي من حيث أعداد الذرة:

صورة

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

الحوسبة الجغرافية الموسعة



تمتلك لغة Wolfram بالفعل قدرات قوية للحوسبة الجغرافية ، ولكن الإصدار 12.0 يضيف المزيد من الوظائف ، ويعزز بعض تلك التي كانت موجودة بالفعل.

على سبيل المثال ، يوجد الآن RandomGeoPosition ، الذي ينشئ موقعًا عشوائيًا طويلًا. قد يعتقد المرء أن هذا سيكون تافهاً ، لكن بالطبع يجب على المرء أن يقلق بشأن تنسيق التحولات - وما يجعله أكثر تافهاً هو أنه يمكن للمرء أن يقول ذلك لاختيار نقاط فقط داخل منطقة معينة ، وهنا بلد فرنسا:

صورة

موضوع لا تتعامل القدرات الجغرافية الجديدة في الإصدار 12.0 مع النقاط والمناطق الجغرافية فحسب ، بل تتعامل أيضًا مع المتجهات الجغرافية. إليك ناقلات الرياح الحالية ، على سبيل المثال ، في موقع برج إيفل ، ممثلة في GeoVector، مع السرعة والاتجاه (يوجد أيضًا GeoVectorENU ، والذي يعطي المكونات الشرقية والشمالية والأعلى ، وكذلك GeoGridVector و GeoVectorXYZ ):

صورة

تتيح لك وظائف مثل GeoGraphics رؤية متجهات جغرافية منفصلة. GeoStreamPlot هو التناظرية الجغرافية لـ StreamPlot (أو ListStreamPlot ) - ويظهر خطوطًا منسقة من المتجهات الجغرافية (هنا من WindDirectionData ):

صورة

الجيوديسية هي منطقة متطورة رياضياً ، ونحن نفخر بالقيام بها جيدًا في Wolfram Language. في الإصدار 12.0 ، أضفنا بعض الوظائف الجديدة لملء بعض التفاصيل. على سبيل المثال ، لدينا الآن وظائف مثل GeoGridUnitDistance و GeoGridUnitArea التي تعطي التشويه (أساسًا ، القيم الذاتية لجاكوبي) المرتبطة بالإسقاطات الجغرافية المختلفة في كل موضع على الأرض (أو القمر ، المريخ ، إلخ).

الكثير من التحسينات التصور قليلا



أحد اتجاهات التصور التي نطورها بشكل مطرد هو ما يمكن للمرء أن يسميه "الرسومات الوصفية": وضع العلامات والتعليق على الأشياء الرسومية. قدمنا وسيلة شرح في الإصدار 11.0 ؛ في الإصدار 12.0 ، تم توسيعه ليشمل أشياء مثل الرسومات ثلاثية الأبعاد:

صورة

من الجيد معرفة مكان تسمية الأشياء ، حتى عندما تكون معقدة بعض الشيء:

صورة

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

هناك ميزة جديدة أخرى في الإصدار 12.0 وهي تخطيط مخطط multanel ، حيث يتم عرض مجموعات بيانات مختلفة في لوحات مختلفة ، لكن اللوحات تشترك في محاور كلما أمكن ذلك:

صورة

تشديد تكامل قاعدة المعرفة



قاعدة معارفنا المنسقة - والتي على سبيل المثال تعمل على إدارة Wolfram | ألفا - واسعة ومتنامية باستمرار. ومع كل إصدار من لغات Wolfram ، نقوم بتشديد اندماجها تدريجياً في صلب اللغة.

في الإصدار 12.0 ، أحد الأشياء التي نقوم بها هو كشف مئات أنواع الكيانات مباشرةً باللغة:

صورة

قبل الإصدار 12.0 ، كانت صفحات مثال Wolfram | Alpha بمثابة وكيل لتوثيق العديد من أنواع الكيانات. ولكن الآن توجد وثائق Wolfram Language بالنسبة لهم:

صورة

لا تزال هناك وظائف مثل SatelliteData و WeatherData و FinancialDataالتي تتعامل مع أنواع الكيانات التي تحتاج بشكل روتيني إلى اختيار معقدة أو حساب. ولكن في الإصدار 12.0 ، يمكن الوصول إلى كل نوع كيان بالطريقة نفسها ، بإدخال اللغة الطبيعية ("التحكم + =") ، والكيانات والخصائص "ذات المربع الأصفر":

صورة

بالمناسبة ، يمكن للمرء أيضًا استخدام الكيانات ضمنيًا ، مثل هنا نسأل عن العناصر الخمسة ذات أعلى نقاط انصهار معروفة:

صورة

ويمكن للمرء استخدام Dated للحصول على سلسلة زمنية من القيم:

صورة

دمج البيانات الكبيرة من قواعد البيانات الخارجية



لقد جعلنا من المريح حقًا العمل مع البيانات المدمجة في قاعدة المعرفة Wolfram . لديك كيانات ، ومن السهل للغاية أن تسأل عن العقارات وما إلى ذلك:

صورة

ولكن ماذا لو كان لديك بياناتك الخاصة؟ يمكنك إعداده حتى تتمكن من استخدامه بهذه السهولة؟ كانت إحدى الميزات الرئيسية الجديدة للإصدار 11 هي إضافة EntityStore ، حيث يمكن للشخص تحديد أنواع الكيانات الخاصة به ، ثم تحديد الكيانات والخصائص والقيم.

من و من ولفرام مستودع البيانات ويحتوي على مجموعة من الأمثلة من مخازن كيان . إليك أحد الأنواع :

صورة

يصف نوع كيان واحد: "SWLibraryBook" . لتكون قادرًا على استخدام كيانات من هذا النوع تمامًا مثل الكيانات المضمّنة ، نقوم "بتسجيل" مخزن الكيان:

صورة

الآن يمكننا القيام بأشياء مثل طلب 10 كيانات عشوائية من النوع "SWLibraryBook" :

صورة

لكل كيان في مخزن الكيانات مجموعة متنوعة من الخصائص. فيما يلي مجموعة بيانات عن قيم الخصائص لكيان معين:

صورة

حسنًا ، ولكن من خلال هذا الإعداد ، نقرأ أساسًا المحتويات الكاملة لمخزن كيان في الذاكرة. هذا يجعلها فعالة للغاية للقيام بكل ما تريده عمليات Wolfram Language. لكنه ليس حلاً جيدًا قابلاً للتطوير لكميات كبيرة من البيانات - على سبيل المثال ، البيانات أكبر من أن يتم احتواؤها في الذاكرة.

ولكن ما هو مصدر نموذجي للبيانات الكبيرة؟ غالبًا ما تكون قاعدة بيانات ، وعادةً ما تكون قاعدة بيانات علائقية يمكن الوصول إليها باستخدام SQL . لدينا حزمة DatabaseLink الخاصة بنا من أجل الوصول للقراءة والكتابة على مستوى منخفض لقواعد بيانات SQL لأكثر من عقد. لكننا في الإصدار 12.0 نضيف بعض الميزات المضمنة الرئيسية التي تسمح بمعالجة قواعد البيانات العلائقية الخارجية في Wolfram Language تمامًا مثل مخازن الكيانات ، أو الأجزاء المدمجة في Wolfram Knowledgebase.

لنبدأ مع مثال لعبة. فيما يلي عرض رمزي لقاعدة بيانات علائقية صغيرة يتم تخزينها في ملف: على

صورة

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

صورة

يمكننا بعد ذلك إعداد قاعدة البيانات العلائقية هذه كمتجر كيان بلغة Wolfram. يشبه إلى حد كبير مخزن كيان مكتبة الكتب أعلاه ، ولكن الآن لا يتم سحب البيانات الفعلية إلى الذاكرة ؛ بدلاً من ذلك ، لا يزال في قاعدة البيانات العلائقية الخارجية ، ونقوم فقط بتحديد مناظرة ("ORM-like") للكيانات في Wolfram Language:

صورة

الآن يمكننا تسجيل مخزن الكيانات هذا ، الذي يقوم بإعداد مجموعة من أنواع الكيانات التي يتم تسميتها (على الأقل افتراضيًا) بعد أسماء الجداول في قاعدة البيانات:

صورة

والآن يمكننا أن نفعل "حسابات الكيانات" على هذه ، تمامًا مثلنا سوف على الكيانات المضمنة في قاعدة المعرفة Wolfram. يتوافق كل كيان هنا مع صف في جدول "الموظفين" في قاعدة البيانات:

صورة

بالنسبة لنوع كيان معين ، يمكننا أن نسأل عن خصائصه. تتوافق "الخصائص" هذه مع الأعمدة الموجودة في الجدول في قاعدة البيانات الأساسية:

صورة

يمكننا الآن أن نطلب قيمة خاصية معينة لكيان معين:

صورة

يمكننا أيضًا انتقاء الكيانات عن طريق إعطاء معايير ؛ نحن هنا نطلب الكيانات "المدفوعات" مع أكبر 4 قيم لخاصية "المبلغ":

صورة

يمكننا أن نسأل بنفس القدر عن قيم هذه الكميات الأكبر:

صورة

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

على سبيل المثال ، دعنا نتصل بقاعدة بيانات OpenGreetSap PostgreSQL بحجم تيرابايت التي تحتوي على خريطة الشارع في العالم:

صورة

كما كان من قبل ، دعنا نسجل الجداول في قاعدة البيانات هذه كأنواع كيانات. مثل معظم قواعد البيانات الداخلية ، هناك بعض الثغرات في الهيكل ، والتي تعمل حولها ، ولكنها تولد تحذيرات:

صورة

ولكن الآن يمكننا طرح أسئلة حول قاعدة البيانات - مثل عدد النقاط الجغرافية أو "العقد" الموجودة في كل الشوارع من العالم (ونعم ، إنه رقم كبير ، ولهذا السبب قاعدة البيانات كبيرة):

صورة

هنا نطلب أسماء الكائنات مع 10 أكبر (المسقطة) المناطق في الجدول (101 غيغابايت) planet_osm_polygon ( ونعم ، يستغرق الأمر أقل من ثانية):

صورة

إذن كيف يعمل كل هذا؟ ما يحدث بشكل أساسي هو أن تمثيل Wolfram Language الخاص بنا يتم تجميعه في استعلامات SQL منخفضة المستوى التي يتم إرسالها بعد ذلك ليتم تنفيذها مباشرة على خادم قاعدة البيانات.

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

بالعودة إلى قاعدة بيانات الألعاب الخاصة بنا ، إليك مثال على كيفية تحديد فئة من الكيانات التي تم الحصول عليها من خلال تجميع حد الائتمان الإجمالي لجميع العملاء الذين لديهم قيمة معينة للبلد :

صورة

في البداية ، هذا مجرد شيء رمزي. ولكن إذا طلبنا قيمًا محددة ، فسيتم إجراء استعلامات قاعدة البيانات الفعلية ، وحصلنا على نتائج محددة:

صورة

هناك مجموعة من الوظائف الجديدة لإعداد أنواع مختلفة من الاستعلامات. والوظائف في الواقع لا تعمل فقط لقواعد البيانات العلائقية ، ولكن أيضًا لمتاجر الكيانات ، وللقاعدة المعرفة Wolfram. لذلك ، على سبيل المثال ، يمكننا أن نسأل عن متوسط ​​الكتلة الذرية لفترة معينة في الجدول الدوري للعناصر :

صورة

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

صورة
صورة

بالإضافة إلى EntityFunction و AggregatedEntityClass و SortedEntityClass ، يشتمل الإصدار 12.0 على SampledEntityClass (للحصول على عدد قليل من الكيانات من فئة) و ExtendedEntityClass (لإضافة خصائص محسوبة) و CombinedEntityClass (لدمج الخصائص من فئات مختلفة). مع هذه البدائل ، يمكن للمرء بناء جميع العمليات القياسية " الجبر العلائقي ".

في برمجة قاعدة البيانات القياسية ، ينتهي الأمر عادةً بغابة كاملة من "الصلات" و "المفاتيح الخارجية" وما إلى ذلك. يتيح لك تمثيل لغة Wolfram لدينا العمل على مستوى أعلى - حيث تصبح الوصلات أساسًا تركيبة للوظائف وتكون المفاتيح الخارجية أنواع كيانات مختلفة. (إذا كنت تريد إجراء صلات صريحة ، فيمكنك - على سبيل المثال استخدام CombinedEntityClass .)

إن ما يحدث تحت الغطاء هو أن كل هذه التركيبات للغة Wolfram يتم تجميعها في SQL ، أو بشكل أكثر دقة ، لهجة SQL المحددة التي تناسب قاعدة البيانات المعينة التي تستخدمها (نحن نؤيد حاليًا SQLite و MySQL و PostgreSQL و MS -SQL ، مع دعم OracleSQL قريبًا). عندما نقوم بإجراء التحويل البرمجي ، فإننا نتحقق تلقائيًا من الأنواع ، للتأكد من حصولك على استعلام ذي معنى. حتى مواصفات لغة Wolfram البسيطة إلى حد ما يمكن أن ينتهي بها المطاف إلى العديد من أسطر SQL. على سبيل المثال ،

صورة

سوف تنتج SQL المتوسطة التالية (هنا للاستعلام عن قاعدة بيانات SQLite):

صورة

نظام تكامل قواعد البيانات الذي لدينا في الإصدار 12.0 معقد للغاية - ونحن نعمل عليه منذ بضع سنوات. إنها خطوة مهمة للأمام في السماح لـ Wolfram Language بالتعامل مباشرة مع مستوى جديد من "الضخمة" في البيانات الضخمة - والسماح لل Wolfram Language بالقيام مباشرة بعلم البيانات في مجموعات البيانات بحجم تيرابايت وما بعده. مثل العثور على أي كيانات شبيهة بالشوارع في العالم لها "Wolfram" باسمها:

صورة

RDF ، سباركل وكل ذلك



ما هي أفضل طريقة لتمثيل المعرفة حول العالم؟ إنها قضية نوقشت من قبل الفلاسفة (وغيرهم) منذ العصور القديمة. في بعض الأحيان قال الناس أن المنطق هو المفتاح. أحيانا الرياضيات. في بعض الأحيان قواعد البيانات العلائقية. لكننا الآن نعرف على الأقل أساسًا واحدًا قويًا (أو على الأقل ، أنا متأكد من أننا نعرف ذلك): يمكن تمثيل كل شيء بالحساب. هذه فكرة قوية - وهذا ما يجعل كل ما نقوم به مع Wolfram Language ممكنًا.

ولكن هل هناك مجموعات فرعية من الحساب العام مفيدة لتمثيل أنواع معينة على الأقل من المعرفة؟ واحدة التي نستخدمها على نطاق واسع في قاعدة المعرفة Wolframهي فكرة الكيانات ("مدينة نيويورك") والممتلكات ("السكان") وقيمها ("8.6 مليون شخص"). بالطبع لا تمثل هذه الثلاثيات المعرفة في العالم ("ما سيكون موقع المريخ غدًا؟"). لكنها بداية لائقة عندما يتعلق الأمر بأنواع معينة من المعرفة "الثابتة" حول الأشياء المتميزة.

فكيف يمكن للمرء إضفاء الطابع الرسمي على هذا النوع من تمثيل المعرفة؟ إجابة واحدة هي من خلال قواعد البيانات الرسم البياني. وفي الإصدار 12.0 - بالتوافق مع العديد من مشاريع "الويب الدلالي" - نحن ندعم قواعد بيانات الرسم البياني باستخدام RDF ، والاستعلامات ضدها باستخدام SPARQL . في RDF الكائن المركزي هو IRI ("معرف المورد الدولي") ، والذي يمكن أن يمثل كيانًا أو خاصية. يتكون " ثلاثية " بعد ذلك من مجموعة ثلاثية ("الموضوع" ، "المسند" ، "الكائن") ، حيث يكون كل عنصر في كل ثلاثية عبارة عن IRI (أو حرفي ، مثل رقم). يمكن بعد ذلك اعتبار الكائن بأكمله كقاعدة بيانات رسم بياني أو مخزن رسومات بيانية ، أو رسم بياني فرعي. (إنهhypergraph لأن "الحواف" الأصلية يمكن أن تكون أيضًا رؤوسًا في مكان آخر.)

يمكنك إنشاء متجر RDFStore الخاص بك تمامًا مثل إنشاء متجر EntityStore - وفي الواقع ، يمكنك الاستعلام عن أي Wolfram Language EntityStore باستخدام SPARQL تمامًا مثل الاستعلام عن RDFStore . ونظرًا لأنه يمكن معاملة جزء الكيان - الملكية من قاعدة معارف Wolfram كمتجر للكيان ، يمكنك أيضًا الاستعلام عن هذا. إذن هنا ، أخيرًا ، مثال على ذلك. تمثل قائمة البلدات المدينة الكيان [" البلد "] ، الكيان [" المدينة "] في الواقع متجر RDF. ثم SPARQLSelectهو عامل يعمل على هذا المتجر. ما تفعله هو محاولة العثور على الثلاثي الذي يطابق ما تطلبه ، مع قيمة خاصة لمتغير "SPARQL" x:

صورة
صورة

بالطبع ، هناك أيضًا طريقة أبسط كثيرًا للقيام بذلك بلغة Wolfram:

صورة

ولكن مع SPARQL يمكنك القيام بأشياء غريبة أكثر - مثل اسأل عن الخصائص التي تربط الولايات المتحدة بالمكسيك:

صورة

أو ما إذا كان هناك مسار يعتمد على علاقة البلد المجاور من البرتغال إلى ألمانيا: من

صورة

حيث المبدأ ، يمكنك فقط كتابة استعلام SPARQL كسلسلة (تشبه إلى حد ما أنه يمكنك كتابة سلسلة SQL). ولكن ما قمنا به في الإصدار 12.0 هو تقديم تمثيل رمزي لـ SPARQL الذي يسمح بالحساب على التمثيل نفسه ، مما يسهل ، على سبيل المثال ، إنشاء استعلامات SPARQL المعقدة تلقائيًا. (ومن المهم بشكل خاص القيام بذلك لأن استعلامات SPARQL العملية ، من تلقاء نفسها ، عادة ما تكون طويلة جدًا).

حسنًا ، ولكن هل توجد مخازن تابعة لـ RDF في البرية؟ لقد كان أمل طويل الأمد أن يتم تمييز جزء كبير من الويب بشكلٍ كافٍ ليصبح "دلاليًا" ويكون في الواقع متجراً RDF عملاقًا. سيكون أمرا رائعا إذا حدث هذا ، لكنه بالتأكيد لم يحدث. ومع ذلك ، هناك عدد قليل من متاجر RDF العامة هناك ، وكذلك بعض متاجر RDF داخل المؤسسات ، ومع إمكاناتنا الجديدة في الإصدار 12.0 ، نحن في وضع فريد للقيام بأشياء مثيرة للاهتمام معهم.

التحسين العددي



هناك شكل شائع بشكل لا يصدق للمشكلة في التطبيقات الصناعية للرياضيات: "ما التكوين الذي يقلل التكلفة (أو يزيد المردود) إذا كانت هناك قيود معينة يجب تلبيتها؟" منذ أكثر من نصف قرن ، تم اختراع ما يسمى خوارزمية simplex لحل الإصدارات الخطية من هذا النوع من المشاكل ، حيث تكون كل من الوظيفة الموضوعية (التكلفة ، العائد) والقيود وظائف خطية للمتغيرات في المشكلة. بحلول الثمانينيات من القرن الماضي ، تم اختراع أساليب أكثر فاعلية ("النقطة الداخلية") - وكان لدينا هذه الأساليب للقيام بـ " البرمجة الخطية " في لغة ولفرام لفترة طويلة.

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

في الإصدار 12.0 ، لدينا الآن تطبيقات قوية لجميع الفئات القياسية المختلفة من التحسين المحدب. إليك حالة بسيطة ، تتضمن تقليل الشكل التربيعي مع وجود قيود خطية:

صورة

NMinimizeيمكن أن تفعل بالفعل هذه المشكلة بالذات في الإصدار 11.3:

صورة

ولكن إذا كان لدى أحد أكثر المتغيرات ، فإن NMinimize القديم سوف يتعثر بسرعة. ومع ذلك ، في الإصدار 12.0 ، سيستمر التحسين التربيعي في العمل بشكل جيد ، حيث يصل إلى أكثر من 100000 متغير مع وجود أكثر من 100،000 قيود (طالما كانت متفرقة إلى حد ما).

في الإصدار 12.0 ، لدينا وظائف "التحسين المحدب الخام" مثل SemidefiniteOptimization (الذي يعالج عدم المساواة في المصفوفة الخطية) و ConicOptimization (الذي يعالج عدم المساواة في المتجهات الخطية). لكن وظائف مثل NMinimize و FindMinimumسيتعرف أيضًا تلقائيًا على الوقت الذي يمكن فيه حل المشكلة بكفاءة عن طريق التحويل إلى نموذج تحسين محدب.

كيف يمكن للمرء إعداد مشاكل التحسين محدبة؟ أكبر منها تنطوي على قيود على ناقلات كاملة أو مصفوفات المتغيرات. وفي الإصدار 12.0 ، أصبح لدينا الآن وظائف مثل VectorGreaterEqual (الإدخال كـ ≥) التي يمكن أن تمثل هذه على الفور.

تحليل العناصر غير الخطية المحدودة



المعادلات التفاضلية الجزئية صعبة ، ونحن نعمل على إيجاد طرق أكثر تطوراً وعامة للتعامل معها لمدة 30 عامًا. قدمنا NDSolve لأول مرة (للمواد المستنفدة للأوزون) في الإصدار 2 ، مرة أخرى في عام 1991 . كان لدينا أول (1 + 1-الأبعاد) PDEs العددية لدينا بحلول منتصف 1990s. في عام 2003 قدمنا ​​إطارنا المعياري القوي لمعالجة المعادلات التفاضلية العددية. ولكن فيما يتعلق بمعدات PDE ، ما زلنا نتعامل بشكل أساسي مع مناطق بسيطة ومستطيلة. لتخطي هذا المطلوب بناء نظام الهندسة الحسابية بالكامل ، والذي قدمناه في الإصدار 10. وبهذا ، أصدرنا أول مُحلِّلات PDE للعناصر المحدودة . في الإصدار 11 ، قمنا بعد ذلك بتعميم مشاكل eigen .

الآن ، في الإصدار 12 ، نعرض تعميماً رئيسياً آخر: تحليل العناصر المحدودة غير الخطية. يتضمن تحليل العناصر المحدودة المناطق المتحللة إلى مثلثات صغيرة منفصلة ، رباعي الاسطح ، وما إلى ذلك - والتي يمكن تقريبها من خلال عدد كبير من المعادلات المزدوجة. عندما يكون PDE الأصلي خطيًا ، ستكون هذه المعادلات أيضًا خطية - وهذه هي الحالة النموذجية التي يراها الناس عندما يتحدثون عن "تحليل العناصر المحددة".

ولكن هناك العديد من أدوات PDE ذات الأهمية العملية التي ليست خطية - ولمعالجة هذه العناصر يحتاج إلى تحليل العناصر المحددة غير الخطية ، وهو ما لدينا الآن في الإصدار 12.0.

على سبيل المثال ، إليك ما يلزم لحل PDE غير الخطي الذي يصف ارتفاع السطح الأدنى ثنائي الأبعاد (على سبيل المثال ، فيلم صابون مثالي) ، هنا على حلقي ، بشروط حدية (Dirichlet) تجعله يتلوى الجيبية عند الحواف (كما لو أن فيلم الصابون تم تعليقه من الأسلاك):

صورة

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

صورة

مترجم متطور جديد



لقد وضعنا الكثير من الهندسة لتحسين تنفيذ برامج ولفرام للغات على مر السنين. في عام 1989 ، بدأنا تلقائيًا في تجميع الحسابات الرقمية البسيطة بدقة الجهاز لتعليمات الجهاز الظاهري الفعال (وكما حدث ، كتبت الرمز الأصلي لذلك). على مر السنين ، قمنا بتوسيع قدرات هذا المحول البرمجي ، ولكن كان دائمًا ما يقتصر على برامج بسيطة إلى حد ما.

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

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

على المستوى التقني ، يعتمد برنامج التحويل البرمجي Version 12.0 الجديد على LLVM ، ويعمل عن طريق إنشاء كود LLVM - الربط في مكتبة وقت التشغيل المنخفضة المستوى نفسها التي تستخدمها نواة Wolfram Language نفسها ، والاتصال مرة أخرى إلى نواة Wolfram Language الكاملة للحصول على وظائف هذا ليس في مكتبة وقت التشغيل.

إليك الطريقة الأساسية التي يقوم بها الشخص بترجمة دالة خالصة في الإصدار الحالي من برنامج التحويل البرمجي الجديد:

صورة

تعمل وظيفة التعليمات البرمجية المترجمة الناتجة تمامًا مثل الوظيفة الأصلية ، وإن كانت أسرع:

صورة

جزء كبير مما يتيح لـ FunctionCompile إنتاج وظيفة أسرع هو أنك تخبره لجعل افتراضات حول نوع الحجة سوف تحصل عليه. نحن ندعم الكثير من الأنواع الأساسية (مثل " Integer32 " و " Real64"). ولكن عند استخدام FunctionCompile ، فأنت تلتزم بأنواع وسيطات معينة ، ويمكن إنتاج المزيد من التعليمات البرمجية المبسطة.

يرتبط الكثير من تطور المحول البرمجي الجديد باستنتاج أنواع البيانات التي سيتم إنشاؤها في التنفيذ. من البرنامج. (هناك الكثير من خوارزميات نظرية الرسم البياني وغيرها من الخوارزميات المعنية ، وغني عن القول ، يتم تنفيذ جميع metaprogramming للمترجم مع Wolfram Language.) فيما

يلي مثال يتضمن نوعًا من الاستدلال على النوع (نوع fib يتم استنتاجه ليكون "Integer64" -> "Integer64" : دالة عدد صحيح تقوم بإرجاع عدد صحيح):

صورة

على جهاز الكمبيوتر الخاص بي ، يعمل cf [25] بمعدل 300 مرة أسرع من الوظيفة غير المترجمة. (بالطبع ، تفشل النسخة المترجمة عندما لم يعد ناتجها من النوع " Integer64 " ، ولكن إصدار Wolfram القياسي للغة ما زال يعمل بشكل جيد.)

بالفعل يمكن للمجمع أن يتعامل مع المئات من بدائل برمجة Wolfram Language ، ويتعقب بشكل مناسب الأنواع أنتجت - وتوليد رمز التي تنفذ مباشرة هذه البدائية. ومع ذلك ، في بعض الأحيان ، سوف يرغب المرء في استخدام وظائف متطورة في لغة Wolfram التي لا معنى لها لإنشاء رمز مترجم خاص به - وحيث ما يريد المرء فعله فعلاً هو مجرد الاتصال بنواة Wolfram Language لهذه الوظائف . في الإصدار 12.0 ، يتيح KernelFunction القيام بذلك:

صورة

حسنًا ، ولكن لنفترض أن الشخص لديه وظيفة رمز مترجمة. ماذا يمكن للمرء القيام به؟ حسنًا ، بادئ ذي بدء ، يمكن تشغيله فقط داخل لغة Wolfram. يمكن للمرء تخزينه أيضًا وتشغيله لاحقًا. يتم إجراء أي تجميع خاص لبنية معالج معينة (على سبيل المثال 64 بت x 86). لكن CompiledCodeFunction يحافظ تلقائيًا على معلومات كافية للقيام بتصنيف إضافي لبنية مختلفة إذا لزم الأمر.

ولكن بالنظر إلى CompiledCodeFunction ، فإن أحد الاحتمالات الجديدة المثيرة للاهتمام هو أنه يمكن للمرء إنشاء تعليمات برمجية يمكن تشغيلها مباشرة حتى خارج بيئة Wolfram Language. (لدينا مترجم قديم كان CCodeGenerateالحزمة التي توفر إمكانات متشابهة قليلاً في الحالات البسيطة - على الرغم من ذلك تعتمد على مجموعة أدوات معقدة من المجمعين C وما إلى ذلك)

وإليك كيف يمكن للمرء تصدير رمز LLVM الخام (لاحظ أن أشياء مثل التحسين العودية الذيل يتم تنفيذها تلقائيًا - ولاحظ أيضًا الوظيفة الرمزية وخيارات برنامج التحويل البرمجي في النهاية):

صورة

إذا كان أحدهم يستخدم FunctionCompileExportLibrary ، فحينئذٍ يحصل الشخص على ملف مكتبة - .dylib على Mac و .dll على Windows و .so على Linux. يمكن للمرء استخدام هذا في Wolfram Language عن طريق القيام LibraryFunctionLoad . ولكن يمكن للمرء أيضا استخدامه في برنامج خارجي.

واحدة من الأشياء الرئيسية التي تحدد عمومية المترجم الجديد هي ثراء نظام النوع. يدعم المترجم الآن 14 نوعًا ذريًا (مثل " Boolean " ، و " Integer8 " ، و " Complex64 " ، وما إلى ذلك). يدعم أيضًا مُنشئي الأنواع مثل " PackedArray " - على سبيل المثال ، TypeSpecifier [" PackedArray "] [ "Real64" ، 2] يتوافق مع مجموعة معبأة في المرتبة 2 من reals 64 بت.

في التطبيق الداخلي للغة ولفرام (والتي ، بالمناسبة ، معظمها بلغة ولفرام) ، كانت لدينا طريقة محسنة لتخزين المصفوفات لفترة طويلة. في الإصدار 12.0 ، نعرّضها كـ NumericArray . على عكس التركيبات العادية لـ Wolfram Language ، يجب عليك إخبار NumericArray بالتفصيل كيف ينبغي لها تخزين البيانات. ولكن بعد ذلك يعمل بطريقة لطيفة ، الأمثل:

صورة
صورة
صورة

استدعاء بيثون واللغات الأخرى



في الإصدار 11.2 قدمنا ExternalEvaluate ، والذي يتيح لك إجراء حسابات بلغات مثل Python و JavaScript من داخل Wolfram Language (في Python ، "^" تعني BitXor ):

صورة

في الإصدار 11.3 ، قدمنا ​​خلايا لغة خارجية ، لتسهيل إدخال برامج اللغة الخارجية أو غيرها من المدخلات مباشرة في دفتر ملاحظات:

صورة

في الإصدار 12.0 ، نقوم بتشديد التكامل. على سبيل المثال ، داخل سلسلة لغة خارجية ، يمكنك استخدام <* ... *> لإعطاء رمز Wolfram Language لتقييم:

صورة

هذا يعمل في خلايا لغة خارجية أيضًا:

صورة

بالطبع ، Python ليست لغة Wolfram ، لذلك لا تعمل أشياء كثيرة:

صورة

لكن ExternalEvaluate أنواع على الأقل يمكن أن البيان عودة العديد من البيانات من بيثون، بما في ذلك قوائم (كما هو الحال مع لقائمة ) والقواميس (كما هو الحال مع جمعية ) والصور (كما هو الحال مع صورة ) والتواريخ (كما هو الحال مع DateObjectصفائف نمباي (كما هو الحال معNumericArray ) ومجموعات بيانات الباندا (مثل TimeSeries ، DataSet ، إلخ). ( يمكن لـ ExternalEvaluate أيضًا إرجاع ExternalObject وهذا بشكل أساسي مؤشر إلى كائن يمكنك إرساله مرة أخرى إلى Python.)

يمكنك أيضًا استخدام الدوال الخارجية مباشرةً (الاسم الغريب الذي يطلق عليه اسم ord هو أساس تناظرية Python الخاص بـ ToCharacterCode ):

صورة

وإليك وظيفة Python الخالصة ، ممثلة رمزًا في لغة Wolfram:

صورة
صورة

استدعاء لغة Wolfram من بايثون وأماكن أخرى



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

صورة

ويتيح لك القيام بأشياء مثل تحديد وظائف ، على سبيل المثال مع رمز في ملف:

صورة
صورة

إلى جانب إصدار الإصدار 12.0 ، سنقوم أيضًا بإصدار أول مكتبة عميل ولفرام للغة - بيثون. الفكرة الأساسية لهذه المكتبة هي تسهيل برامج Python على لغة Wolfram. (تجدر الإشارة إلى أنه كان لدينا بالفعل مكتبة عملاء لغة C لمدة لا تقل عن 30 عامًا - من خلال ما يُعرف الآن بـ WSTP .)

تختلف طريقة عمل مكتبة عميل اللغة عن لغات مختلفة. بالنسبة لبيثون - كلغة مترجمة (التي كانت في الواقع مستنيرة تاريخياً من قبل لغة ولفرام المبكرة) - إنها بسيطة للغاية. بعد إعداد المكتبةوبدء جلسة (محليًا أو في السحابة) ، يمكنك فقط تقييم رمز Wolfram Language والحصول على النتائج مرة أخرى في Python:

صورة

يمكنك أيضًا الوصول مباشرةً إلى وظائف Wolfram Language (كنوع من معكوس ExternalFunction ):

صورة

ويمكنك التفاعل المباشر مع أشياء مثل هياكل الباندا ، صفائف NumPy ، إلخ. في الواقع ، يمكنك في الواقع مجرد التعامل مع كامل لغة Wolfram مثل مكتبة عملاقة يمكن الوصول إليها من Python. أو ، بالطبع ، يمكنك فقط استخدام لغة Wolfram اللطيفة والمتكاملة مباشرةً ، وربما إنشاء واجهات برمجة تطبيقات خارجية إذا كنت بحاجة إليها.

المزيد من أجل Wolfram "Super Shell"



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

من السهل جدًا أن يكون لديك كل شيء في جهاز كمبيوتر محمول ، ومن الرائع أن تكون قادرًا على استخدام وظائف برمجية مثل FileNames (ls) و FindList (grep) و SystemProcessData (ps) و RemoteRunProcess (ssh) وFileSystemScan . لكننا في الإصدار 12.0 نضيف مجموعة من الوظائف الإضافية لدعم استخدام لغة Wolfram كقذيفة فائقة.

يوجد RemoteFile لتمثيل ملف بعيد رمزياً (مع المصادقة إذا لزم الأمر) - يمكنك استخدامه على الفور في وظائف مثل CopyFile . هناك FileConvert لتحويل الملفات مباشرة بين صيغ مختلفة.

وإذا كنت ترغب حقًا في الغوص بعمق ، فإليك الطريقة التي تتبع بها كل الحزم على المنفذين 80 و 443 المستخدمة في القراءة من wolfram.com :

صورة

العرائس متصفح الويب



ضمن لغة Wolfram ، كان من السهل لفترة طويلة التفاعل مع خوادم الويب ، باستخدام وظائف مثل URLExecute و HTTPRequest ، وكذلك $ Cookies ، إلخ. لكن في الإصدار 12.0 ، نضيف شيئًا جديدًا: قدرة لغة Wolfram على التحكم في متصفح الويب ، وجعلها تفعل ما نريد برمجيًا. الشيء الأكثر إلحاحًا الذي يمكننا القيام به هو مجرد الحصول على صورة عن شكل موقع الويب على متصفح الويب:

صورة

والنتيجة هي صورة يمكننا حسابها باستخدام:

صورة

للقيام بشيء أكثر تفصيلاً ، يتعين علينا بدء جلسة مستعرض (ندعم حاليًا Firefox و Chrome):

صورة

تظهر نافذة متصفح فارغة على شاشتنا. الآن يمكننا استخدام WebExecute لفتح صفحة ويب:

صورة

الآن وقد فتحنا الصفحة ، هناك الكثير من الأوامر التي يمكننا تشغيلها. ينقر هذا على أول رابط تشعبي يحتوي على النص "Programming Lab":

صورة

يعرض هذا عنوان الصفحة التي وصلنا إليها:

صورة

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

ميكروكنترولر مستقل



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

في الإصدار 12.0 ، نقدم لك Microcontroller Kit للغة Wolfram ، والتي تتيح لك إعطاء مواصفات رمزية تقوم منها تلقائيًا بإنشاء ونشر الكود لتشغيله بشكل مستقل في ميكروكنترولر. في الإعداد النموذجي ، يقوم المتحكّم الدقيق بإجراء الحسابات على البيانات الواردة من المستشعرات ، وفي الوقت الفعلي ، يوزع الإشارات على المشغّلات. الأنواع الأكثر شيوعًا للحسابات هي تلك الفعالة في نظرية التحكم ومعالجة الإشارات.

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

على سبيل المثال ، إليك كيفية توليد تمثيل رمزي لمرشح معالجة الإشارات التناظرية:

صورة

يمكننا استخدام هذا الفلتر مباشرة في Wolfram Language - لنقل استخدام RecurrenceFilter لتطبيقه على إشارة صوتية. يمكننا أيضًا القيام بأشياء مثل رسم استجابة التردد:

صورة

لنشر المرشح في متحكم دقيق ، يتعين علينا أولاً أن نشتق من هذا التمثيل المستمر تقريبًا للوقت المنفصل يمكن تشغيله في حلقة ضيقة (هنا ، كل 0.1 ثانية) في المتحكم الدقيق:

صورة

نحن الآن على استعداد لاستخدام Microcontroller Kit لنشر هذا بالفعل على متحكم. هذه المجموعة تدعم أكثر من مائة نوع مختلف من ميكروكنترولر. إليك كيفية نشر عامل التصفية في Arduino Uno الذي قمنا بتوصيله بمنفذ تسلسلي على جهاز الكمبيوتر الخاص بنا:

صورة
صورة

Microcontroller EmbedCode يعمل عن طريق إنشاء الكود المصدري C-like المناسب ، وتجميعه للهيكل المتحكم الذي تريده ، ثم نشره بالفعل على متحكمه من خلال مبرمجه المزعوم . إليك شفرة المصدر الفعلية التي تم إنشاؤها في هذه الحالة بالذات:

صورة

الآن لدينا شيء من هذا القبيل يقوم بتشغيل مرشح Butterworth الخاص بنا ، والذي يمكننا استخدامه في أي مكان:

صورة

إذا كنا نريد التحقق من ما تقوم به ، فيمكننا دائمًا توصيله مرة أخرى بلغة Wolfram باستخدام DeviceOpen لفتح منفذها التسلسلي ، والقراءة والكتابة منه.

ربط الكون الكون



ما هي العلاقة بين Wolfram Language وألعاب الفيديو؟ على مر السنين ، تم استخدام لغة Wolfram وراء الكواليس في العديد من جوانب تطوير اللعبة (محاكاة الاستراتيجيات ، وإنشاء الأشكال الهندسية ، وتحليل النتائج ، وما إلى ذلك). لكننا نعمل منذ فترة على إقامة صلة أوثق بين Wolfram Language وبيئة ألعاب Unity ، وفي الإصدار 12.0 نصدر الإصدار الأول من هذا الرابط.

يتمثل المخطط الأساسي في تشغيل Unity جنبًا إلى جنب مع Wolfram Language ، ثم إعداد اتصال ثنائي الاتجاه ، مما يسمح بتبادل الأشياء والأوامر. تعتبر السباكة تحت الغطاء معقدة للغاية ، لكن النتيجة هي اندماج جيد لنقاط قوة ولفرام اللغة والوحدة.

يؤدي هذا إلى إنشاء الرابط ، ثم يبدأ مشروع جديد في الوحدة:

صورة
صورة

الآن قم بإنشاء شكل معقد:

صورة

ثم يتطلب الأمر أمرًا واحدًا فقط لوضع هذا في لعبة Unity ككائن يسمى " thingoid ":

صورة

يوجد ضمن لغة Wolfram تمثيل رمزي للكائن ، ويوفر UnityLink الآن مئات الوظائف لمعالجة هذه الكائنات ، مع الاحتفاظ دائمًا بنسخ في Unity وفي Wolfram Language.

إنها قوية للغاية بحيث يمكن للمرء أن يأخذ الأشياء من Wolfram Language ويضعها على الفور في Unity - سواء كانت هندسة أو صور أو صوت أو تضاريس جغرافية أو بنى جزيئية أو تشريح ثلاثي الأبعاد أو أي شيء آخر. كما أنها قوية جدًا بحيث يمكن معالجة هذه الأشياء في لعبة الوحدة ، إما من خلال أشياء مثل فيزياء اللعبة ، أو من خلال إجراء المستخدم. (في النهاية ، يمكن للمرء أن يتوقع أن يكون لديه وظيفة تشبه Manipulate ، حيث عناصر التحكم ليست مجرد منزلقات وأشياء ، بل أجزاء معقدة من اللعب.)

لقد أجرينا تجارب على تحويل محتوى Wolfram Language- إلى واقع افتراضي منذ أوائل التسعينيات. لكن في الأزمنة الحديثة ، أصبحت Unity شيئًا من المعايير الفعلية لإنشاء بيئات VR / AR - ومع UnityLink أصبح من السهل الآن وضع الأشياء من Wolfram Language بشكل روتيني في أي بيئة XR حديثة.

يمكن للمرء استخدام Wolfram Language لإعداد مواد لألعاب Unity ، ولكن ضمن لعبة Unity ، يتيح UnityLink أيضًا بشكل أساسي للمرء إدراج رمز Wolfram Language الذي يمكن تنفيذه أثناء لعبة إما على جهاز محلي أو من خلال واجهة برمجة التطبيقات في Wolfram Cloud . وهذا ، من بين أشياء أخرى ، يجعل من السهل وضع خطافات في لعبة حتى تتمكن اللعبة من إرسال "القياس عن بعد" (قل إلى Wolfram Data Drop ) للتحليل بلغة Wolfram. (من الممكن أيضًا كتابة النص الخاص بلعب اللعبة - وهو ، على سبيل المثال ، مفيد جدًا لاختبار اللعبة.)

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

صورة

UnityLink ليس شيئًا بسيطًا: فهو يحتوي على أكثر من 600 وظيفة. ولكن من خلال هذه الوظائف ، من الممكن الوصول إلى حد كبير إلى جميع قدرات Unity ، وإعداد أي لعبة يمكن تخيلها.

بيئات محاكاة للتعلم الآلي



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

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

ولكن ماذا عن البيئات التي تشبه أكثر تلك التي يتعلمها البشر المعاصرون - مليئة بالهياكل الهندسية المبنية وما إلى ذلك؟ مريح بما فيه الكفاية ، SystemModel يتيح الوصول إلى الكثير من النظم الهندسية واقعية. ومن خلال UnityLink ، يمكننا أن نتوقع أن نتمكن من الوصول إلى عمليات محاكاة غنية تعتمد على الألعاب في العالم.

لكن كخطوة أولى ، في الإصدار 12.0 ، نقوم بإعداد اتصالات ببعض الألعاب البسيطة - خاصة من OpenAI "gym" . الواجهة كبيرة كما لو كانت للتفاعل مع العالم الحقيقي ، مع الوصول إلى اللعبة مثل "الجهاز" (بعد التثبيت المناسب أحيانًا - "المصدر المفتوح المؤلم"):

صورة

يمكننا قراءة حالة اللعبة:

صورة

ويمكننا أن نظهرها كصورة:

صورة

ببذل المزيد من الجهد ، يمكننا اتخاذ 100 إجراء عشوائي في اللعبة (التحقق دائمًا من أننا "لم نموت") ، ثم نعرض مخططًا لفضاء الميزات للحالات الملحوظة للعبة:

صورة

Blockchain (و CryptoKitty) حساب



في الإصدار 11.3 بدأنا أول اتصال لدينا ل blockchain . الإصدار 12.0 يضيف الكثير من الميزات والقدرات الجديدة ، ولعل أبرزها القدرة على الكتابة إلى السلاسل العامة ، وكذلك القراءة منها. (لدينا أيضًا Wolfram Blockchain لمستخدمي Wolfram Cloud.) نحن ندعم حاليًا بتكوينات Bitcoin و Ethereum و ARK ، سواء شبكاتهم الرئيسية أو testnets الخاصة بهم (ونعم ، لدينا عقدنا الخاصة التي تتصل مباشرة بهذه الكتل البرمجية).

في الإصدار 11.3 سمحنا القراءة الخام للمعاملات من block Blockins. في الإصدار 12.0 ، أضفنا طبقة من التحليل ، بحيث ، على سبيل المثال ، يمكنك طلب ملخص للرموز "CK" (AKA CryptoKitties ) على سلسلة Ethereum blockchain :

صورة

من السهل النظر إلى جميع المعاملات الرمزية في التاريخ ، وجعل سحابة كلمة عن مدى الرموز المميزة النشطة:

صورة

ولكن ماذا عن القيام بمعاملاتنا الخاصة؟ دعنا نقول أننا نريد استخدام جهاز الصراف الآلي ( Bitcoin) (مثل جهاز الصراف الآلي الموجود في محل بيع الخبز بالقرب مني ) لتحويل الأموال إلى عنوان البيتكوين. حسنًا ، أولاً نقوم بإنشاء مفاتيح التشفير لدينا (ونحن بحاجة إلى التأكد من أننا نتذكر مفتاحنا الخاص!):

صورة

بعد ذلك ، يجب أن نأخذ المفتاح العمومي وننشئ عنوان Bitcoin منه:

صورة

اصنع رمز الاستجابة السريعة من ذلك وستكون جاهزًا للذهاب إلى ماكينة الصراف الآلي:

صورة

ولكن ماذا لو أردنا الكتابة إلى blockchain أنفسنا؟ سنستخدم هنا testnet Bitcoin (لذلك نحن لا ننفق أموالًا حقيقية). يعرض هذا ناتجًا عن معاملة قمنا بها من قبل - يتضمن 0.0002 بيتكوين (أي 20.000 ساتوشي):

صورة
صورة

الآن يمكننا إعداد معاملة تأخذ هذا الإخراج ، على سبيل المثال ، ترسل 8000 satoshi إلى كل من عنوانين (التي حددناها تمامًا مثل معاملة ATM):

صورة

حسنًا ، لدينا الآن كائن معاملات blockchain - من شأنه أن يقدم رسومًا (تظهر باللون الأحمر لأنها "أموال فعلية" ستنفقها) على جميع العملات المشفرة المتبقية (هنا 4000 satoshi) إلى عامل منجم على استعداد لوضع المعاملة في blockchain. ولكن قبل أن نتمكن من تقديم هذه الصفقة (و "إنفاق الأموال") ، علينا التوقيع عليها باستخدام مفتاحنا الخاص:

صورة

أخيرًا ، نطبق BlockchainTransactionSubmit وقد أرسلنا المعاملة الخاصة بنا لوضعها على blockchain:

صورة

إليك معرف المعاملة الخاص بها:

صورة

إذا سألنا على الفور عن هذه الصفقة ، فستتلقى رسالة تفيد بأنها غير موجودة في blockchain:

صورة

ولكن بعد أن ننتظر بضع دقائق ، هناك - وسينتشر قريبًا إلى كل نسخة من سلسلة Bitcoin testnet blockchain:

صورة

إذا كنت مستعدًا لإنفاق أموال حقيقية ، فيمكنك استخدام نفس الوظائف بالضبط لإجراء معاملة على شبكة رئيسية. يمكنك أيضًا القيام بأشياء مثل شراء CryptoKitties. يمكن استخدام وظائف مثل BlockchainContractValue لأي عقد ذكي (في الوقت الحالي ، فقط Ethereum) ، ويتم إعدادها لفهم أشياء على الفور مثل ERC-20 و ERC-721 .

والتشفير العادي كذلك



يتضمن التعامل مع بلوكشين الكثير من التشفير ، بعضها جديد في الإصدار 12.0 (لا سيما التعامل مع المنحنيات الإهليلجية). لكن في الإصدار 12.0 ، نقوم أيضًا بتوسيع وظائف تشفير غير blockchain الخاصة بنا. على سبيل المثال ، لدينا الآن وظائف للتعامل المباشر مع التواقيع الرقمية . يؤدي هذا إلى إنشاء توقيع رقمي باستخدام المفتاح الخاص من الأعلى:

صورة
صورة

يمكن لأي شخص الآن التحقق من الرسالة باستخدام المفتاح العمومي المقابل:

صورة

في الإصدار 12.0 ، أضفنا عدة أنواع جديدة من التجزئات لوظيفة هاش ، خاصة لدعم مختلف العملات المشفرة. أضفنا أيضًا طرقًا لإنشاء المفاتيح المشتقة والتحقق منها . ابدأ من أي كلمة مرور ، وسيقوم GenerateDerivedKey "بتفريغها" إلى شيء أطول (لتكون أكثر أمانًا يجب عليك إضافة " ملح "):

صورة

فيما يلي إصدار من المفتاح المشتق ، ومناسب للاستخدام في أنظمة المصادقة المختلفة:

صورة

الاتصال بموجز البيانات المالية



يحتوي Wolfram Knowledgebase على جميع أنواع البيانات المالية . عادة ما يكون هناك كيان مالي (مثل الأسهم) ، ثم هناك عقار (مثل السعر). إليك السجل اليومي الكامل لسعر سهم شركة Apple (من المثير للإعجاب أنه يبدو أفضل على مقياس السجل):

صورة

ولكن على الرغم من أن البيانات المالية الموجودة في Wolfram Knowledgebase ، والمتاحة بشكل قياسي في Wolfram Language ، يتم تحديثها بشكل مستمر ، فإنها ليست في الوقت الفعلي (معظمها متأخرة 15 دقيقة) ، ولا تحتوي على كل التفاصيل التي يستخدمها العديد من المتداولين الماليين. من أجل الاستخدام المالي الجاد ، قمنا بتطوير Wolfram Finance Platform . والآن ، في الإصدار 12.0 ، أصبح بإمكانه الوصول مباشرة إلى موجزات البيانات المالية لـ Bloomberg و Reuters.

إن الطريقة التي نصمم بها وولفرام للغة ، إطار عمل الاتصالات مع بلومبرج ورويترز متاح دائمًا باللغة - لكن يتم تفعيلها فقط إذا كان لديك برنامج وولفرام للتمويل ، وكذلك اشتراكات بلومبرج أو رويترز المناسبة. ولكن على افتراض أن لديك هذه ، فإليك ما يبدو عليه الاتصال بخدمة Bloomberg Terminal :

صورة

أصبحت جميع الأدوات المالية التي تتعامل معها محطة بلومبرغ متاحة الآن ككيانات بلغة ولفرام:

صورة

الآن يمكننا أن نطلب خصائص هذا الكيان:

صورة

يوجد أكثر من 60000 عقار يمكن الوصول إليها من محطة بلومبرغ:

صورة

فيما يلي 5 أمثلة عشوائية (نعم ، إنها مفصلة جدًا ؛ تلك هي أسماء Bloomberg ، وليست أسماءنا):

صورة

ندعم خدمة Bloomberg Terminal ، وخدمة ترخيص بيانات Bloomberg ، وخدمة رويترز Elektron . أحد الأشياء المعقدة التي يمكن للمرء فعلها الآن هو إعداد مهمة مستمرة لتلقي البيانات بشكل غير متزامن ، واستدعاء " وظيفة المعالج " في كل مرة يتم فيها إدخال جزء جديد من البيانات:

صورة

تحديثات هندسة البرمجيات والمنصات



تحدثت عن الكثير من الوظائف الجديدة والوظائف الجديدة في Wolfram Language. ولكن ماذا عن البنية التحتية الأساسية للغة ولفرام؟ حسنًا ، لقد عملنا بجد على ذلك أيضًا. على سبيل المثال ، بين الإصدار 11.3 والإصدار 12.0 تمكنا من إصلاح ما يقرب من 8000 الأخطاء التي تم الإبلاغ عنها. لقد صنعنا الكثير من الأشياء بشكل أسرع وأكثر قوة. وبشكل عام ، قمنا بتشديد هندسة البرمجيات الخاصة بالنظام ، على سبيل المثال تقليل حجم التنزيل الأولي بنسبة 10٪ تقريبًا (على الرغم من إضافة جميع الوظائف المضافة). (لقد قمنا أيضًا بأشياء مثل تحسين الإحضار التنبئي المسبق لعناصر قاعدة المعرفة من السحابة - لذلك عندما تحتاج إلى بيانات مماثلة ، من المحتمل أن يتم تخزينها مؤقتًا بالفعل على جهاز الكمبيوتر الخاص بك.)

إنها ميزة قديمة لمجال الحوسبة يتم تحديث أنظمة التشغيل باستمرار - وللاستفادة من أحدث ميزاتها ، يجب تحديث التطبيقات أيضًا. لقد عملنا منذ عدة سنوات على تحديث رئيسي لواجهة كمبيوتر Mac المحمولة - والذي أصبح جاهزًا في الإصدار 12.0. كجزء من التحديث ، قمنا بإعادة كتابة وإعادة هيكلة كميات كبيرة من الشفرات التي تم تطويرها وتلميعها على مدار أكثر من 20 عامًا ، ولكن النتيجة هي أنه في الإصدار 12.0 ، كل شيء حول نظامنا على Mac هو 64 بت بالكامل ، ويستخدم أحدث واجهات برمجة تطبيقات الكاكاو . هذا يعني أن الواجهة الأمامية للكمبيوتر الدفتري أسرع بكثير - ويمكن أن تتجاوز حد الذاكرة السابق 2 جيجا بايت.

يوجد أيضًا تحديث للنظام الأساسي على نظام Linux ، حيث تدعم واجهة الكمبيوتر الدفتري الآن تمامًا Qt 5 ، مما يسمح لجميع عمليات التقديم أن تتم "بدون رأس" ، دون أي خادم X - مما يؤدي إلى تبسيط عملية نشر محرك Wolfram بشكل كبير في السحابة. (الإصدار 12.0 لا يحتوي حتى الآن على دعم عالي النقاط في البوصة لنظام التشغيل Windows ، ولكن سيأتي قريبًا جدًا.)

يختلف تطوير Wolfram Cloud من بعض النواحي عن تطوير Wolfram Language وتطبيقات Wolfram Desktop (على الرغم من التوافق الداخلي ، فإننا نصدر الإصدار 12.0 في نفس الوقت في كلا البيئتين). ولكن في العام الماضي منذ إصدار الإصدار 11.3 ، كان هناك تقدم كبير في Wolfram Cloud.

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

في الإصدار 12.0 ، يوجد الآن عنصر قائمة بسيط (ملف> نشر على السحابة ...) لنشر أي دفتر ملاحظات على السحابة. وبمجرد نشر دفتر الملاحظات ، يمكن لأي شخص في العالم التفاعل معه - وكذلك عمل نسخة خاصة به حتى يتمكن من تحريرها.

من المثير للاهتمام معرفة كيف دخلت السحابة على نطاق واسع ما يمكن القيام به بلغة Wolfram. بالإضافة إلى كل التكامل السلس لقاعدة المعرفة السحابية ، والقدرة على الوصول إلى أشياء مثل blockchains ، هناك أيضًا وسائل راحة مثل Send To ... إرسال أي كمبيوتر محمول عبر البريد الإلكتروني ، باستخدام السحابة إذا لم يكن هناك اتصال خادم بريد إلكتروني مباشر.

والكثير ...



على الرغم من أن هذا مقطع طويل ، إلا أنه ليس قريبًا من سرد القصة الكاملة لما هو جديد في الإصدار 12.0. جنبا إلى جنب مع بقية فريقنا ، لقد عملت بجد للغاية على الإصدار 12.0 لفترة طويلة الآن - ولكن لا يزال من المثير أن أرى مدى وجوده بالفعل.

لكن الأمر المهم (والكثير من العمل الذي يتعين إنجازه!) هو أن كل ما أضفناه مصمم بعناية ليناسب بشكل متسق ما هو موجود بالفعل. منذ الإصدار الأول قبل أكثر من 30 عامًا لما يعرف الآن باسم Wolfram Language ، نتبع المبادئ الأساسية نفسها - وهذا جزء مما سمح لنا بتطوير النظام بشكل كبير مع الحفاظ على التوافق على المدى الطويل.

من الصعب دائمًا تحديد بالضبط أولويات تطوير كل إصدار جديد ، لكنني مسرور جدًا بالخيارات التي اتخذناها للإصدار 12.0. لقد أجريت العديد من المحادثات على مدار العام الماضي ، وقد أدهشني كثيرًا من المرات التي تمكنت فيها من قول الأشياء التي ظهرت: "حسنًا ، يحدث أن يكون جزءًا من الإصدار 12.0! "

أنا شخصياً كنت أستخدم تصميمات أولية داخلية للإصدار 12.0 لمدة عام تقريبًا ، وقد جئت إلى منح الكثير من إمكاناتها الجديدة - واستخدامها والاستمتاع بها كثيرًا. لذلك من دواعي سرورنا اليوم أن لدينا النسخة النهائية 12.0 - مع كل هذه الإمكانيات الجديدة بشكل رسمي ، جاهزة للاستخدام من قبل أي شخص والجميع ...

Source: https://habr.com/ru/post/ar448394/


All Articles