ما هو التطور التفاضلي SciPy في لغة بايثون؟
Scipy هي مكتبة سطحية وحرة ومفهومة تستخدم لحل القضايا العلمية والرياضية. SciPy هو صندوق كنز للمطورين لأن مكتبته مليئة بالوحدات النمطية الثمينة. توسع SciPy وظائف NumPy بمجموعة قيّمة من الخوارزميات. تحتوي مكتبة SciPy على حزم فرعية يمكن استخدامها في العمليات الحسابية ، مثل scipy.io ، scipy.optimize ، إلخ. تنتج SciPy وظيفة 'التطور التفاضلي' والعديد من الوظائف القوية في حزمة scipy.optimize. يستخدم scipy.optimize للتحسين في تطبيقات Python.
وظيفة التطور التفاضلي هي وظيفة عامة اكتسبتها حزمة تحسين SciPy والتي تُستخدم للعثور على الحد الأدنى العالمي من الوظائف متعددة المتغيرات. يمكنه إدارة وظائف موضوعية متعددة الأبعاد غير خطية وغير قابلة للتفاضل. إنها خوارزمية بحث تستخدم للبحث في مناطق وظائف الفضاء المستمرة. هذه الوظيفة تعمل على القيم الحقيقية.
تركيب دالة التطور التفاضلي
وظيفة التطور التفاضلي موجودة في بايثون باستخدام وظيفة التباين (). يظهر بناء جملة دالة التطور التفاضلي أدناه:
دعنا ننتقل إلى معلمات الوظيفة:
يجب أن تكون الوظيفة قابلة للاستدعاء مع f (x، * args) ؛ تشير الحدود إلى تسلسل المتغيرات التي يمكن تحديدها بطريقتين: الإستراتيجية اختيارية أو سلسلة ذات القيمة الافتراضية 'best1bin' ؛ maxiter اختيارية أو قيمة int ؛ popsize هو int أو اختياري ؛ tol هو int أو اختياري ؛ قيمة الطفرة عائمة أو اختيارية ؛ قيمة إعادة التركيب عائمة أو اختيارية ؛ البذرة هي لا شيء و int و NumPy و Random.
في القسم التالي ، سنناقش وظيفة التطور التفاضلي بمساعدة أمثلة سهلة.
مثال 1
لنبدأ بمثال مباشر سيطور اهتمامك بفهم مفهوم وظيفة التطور التفاضلي. استخدمنا الدالة differential_evolution () لإيجاد القيمة الدنيا. ولكن للعثور على الحد الأدنى للقيمة ، تتطلب الوظيفة حدود بحث ووظيفة هدف قابلة للاستدعاء محددة. نتيجة لذلك ، نحدد دالة قبل استخدام وظيفة التفاضل_التطور في البرنامج. الكود المرجعي للبرنامج مذكور أدناه:
يستورد حبيبي مثل على سبيل المثالمن scipy يستورد تحسين
من scipy. تحسين يستورد التطور التفاضلي
يستورد matplotlib. pyplot مثل السنة التحضيرية
من matplotlib يستورد سم
def func ( ص ) :
مع و x = ص
ح = على سبيل المثال الجذر التربيعي ( مع ** 4 + س ** 4 )
إرجاع على سبيل المثال الجذر التربيعي ( ح )
DE_bounds = [ [ - 6 و 6 ] و [ - 6 و 6 ] ]
الدقة = التطور التفاضلي ( func و DE_bounds )
مطبعة ( الدقة )
لقد قمنا باستيراد مكتبات مثل SciPy و NumPy لحسابات الصفيف العددية. لقد قمنا باستيراد الدالة differential_evolution من الوحدة النمطية scipy.optimize. بعد ذلك ، باستخدام الكلمة الأساسية 'def' ، نحدد دالة الهدف القابلة للاستدعاء ونمرر المعلمة 'p'. نجحنا في تحديد الوظيفة التي تعثر على الجذر التربيعي لإضافة متغيرات NumPy ، وهي z ، x. يتم تخزين قيمة الجذر التربيعي في المتغير 'h'. نعيد قيمة الجذر التربيعي في الدالة المحددة. يتم إعادته كحجة.
بعد ذلك ، نحدد حدود المتغير التي يمكن تفصيلها من خلال شرح قيم الحد الأدنى والحد الأقصى للدالة. نقوم بتنفيذ دالة التفاضل_التطور باستخدام 'DE_bounds' كوسيطة. أطلقنا على قيمة الدالة متغير اسمه res. في النهاية ، نستخدم عبارة print لإظهار المخرجات. تم عرض النتيجة بعد تشغيل البرنامج. تظهر لقطة شاشة الإخراج المتوقعة أدناه:
يوضح التباين_التطور () أنه يتم عرض الحد الأدنى لقيمة الوظيفة عند النقطة (0 ، 0).
مثال 2
هذا مثال آخر على وظيفة التطور التفاضلي. في هذا ، نأخذ المصفوفات ونطبق عمليات مختلفة فيما بينها. الكود المرجعي للبرنامج مذكور أدناه:
يستورد حبيبي مثل على سبيل المثالمن scipy يستورد تحسين
من scipy. تحسين يستورد التطور التفاضلي
def موضوعي ( د ) :
إرجاع ( د [ 1 ] - 1.2 ) / 2 + 0.5 * د [ 0 ] * 1.3 * ( د [ 1 ] + 0.5 ) ** 3
_bounds = [ ( - 0.3 و 0.3 ) و ( - 0.3 و 0.3 ) ]
ديس = التطور التفاضلي ( موضوعي و _bounds و منبث = 80 و تلميع = خطأ شنيع )
مطبعة ( ديس )
كما هو موضح في لقطة الشاشة السابقة ، نجحنا في استيراد مكتبة SciPy.optimize.differential_evolution ومكتبة NumPy إلى البرنامج. الآن ، نحدد دالة موضوعية نيابة عنها نجد قيمة دنيا. مررنا التعبير الرياضي في دالة الهدف وأعدنا قيمة كوسيطة للدالة المحددة. الحدود بين قيم الدالة أمر لا بد منه. لذلك ، بعد تحديد الوظيفة ، قمنا بإصلاح القيمتين (الحد الأقصى والأدنى).
بعد تحديد جميع المتغيرات الأساسية ، قمنا بتسمية دالة التباين_التغير لإيجاد القيمة الدنيا للدالة. قمنا بحفظ الحد الأدنى لقيمة إرجاع الدالة في متغير يسمى disp. في نهاية البرنامج ، نقوم بتمرير متغير disp في تعليمة print لعرض النتيجة. بعد تشغيل البرنامج ، يتم عرض الحد الأدنى لقيمة الوظيفة المحددة على الشاشة بحدود. ما يلي هو الإخراج:
مثال 3
كما نرى ، يُرجع التطور التفاضلي قيمًا دنيا مختلفة لوظيفة موضوعية بناءً على تعريفها. هنا ، نأخذ مثالًا آخر يتعلق بـ differential_evolution (). يظهر الرمز المرجعي لهذا البرنامج أدناه:
يستورد حبيبي مثل على سبيل المثالمن scipy يستورد تحسين
من scipy. تحسين يستورد التطور التفاضلي
def obj_func ( أوبرا ) :
إرجاع 3 ** 9 / 0.2 + 6 / 3 * 2 ** عشرين
الحدود = [ ( - 0.5 و 0.5 ) و ( - 0.5 و 0.5 ) ]
خارج = التطور التفاضلي ( obj_func و الحدود و تلميع = حقيقي )
مطبعة ( 'الإخراج هو:' و خارج )
تم استيراد المكتبات بنجاح إلى هذا البرنامج لأننا لا نستطيع تنفيذ العمليات التي نرغب فيها بدونها. نتيجة لذلك ، نقوم بتضمين مكتبة SciPy في البرنامج. بعد ذلك ، حدد وظيفة الهدف بالعملية المطلوبة. نجد الحد الأدنى لقيمة تلك الوظيفة المحددة. بعد تعديل حدود الوظيفة ، قمنا باستدعاء الوظيفة المحددة في التطور التفاضلي للعثور على الحد الأدنى لقيمة الوظيفة. ثم يتم الاحتفاظ بهذا في المتغير. نعرض هذا عن طريق استدعاء هذا المتغير في تعليمة الطباعة. يظهر مخرجات هذا البرنامج أدناه:
كما في لقطة الشاشة السابقة ، فإن أدنى قيمة للدالة هي [0.29236931 ، 0.16808904]. يمكنك أيضًا تشغيل هذه الأمثلة في بيئتك لفهم مفهوم دالة التفاضل_التطور بشكل أفضل.
استنتاج
دعونا نلقي نظرة سريعة على هذه المقالة. لقد أدركنا الوظيفة الأساسية لطريقة التطور التفاضلي التي تنتمي إلى مكتبة SciPy في Python. Python هي أحدث لغة ، مع العديد من المكتبات المرنة. تم مساعدة معظم المطورين في حل هياكل التعليمات البرمجية المعقدة من خلال وظائف ومكتبات محددة مسبقًا. التطور التفاضلي هو وظيفة أو طريقة لتحسين حزمة SciPy تستخدم للتقليل. عندما تستخدم هذه الأمثلة السابقة في الكود ، فإنك تفهم بشكل أوضح مفهوم التطور التفاضلي.