پرش به محتویات

مفاهیم مدل‌سازی

هر کارِ علمی و مهندسی با یک مدل آغاز می‌شود. وقتی می‌خواهیم بفهمیم یک وزنه روی فنر چگونه نوسان می‌کند، یا یک پرتابه چه مسیری می‌پیماید، واقعیتِ کامل را با همهٔ جزئیاتِ بی‌شمارش کنار می‌گذاریم و به‌جای آن نسخه‌ای ساده‌شده و هدفمند می‌سازیم که تنها جنبه‌های موردِ علاقهٔ ما را بازتولید می‌کند. این فصل، مفاهیم پایه‌ای را معرفی می‌کند که زیربنای هر تلاشِ مدل‌سازی‌اند.

مدل چیست؟

به‌کوتاهی: یک مدل، نسخه‌ای ساده‌شده و هدفمند از واقعیت است که فقط بخش‌های مهمِ آن را نشان می‌دهد. به بیانِ فنی‌تر، یک مدل یک انتزاعِ هدفمند (به انگلیسی: abstraction) از واقعیتِ فیزیکی است. واژهٔ «انتزاع» در فارسی ممکن است سنگین به‌نظر برسد، پس پیش از هر چیز معنای آن را روشن کنیم.

منظور از «انتزاع» چیست؟

هر چیزی در دنیای واقعی بی‌نهایت جزئیات دارد. اگر بخواهیم همه‌چیز را همان‌گونه که هست توصیف کنیم، در انبوهی از اطلاعات غرق می‌شویم. انتزاع یعنی فیلترکردنِ هوشمندانهٔ جزئیات: جزئیاتی را که در حال حاضر به آن‌ها نیازی نداریم کنار می‌گذاریم و تنها بر اصلِ مطلب تمرکز می‌کنیم. نکتهٔ مهم این است که این حذف تصادفی نیست، بلکه بر پایهٔ هدفِ ما انجام می‌شود.

بهترین مثال، نقشهٔ مترو است. نقشهٔ متروی یک شهر، یک مدلِ انتزاعی از واقعیتِ شهر است. در این نقشه، درختان، ساختمان‌ها، ترافیک خیابان‌ها و حتی خم‌وپیچ‌های دقیقِ تونل‌ها حذف شده‌اند. چرا؟ چون مسافر تنها می‌خواهد بداند کدام ایستگاه به کدام ایستگاه وصل است. این یعنی حذفِ هدفمندِ جزئیات. توجه کنید که اگر یک مهندسِ عمران بخواهد همان تونل را بسازد، این نقشه برایش بی‌فایده است و به مدلی دیگر با جزئیاتی کاملاً متفاوت نیاز دارد. پس هدفِ متفاوت، انتزاعِ متفاوت می‌طلبد.

بنابراین هر جا در علم یا مهندسی واژهٔ «انتزاع» را شنیدید، به‌جای یک مفهومِ پیچیده، یادِ فیلترکردنِ هوشمندانهٔ واقعیت برای رسیدن به یک هدفِ خاص بیفتید.

نویسندهٔ آرژانتینی، خورخه لوئیس بورخس، در داستانی یک‌بندی به نامِ «دربابِ دقت در علم» همین نکته را به‌زیبایی به تصویر کشیده است. ترجمهٔ آزادِ آن چنین است:

در بابِ دقت در علم، نوشتهٔ خورخه لوئیس بورخس

در آن امپراتوری، ترسیم نقشه چنان پیشرفت کرده بود که نقشهٔ یک استان به‌بزرگیِ یک شهر بود و نقشهٔ کلِ امپراتوری به‌بزرگیِ یک استان. با گذشت زمان، این نقشه‌های بزرگ هم کافی به نظر نرسید، و نقشه‌کش‌ها نقشه‌ای از امپراتوری کشیدند که درست به‌اندازهٔ خودِ امپراتوری بود و نقطه‌به‌نقطه بر آن منطبق می‌شد. نسل‌های بعد، که دیگر مثل گذشتگان به ترسیم نقشه علاقه نداشتند، دیدند که این نقشهٔ عظیم بی‌فایده است و آن را رها کردند تا زیرِ آفتاب و باران از بین برود. امروز هم در بیابان‌های غربی، تکه‌های پاره‌پارهٔ آن نقشه باقی مانده که جانوران و آدم‌های بی‌خانمان در آن زندگی می‌کنند؛ و در سراسرِ آن سرزمین، هیچ نشانِ دیگری از علمِ جغرافیا باقی نمانده است.

نکتهٔ بورخس همان نکتهٔ ماست: نقشه‌ای که به‌اندازهٔ خودِ سرزمین و نقطه‌به‌نقطه دقیق باشد، از هیچ جزئیاتی نگذشته، و درست به همین دلیل کاملاً بی‌فایده است. ارزشِ یک نقشه، یا یک مدل، در همان چیزی است که حذف می‌کند، نه در آنچه نگه می‌دارد.

انتزاع فقط دربارهٔ نقشه‌ها نیست

مفهومِ انتزاع (abstraction) یکی از بنیادی‌ترین ابزارها در علوم مختلف است. وقتی لایه‌های پیچیده و غیرضروریِ زیرین کنار زده می‌شوند، می‌توان روی مدل‌سازی و حلِ مسئلهٔ اصلی تمرکز کرد. نقشه تنها یک نمونه از آن است؛ همین الگو را در جاهای دیگری هم می‌بینیم که در نگاهِ نخست هیچ ربطی به هم ندارند:

نمونهٔ انتزاع ویژگی‌های حفظ‌شده جزئیات حذف‌شده هدف اصلی
نقشهٔ جغرافیایی مسیرها، مقیاس فضایی، عوارض اصلی جنس خاک، درختان، آب‌وهوای لحظه‌ای مسیریابی و تحلیل فضایی
مدل ریاضی نورون (مثلاً LIF) پتانسیل غشا، آستانهٔ تحریک، زمان اسپایک سینتیکِ کانال‌های یونی، ریخت‌شناسی دندریت‌ها بررسی دینامیک شبکه‌های عصبی
کانتینر نرم‌افزاری کد، محیط اجرا، وابستگی‌های برنامه هستهٔ سیستم‌عامل میزبان، درایورهای سخت‌افزاری اجرای مستقل و قابل حمل

ردیفِ میانی برای خواننده‌ای که هنوز به فصل‌های بیوفیزیک نرسیده است شاید ناآشنا باشد، پس کوتاه توضیح دهیم. کانال‌های یونی پروتئین‌هایی در غشای نورون‌اند که مانندِ دریچه‌هایی بسیار ریز باز و بسته می‌شوند و به یون‌ها اجازهٔ عبور از غشا را می‌دهند؛ سینتیکِ آن‌ها یعنی اینکه این باز و بسته‌شدن با چه سرعتی و بر پایهٔ چه قاعده‌ای رخ می‌دهد (فصلِ سلول، غشا و کانال‌های یونی). دندریت‌ها شاخه‌های درخت‌مانندِ نورون‌اند که ورودی را از سلول‌های دیگر دریافت می‌کنند، و ریخت‌شناسی یعنی شکل و آرایشِ هندسیِ همین شاخه‌ها: چند شاخه، به چه بلندی و با چه انشعابی (فصلِ کابل و مدل‌های تقسیمی).

مدلِ LIF هر دوی این‌ها را کنار می‌گذارد: نه کانالی دارد و نه شاخه‌ای، و تنها یک ولتاژ و یک آستانه نگه می‌دارد. برای پرسشِ «شبکه‌ای از هزاران نورون چگونه رفتار می‌کند» همین اندازه کافی است؛ برای پرسشِ «این شاخهٔ دندریتی با ورودیِ خود چه می‌کند» کافی نیست.

در هر سه ردیف، الگو یکی است: چیزی حذف شده، آن حذف بر پایهٔ یک هدف انجام شده، و نتیجه ابزاری است که برای همان هدف کار می‌کند و برای هدفی دیگر نه.

اما انتزاع همیشه یک لایه نیست. گاهی چند انتزاع روی هم سوار می‌شوند و هر لایه، لایهٔ زیرینِ خود را پنهان می‌کند. روشن‌ترین نمونهٔ این انتزاعِ لایه‌لایه، همان چیزی است که هر بار برنامه‌ای می‌نویسید با آن سر و کار دارید:

سطح انتزاع ویژگی‌های برجسته جزئیات حذف‌شده هدف اصلی
کد سطح بالا (زبان برنامه‌نویسی) متغیرها، توابع، حلقه‌ها، شی‌گرایی ثبات‌های پردازنده (Registers)، مدیریت مستقیم حافظه، الگوی فراخوانی سیستم بیان منطق برنامه به زبان قابل فهم برای انسان
کامپایلر (لایه واسط انتزاع) ترجمه منطق برنامه به دستورات ماشین، بهینه‌سازی کد نوسانات ولتاژ، مدارهای منطقی سخت‌افزاری، پیاده‌سازی فیزیکی ترانزیستورها ترجمهٔ خودکارِ انتزاعِ انسانی به انتزاعِ سخت‌افزاری
کد ماشین / اسمبلی دستورالعمل‌های ISA (مثل x86 یا ARM)، آدرس‌های حافظه لایه‌های انتزاعی معماری، گیت‌های منطقی NAND/NOR هدایت مستقیم سخت‌افزار جهت اجرای عملیات

کامپایلر فاصلهٔ میان تفکرِ منطقیِ انسان (زبان‌های سطح بالا مثل Python، C++ یا Rust) و رفتارِ فیزیکیِ سخت‌افزار (جریان‌های الکتریکی و دستورالعمل‌های صفر و یکِ پردازنده) را پر می‌کند.

این تصویرِ لایه‌لایه دقیقاً همان چیزی است که در این کتاب با مغز خواهیم کرد: کانال یونی، غشا، نورون، شبکه و رفتار، هر کدام یک سطحِ انتزاع‌اند، و انتخابِ سطحِ درست برای پرسشی که در دست داریم، نخستین تصمیمِ هر مدل‌ساز است.

با این مقدمه، می‌توانیم به تعریفِ دقیق بازگردیم. ما همواره با یک سامانه سر و کار داریم؛ برای نمونه یک وزنهٔ روی فنر، یک سیّاره به‌دورِ خورشید، یا یک مدارِ الکتریکی. دربارهٔ رفتارِ این سامانه پرسش داریم و برای پاسخ، مدلی می‌سازیم که تنها آن جنبه‌هایی از سامانه را که برایمان مهم‌اند تقلید کند، و باقی را مانندِ نقشهٔ مترو فیلتر می‌کنیم.

نکتهٔ کلیدی این است که ما تنها بخشی از سامانه را مدل می‌کنیم. اگر مسیرِ یک پرتابه را مدل می‌کنیم، شاید مقاومتِ هوا، چرخشِ توپ یا تغییراتِ محلیِ شتابِ گرانش را نادیده بگیریم. اگر این عوامل بر پاسخِ ما به‌طورِ معنادار اثر نگذارند، مدلِ ما به‌قدرِ کافی خوب است.

همین نکته را آماردانِ بزرگ، جورج باکس، در یک جملهٔ ماندگار خلاصه کرده است: «همهٔ مدل‌ها نادرست‌اند، اما برخی سودمندند.» هیچ مدلی واقعیت را به‌تمامی توصیف نمی‌کند؛ ارزشِ یک مدل نه در کامل‌بودنِ آن، بلکه در سودمندی‌اش برای پاسخ به پرسشی مشخص است.

چرخهٔ مدل‌سازی چند گام دارد. نخست انتزاع از سامانهٔ واقعی، سپس ریاضی‌سازی یعنی نوشتنِ معادله‌ها، آن‌گاه محاسبه که اغلب به‌صورتِ عددی است، و سرانجام تفسیر نتایج برای پاسخ به پرسشِ اصلی. در کنارِ این‌ها باید راستی‌آزمایی کنیم که آیا مدل به‌واقع سامانه را به‌درستی توصیف می‌کند یا نه.

برای نمونه، مسیرِ یک پرتابه را در نظر بگیرید که با سرعتِ اولیهٔ \(v_0\) و زاویهٔ \(\theta\) پرتاب می‌شود. ساده‌ترین مدل، معادله‌های حرکت بدونِ مقاومتِ هواست:

\[ x = v_0 t \cos\theta, \qquad y = v_0 t \sin\theta - \tfrac{1}{2} g t^2. \]

این مدلِ بسیار ساده‌ای است. اینکه برای پاسخ به پرسشِ ما کافی باشد یا نه، به خودِ پرسش بستگی دارد.

چهار پرسش بنیادی

این فصل و فصل‌های بعدِ این بخش، حولِ چهار پرسش سازمان می‌یابند که در هر شاخه از علم و مهندسی به کار می‌آیند:

  1. مدل چیست و چه انواعی دارد؟ یعنی چگونه یک سامانه را ساده کنیم (انتزاع) و در یک دسته جای دهیم (فصل بعد: رده‌بندی مدل‌ها).
  2. چگونه مدلِ مناسب را انتخاب کنیم؟ یعنی چگونه فرض‌ها را انتخاب کنیم و میان دقت و سادگی توازن برقرار کنیم (تصمیم‌های مدل‌سازی).
  3. از کجا بدانیم مدل دقیق است؟ یعنی راستی‌آزمایی، واسنجی و اعتبارسنجی.
  4. چگونه کارایی مدل را بسنجیم؟ یعنی نیکویی برازش.

در ادامه، هر یک از این پرسش‌ها را در فصلی جداگانه می‌کاویم. این مفاهیم، هرچند ساده به‌نظر می‌رسند، شالودهٔ تفکرِ درست دربارهٔ هر مدلی هستند، از یک وزنهٔ روی فنر تا شبیه‌سازیِ کاملِ یک سامانهٔ فیزیکی.

پرسش‌ها

این پرسش‌ها بیش از آنکه پاسخِ عددیِ یکتا بخواهند، «شیوهٔ اندیشیدن» به مدل‌سازی را می‌آزمایند. پیشنهاد می‌کنیم نخست خودتان چند دقیقه به هر پرسش فکر کنید و پاسخِ خود را بنویسید، سپس روی «پاسخ» کلیک کنید و آن را با استدلالِ ارائه‌شده بسنجید.

پرسشِ ۱

انتزاع و نقشه. چرا مدلی که هیچ جزئیاتی از واقعیت را حذف نمی‌کند بی‌فایده است؟ پاسخ را با تکیه بر مثالِ نقشهٔ مترو و داستانکِ بورخس توضیح دهید.

پاسخ

ارزشِ یک مدل در همان چیزی است که حذف می‌کند، نه در آنچه نگه می‌دارد. نقشهٔ مترو دقیقاً به این دلیل سودمند است که درختان، ساختمان‌ها، ترافیک و خم‌وپیچِ تونل‌ها را دور ریخته و تنها رابطهٔ «کدام ایستگاه به کدام ایستگاه وصل است» را نگه داشته؛ همین حذفِ هدفمند، خواندنِ نقشه را ممکن می‌کند. در داستانکِ بورخس، نقشه‌کش‌ها نقشه‌ای می‌کشند که نقطه‌به‌نقطه به‌اندازهٔ خودِ امپراتوری است؛ چنین نقشه‌ای هیچ جزئیاتی را فیلتر نمی‌کند و درست به همین علت هیچ کمکی به کسی نمی‌کند و رها می‌شود تا از میان برود. نتیجه: انتزاع، یعنی فیلترکردنِ هوشمندانهٔ جزئیات بر پایهٔ هدف، جوهرِ مدل‌سازی است. مدلی که چیزی حذف نکند، صرفاً کپیِ واقعیت است و همان‌قدر پیچیده و همان‌قدر بی‌فایده.

پرسشِ ۲

جملهٔ باکس. جورج باکس می‌گوید «همهٔ مدل‌ها نادرست‌اند، اما برخی سودمندند.» این جمله چه معنایی دارد و معیارِ «خوب‌بودن» یک مدل چیست؟

پاسخ

منظور این است که هیچ مدلی واقعیت را به‌تمامی و بی‌کم‌وکاست توصیف نمی‌کند؛ هر مدل ناگزیر ساده‌سازی و در نتیجه «نادرست» است. اما این نادرستی عیب نیست، بلکه لازمهٔ سودمندی است. معیارِ خوب‌بودنِ یک مدل، نه کامل‌بودن یا بازتولیدِ همهٔ جزئیات، بلکه سودمندیِ آن برای پاسخ به یک پرسشِ مشخص است. یک مدل «به‌قدرِ کافی خوب» است اگر عواملی که نادیده گرفته (مثلاً مقاومتِ هوا در پرتاب) بر پاسخِ موردِ نظرِ ما اثرِ معنادار نگذارند. پس پیش از داوری دربارهٔ یک مدل باید پرسید: «برای پاسخ به کدام پرسش؟»

پرسشِ ۳

چرخهٔ مدل‌سازی. گام‌های چرخهٔ مدل‌سازی را برای مسیرِ یک پرتابه نام ببرید و نقشِ هر گام را کوتاه توضیح دهید.

پاسخ

چرخهٔ مدل‌سازی این گام‌ها را دربر می‌گیرد:

  • انتزاع: از پرتابهٔ واقعی تنها جرمِ نقطه‌ای و سرعتِ اولیه را نگه می‌داریم و مقاومتِ هوا، چرخش و شکلِ جسم را کنار می‌گذاریم.
  • ریاضی‌سازی: حرکت را با معادله‌ها می‌نویسیم، مثلاً \(x = v_0 t \cos\theta\) و \(y = v_0 t \sin\theta - \tfrac{1}{2} g t^2\).
  • محاسبه: معادله‌ها را حل می‌کنیم؛ گاه به‌صورتِ تحلیلی و اغلب در مسائلِ پیچیده‌تر به‌صورتِ عددی.
  • تفسیر: از پاسخ، کمیتِ موردِ پرسش را بیرون می‌کشیم؛ مثلاً بُردِ پرتابه یا بیشینهٔ ارتفاع.
  • راستی‌آزمایی: می‌سنجیم که آیا مدل به‌واقع رفتارِ سامانه را به‌درستی توصیف می‌کند یا باید فرض‌ها را بازبینی کنیم.

نکتهٔ کلیدی این است که این چرخه اغلب تکرارشونده است: اگر تفسیر یا راستی‌آزمایی نشان دهد مدل ناکافی است، به گامِ انتزاع بازمی‌گردیم و فرض‌ها را تغییر می‌دهیم.

پرسشِ ۴

چه هنگام صرفِ‌نظر از مقاومتِ هوا رواست؟ مدلِ سادهٔ پرتابه مقاومتِ هوا را نادیده می‌گیرد. چگونه می‌توان تصمیم گرفت که این ساده‌سازی «به‌قدرِ کافی خوب» است؟ با یک مقایسهٔ عددی نشان دهید.

پاسخ

پاسخِ اصولی این است که اثرِ عاملِ حذف‌شده را کمّی کنیم و با دقتِ موردِ نیازِ پرسش بسنجیم. بُردِ بدونِ مقاومتِ هوا از رابطهٔ بستهٔ \(R = v_0^2 \sin(2\theta)/g\) به‌دست می‌آید. برای دیدنِ اثرِ مقاومت، همان پرتاب را با یک نیروی پسآِ درجه‌دو (متناسب با مربعِ تندی، با ضریبِ \(k\) بر واحدِ جرم) به‌صورتِ عددی حل می‌کنیم و بُرد را مقایسه می‌کنیم:

import numpy as np

g, v0, theta = 9.81, 20.0, np.radians(45)
R_ideal = v0**2 * np.sin(2*theta) / g          # no-drag range

def range_with_drag(k, dt=1e-4):
    x = y = 0.0
    vx, vy = v0*np.cos(theta), v0*np.sin(theta)
    while y >= 0.0:
        v = np.hypot(vx, vy)
        vx += -k*v*vx * dt
        vy += (-g - k*v*vy) * dt
        x_prev, y_prev = x, y
        x += vx*dt; y += vy*dt
    frac = y_prev / (y_prev - y)                # interpolate to y = 0
    return x_prev + frac*(x - x_prev)

for k in [0.0, 0.001, 0.01, 0.05]:
    R = R_ideal if k == 0 else range_with_drag(k)
    print(f"k={k:<6} range={R:6.2f} m")

خروجی چنین است:

k=0.0    range= 40.77 m
k=0.001  range= 39.52 m
k=0.01   range= 31.32 m
k=0.05   range= 17.52 m

برای \(k = 0.001\) بُرد تنها حدودِ سه درصد کم می‌شود؛ اگر دقتِ موردِ نیازِ ما در حدِ چند درصد باشد، صرفِ‌نظر از مقاومتِ هوا کاملاً موجه است. اما برای \(k = 0.01\) بُرد بیش از بیست درصد افت می‌کند و برای \(k = 0.05\) به کمتر از نیمی از مقدارِ آرمانی می‌رسد؛ در این حالت‌ها مدلِ ساده دیگر «به‌قدرِ کافی خوب» نیست. پیامِ کلی: یک ساده‌سازی به‌خودیِ‌خود درست یا نادرست نیست؛ اعتبارش به آن بستگی دارد که اثرِ حذف‌شده در برابرِ دقتِ موردِ نظرِ پرسش، ناچیز باشد یا نه.