سؤال

لقد ورثت بعض التعليمات البرمجية التي تحاول تقليل وظيفة باستخدامها scipy.optimize.minimize. أواجه مشكلة في فهم بعض المدخلات إلى fun و jac الحجج

تبدو الدعوة لتقليل إلى الحد الأدنى مثل هذا:

result = minimize(func, jac=jac_func, args=(D_neg, D, C), method = 'TNC' ...other arguments)

func يبدو ما يلي:

def func(G, D_neg, D, C):
#do stuff

jac_func لديه الهيكل التالي:

def jac_func(G, D_neg, D, C):
#do stuff

ما لا أفهمه هو أين G المدخلات إلى func و jac_func قادم من. هو ذلك المحدد بطريقة أو بأخرى في minimize الوظيفة ، أو بحقيقة أن method تم تحديده TNC؟ لقد حاولت إجراء بعض الأبحاث في بنية وظيفة التحسين هذه ، لكنني أواجه مشكلة في العثور على الإجابة التي أحتاجها. أي مساعدة يحظى بتقدير كبير

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

المحلول

الجواب المختصر هو ذلك G يتم الحفاظ عليه بواسطة المُحسّن كجزء من عملية التقليل ، بينما (D_neg, D, and C) يتم تمرير الحجج في AS-IS من args مترابطة بيانية.

بشكل افتراضي، scipy.optimize.minimize يأخذ وظيفة fun(x) هذا يقبل حجة واحدة x (والتي قد تكون صفيفًا أو ما شابه ذلك) ويعيد عددًا كبيرًا. scipy.optimize.minimize ثم يجد قيمة وسيطة xp مثل ذلك fun(xp) اقل من fun(x) لقيم أخرى من x. المحسن مسؤول عن إنشاء قيم x ونقلهم إلى fun للتقييم.

ولكن ماذا لو كان لديك وظيفة fun(x, y) التي لديها بعض المعلمات الإضافية y يجب تمرير ذلك بشكل منفصل (ولكن يعتبر ثابتًا لأغراض التحسين)؟ هذا ما args Tuple هو ل. ال توثيق يحاول شرح كيفية استخدام args tuple ، ولكن قد يكون من الصعب تحليلها:

args: tuple ، اختياري

تم تمرير الحجج الإضافية إلى الوظيفة الموضوعية ومشتقاتها (يعقوب ، هيسيان).

على نحو فعال، scipy.optimize.minimize سوف تمر كل ما هو في args كباقي الحجج إلى fun, ، باستخدام تدوين وسيطات النجمة: تسمى الوظيفة بعد ذلك باسم fun(x, *args) أثناء التحسين. ال x يتم تمرير الجزء من قبل المحسن ، و args يتم إعطاء Tuple كحجال متبقية.

لذلك ، في الكود الخاص بك ، قيمة G يتم الحفاظ على العنصر بواسطة المحسن أثناء تقييم القيم المحتملة لـ G, ، و ال (D_neg, D, C) يتم تمرير Tuple في كما هو.

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