برازش دادههای تجربی
1. نمای کلی
همانطور که میتوانید معادله دیود را به یک منحنی JV تاریک برازش کنید تا فاکتور ایدهآلی را استخراج کنید، OghmaNano به شما اجازه میدهد مدلهای کامل دستگاه را مستقیماً به دادههای تجربی برازش کنید. با کالیبره کردن شبیهسازی نسبت به اندازهگیریهای خود، میتوانید پارامترهای فیزیکی معنادار—تحرکها، چگالیهای حالت تله، مقاومتهای تماس، ضرایب بازترکیب—را در یک چارچوب خودسازگار بازیابی کنید. در مقایسه با فرمولهای تحلیلی ساده، یک برازش مبتنی بر فیزیک کوپل نوری–الکتریکی را حفظ میکند و بینش غنیتر و قابلاعتمادتری درباره سازوکارهای حاکم بر عملکرد ارائه میدهد. این آموزش روند کار برازش در OghmaNano را معرفی میکند و نشان میدهد چگونه متغیرها را انتخاب کنید، کمینهسازها را برگزینید و برازشهای کارآمد و بازتولیدپذیر اجرا کنید.
2. اولین برازش شما
OghmaNano چندین شبیهسازی دمو را شامل میشود که نشان میدهند چگونه مدلها را به دادههای تجربی برازش کنید. یکی از این دموها از یک مدل ساده رانش–نفوذ بهعنوان مثال استفاده میکند. برای دسترسی به آن، روی آیکون شبیهسازی جدید در نوار File کلیک کنید تا پنجره شبیهسازی جدید باز شود (شکل ??). از اینجا، روی دسته اسکریپتنویسی و برازش دوبار کلیک کنید تا پوشهای که در شکل ?? نشان داده شده است باز شود. مثال برازش و استخراج پارامتر را انتخاب کنید تا یک پروژه نمایشی بارگذاری شود. هنگام باز شدن، یک شبیهسازی ساده سلول خورشیدی را اجرا میکند (شکل ??). اگرچه این دمو روی یک سلول خورشیدی تمرکز دارد، موتور برازش را میتوان برای هر شبیهسازی و هر مجموعه داده تجربی بهکار برد.
وقتی شبیهسازی جدید را ذخیره کردید، پنجره اصلی شبیهسازی ظاهر خواهد شد (??). از اینجا، به نوار Automation بروید (که با قرمز مشخص شده است) و آیکون برازش به آزمایش را انتخاب کنید تا به پنجره برازش ?? دسترسی پیدا کنید.
پنجره برازش کنترل میکند که بهینهسازی چگونه انجام شود: این پنجره مشخص میکند کدام مجموعه دادههای تجربی استفاده میشوند و کدام متغیرهای شبیهسازی تنظیم میشوند. میتوانید به یک مجموعه داده منفرد، همانطور که در اینجا نشان داده شده است، برازش انجام دهید یا به چندین مجموعه داده بهطور همزمان برای استخراج پارامتر مقیدتر برازش کنید. در شکل ??، خط آبی نمایانگر منحنی JV تجربی است که برای برازش استفاده خواهد شد.
💡 تمرین عملی: استفاده از پنجره برازش
- کار 1 – یک تکرار: روی دکمه یک تکرار کلیک کنید تا نمای برازش بهروزرسانی شود (??a). در زبانه Delta = Experiment − Simulation، منحنی JV شبیهسازیشده (آبی) را خواهید دید که روی منحنی JV تجربی (قرمز) قرار گرفته است، بههمراه منحنی سبز delta که بهصورت نقطهبهنقطه به شکل \( \Delta(V) = J_{\mathrm{exp}}(V) - J_{\mathrm{sim}}(V) \) تعریف میشود. یک نقطه شروع خوب زمانی است که منحنی سبز در سراسر بازه ولتاژ به صفر نزدیک باشد.
-
کار 2 – اجرای برازش:
دکمه اجرای برازش را فشار دهید تا کمینهساز خودکار آغاز شود (با فشردن دوباره آن اجرا متوقف میشود).
در طول چند گام اول ممکن است خطا برای مدت کوتاهی افزایش یابد، اما سپس باید با همگرا شدن منحنیهای شبیهسازیشده و
تجربی کاهش یابد. به زبانه پیشرفت برازش بروید تا خطا را بر حسب تکرار رسم کنید
(??b)؛ این نمودار همچنین
برای رسم خارجی در
fitlog.csvدر پوشه شبیهسازی ذخیره میشود. روی یک پیکربندی معمولی این مرحله حدود ~30 s طول میکشد.
3. افزودن و حذف دادهها
پنجره اصلی برازش یک نوارابزار از فرمانها را فراهم میکند که نحوه افزودن، مدیریت و برازش آزمایشها را کنترل میکنند. این دکمهها به شما امکان میدهند مجموعه دادهها را وارد یا حذف کنید، پیکربندی کنید کدام پارامترها تغییر داده شوند، و فرایند برازش را آغاز یا متوقف کنید. مهمترین گزینهها عبارتاند از:
- آزمایش جدید: یک مجموعه داده تجربی دیگر به پنجره برازش اضافه میکند. برای مثال، میتوانید هم یک منحنی JV روشن و هم یک منحنی JV تاریک را وارد کنید. برازش در برابر چندین مجموعه داده، قابلیت اعتماد پارامترهای استخراجشده را بهبود میدهد، اما فرایند برازش را کندتر و چالشبرانگیزتر نیز میکند.
- حذف آزمایش: مجموعه داده انتخابشده را از برازش حذف میکند.
- شبیهسازی آزمایش: یک نسخه تکراری از مجموعه داده فعلی ایجاد میکند.
- تغییر نام آزمایش: به شما اجازه میدهد نام مجموعه داده انتخابشده را تغییر دهید.
- خروجی گرفتن از داده: برازش فعلی و دادهها را بهصورت یک فایل zip فشرده ذخیره میکند.
- وارد کردن داده: دادههای تجربی خارجی را در پنجره برازش بارگذاری میکند (برای جزئیات به بخش Import Wizard مراجعه کنید).
- پیکربندی: پنجره پیکربندی را برای تعریف اینکه کدام متغیرها در طول برازش تنظیم شوند باز میکند (در ادامه با جزئیات توضیح داده شده است).
- یک تکرار: یک گام برازش منفرد را اجرا میکند تا بررسی شود شبیهسازی تا چه حد به دادههای تجربی نزدیک است. توصیه میشود از این گزینه استفاده کنید و پارامترها را بهصورت دستی تنظیم کنید تا پیش از اجرای برازش خودکار یک نقطه شروع معقول داشته باشید.
- اجرای برازش: الگوریتم برازش خودکار را آغاز میکند. این فرایند تا زمانی که با فشردن دوباره دکمه بهصورت دستی متوقف نشود ادامه مییابد.
- برازش این مجموعه داده: برازش را برای مجموعه دادهای که اکنون انتخاب شده است فعال یا غیرفعال میکند.
4. نوار کمینهساز
نوار کمینهساز کنترل الگوریتم بهینهسازی مورد استفاده در طول برازش را فراهم میکند. از این زبانه میتوانید انتخاب کنید کدام کمینهساز به کار رود (برای مثال، Nelder–Mead downhill simplex پیشفرض) و تنظیمات آن را پیکربندی کنید. این نوار همچنین ابزارهایی برای مدیریت متغیرهای برازش، تکرار پارامترها، و اعمال قواعد ریاضی برای مقید کردن برازش در بر میگیرد. با تنظیم این گزینهها میتوانید نحوهای را که الگوریتم فضای پارامتر را کاوش میکند کنترل کنید، میان سرعت و دقت تعادل برقرار کنید، و اطمینان یابید که قیود فیزیکی معنادار در طول فرایند برازش اعمال میشوند.
5. تنظیم متغیرهایی که باید برازش شوند
برای باز کردن پنجره Fit variables، به نوار Minimizer در پنجره برازش (شکل ??) بروید و روی Fitting variables کلیک کنید. این پنل (شکل ??) به شما اجازه میدهد انتخاب کنید کدام پارامترها در طول برازش تغییر داده شوند و کرانهای آنها را تعیین کنید. برای سرعت و پایداری، با یک مجموعه کوچک از پارامترهای متقارن شروع کنید؛ فقط پس از آنکه یک برازش اولیه معقول به دست آوردید، پارامترهای بیشتری اضافه کنید (یا عدم تقارن وارد کنید).
جدول Fit variables شامل هفت ستون است: فعالشده، متغیر، حداقل، حداکثر، تابع خطا، مقیاس لگاریتمی، و متغیر (JSON).
- فعالشده: برازش متغیر را روشن یا خاموش میکند.
- متغیر: مسیر متغیری را که باید برازش شود به English توصیف میکند.
- حداقل: کمینه مقداری که متغیر میتواند داشته باشد.
- حداکثر: بیشینه مقداری که متغیر میتواند داشته باشد.
- تابع خطا: اگر متغیر از بازه min–max خود خارج شود، یک جریمه به خطای کلی برازش اضافه میشود. این کار عملاً الگوریتم را به درون کرانهای مجاز بازمیراند.
- مقیاس لگاریتمی: پارامتر را در مقیاس لگاریتمی برازش میکند. برای متغیرهایی مفید است که چندین مرتبه بزرگی را در بر میگیرند تا کل بازه کاوش شود.
- متغیر (JSON): معمولاً پنهان است؛ مسیر کامل پارامتر را در
قالب
jsonنمایش میدهد. backend از این مسیر استفاده میکند، در حالی که مسیر English فقط برای خوانایی است و ممکن است همیشه دقیق نباشد.
6. تکرار متغیرها
پنجره Duplicate variables را از نوار Minimizer (??) باز کنید. این ابزار در هر تکرار، یک پارامتر مبدأ را به یک پارامتر مقصد آینه میکند. در مثال دستگاه متقارن، فقط پارامتر سمت الکترون را برازش میکنیم و از Duplicate variables استفاده میکنیم تا مقدار آن را به پارامتر متناظرِ سمت حفره کپی کنیم و آنها را در سراسر برازش برابر نگه داریم (نگاه کنید به ??).
ستون Function y = f(x) مشخص میکند که مقدار مبدأ x چگونه پیش از
نوشته شدن در مقصد y تبدیل شود. مقدار پیشفرض x یک کپی مستقیم انجام میدهد؛ مثالهایی مانند
2*x (دو برابر کردن مقدار) یا x + 0.05 (اعمال یک offset) نیز ممکن هستند.
7. قوانین برازش
پنجره Fit rules (??) که از نوار Minimizer قابل دسترسی است، به شما امکان میدهد قیود ریاضی را به فرایند برازش اعمال کنید. هرگاه یک شرط نقض شود، قوانین یک جریمه به تابع خطا اضافه میکنند. برای مثال، میتوانید اعمال کنید که یک پارامتر باید همیشه از پارامتر دیگری بزرگتر باشد، یا اگر یک متغیر از یک بازه قابلقبول خارج شود جریمه اعمال کنید. این کار به حفظ معناداری فیزیکی برازش کمک میکند و از کاوش کمینهساز در ترکیبهای پارامتری غیرواقعی جلوگیری میکند.
x > y را برای اعمال
روابط بین پارامترها تعریف کنند. اگر یک قانون نقض شود، یک خطای اضافی به برازش افزوده میشود و
کمینهساز را به یک ناحیه معتبر از فضای پارامتر بازمیگرداند.
💡 نکتهها و ترفندهای کلیدی برای برازش:
- بهطور کلی، برازش یک فرایند دشوار است که به صبر زیاد و تنظیم دقیق دستی نیاز دارد. انتظار نداشته باشید با یک کلیک همهچیز خودبهخود کار کند — برای رسیدن به برازشهای خوب باید با دقت کار کنید.
- اگر برازش کار نمیکند، ممکن است فرضیات فیزیکی شما درباره دستگاه نادرست باشند. مدل فقط دادههای فیزیکی معقول را برازش میکند، بنابراین اگر چیزی یک مرتبه بزرگی اختلاف دارد، در فرضی که از مدل میخواهید انجام دهد بازنگری کنید. برای مثال، اگر اصلاً نمیتوانید \(J_{sc}\) را در یک سلول خورشیدی منطبق کنید، آیا ممکن است ماده شما بهسادگی فوتون کافی جذب نکند تا به مقدار مطلوب \(J_{sc}\) برسد؟
- مجموعه دادههای مختلف، انواع مختلفی از اطلاعات را فراهم میکنند. برای مثال، منحنی JV تاریک یک سلول خورشیدی بینشهایی درباره مقاومت شنت، مقاومت سری، و برخی جزئیات تحرک/بازترکیب فراهم میکند. منحنی JV روشن، با این حال، تقریباً هیچ اطلاعاتی درباره مقاومت شنت فراهم نمیکند، بنابراین انتظار نداشته باشید برآوردهای دقیقی از \(R_{shunt}\) به شما بدهد. همیشه پیش از تفسیر پارامترهای برازششده، به این فکر کنید که داده شما چه اطلاعاتی در خود دارد.
- فرایند برازش به این صورت عمل میکند: 1) اجرای یک شبیهسازی؛ 2) محاسبه اختلاف بین نتایج عددی و تجربی؛ 3) تنظیم پارامترها؛ 4) اجرای دوباره شبیهسازی و بررسی اینکه آیا خطا کاهش یافته است؛ 5) اگر خطا کاهش یابد، تغییر پارامتر پذیرفته میشود و فرایند تکرار میشود. این کار میتواند صدها یا هزاران تکرار طول بکشد. بنابراین، شبیهسازیهای منفرد باید سریع اجرا شوند. برای مثال، اگر مش شما 1000 نقطه دارد، برای برازش آن را به 10 کاهش دهید؛ اگر 1000 گام زمانی دارید، آن را به 100 کاهش دهید. هر افزایش سرعت در شبیهسازی پایه، فرایند برازش را نیز سریعتر میکند.
- نوشتن فایلها روی دیسک کندترین بخش هر فرایند محاسباتی است. حتی SSDهای مدرن نیز حدود 30× کندتر از حافظه اصلی هستند (برای مثال 456 MB/s در برابر 12,800 MB/s برای PC3-12800). استفاده از درایوهای USB، ذخیرهسازی شبکهای، یا خدمات ابری مانند OneDrive/Dropbox این مسئله را حتی بدتر میکند. برای سرعت بیشتر، همیشه شبیهسازیها را روی یک SSD محلی ذخیره کنید (نه روی درایو شبکهای یا مکانیکی).
- تعداد فایلهایی را که شبیهسازی شما تولید میکند به حداقل برسانید. خروجیهای غیرضروری مانند snapshots، خروجی نوری، یا پوشههای دینامیکی را خاموش کنید. یک شبیهسازی خوب پیکربندیشده باید فقط حدود 50 فایل تولید کند. اگر صدها فایل میبینید، بررسی کنید چرا.
- اگرچه برازش را میتوان در GUI انجام داد، اما اغلب کند است. یک روش خوب این است که برازشها را در GUI تنظیم کنید اما آنها را از خط فرمان اجرا کنید (دستورالعملها در ادامه داده شدهاند).
- از آنجا که برازش فایلهای زیادی را روی دیسک مینویسد، نرمافزارهای آنتیویروس میتوانند با اسکن هر فایل باعث کندی شوند. در صورت بروز این مشکل، پوشه شبیهسازی خود را از اسکن بلادرنگ مستثنا کنید.
👉 گام بعدی: اکنون به بخش B ادامه دهید تا با روشهای پیشرفتهتر برازش آشنا شوید.