<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های tara brn</title>
        <link>https://virgool.io/feed/@tarabrn</link>
        <description>یه مهندس نرم‌افزار که داره تلاش می‌کنه بره سمت هوش &gt;_&lt;</description>
        <language>fa</language>
        <pubDate>2026-04-15 09:52:24</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/353913/avatar/PZ4Ecw.jpg?height=120&amp;width=120</url>
            <title>tara brn</title>
            <link>https://virgool.io/@tarabrn</link>
        </image>

                    <item>
                <title>کاربردهای علم شبکه‌های پویای پیچیده در پیشبینی تقاضای حمل و نقل</title>
                <link>https://virgool.io/@tarabrn/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%B9%D9%84%D9%85-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%D9%88%DB%8C%D8%A7%DB%8C-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%87-%D8%AF%D8%B1-%D9%BE%DB%8C%D8%B4%D8%A8%DB%8C%D9%86%DB%8C-%D8%AA%D9%82%D8%A7%D8%B6%D8%A7%DB%8C-%D8%AD%D9%85%D9%84-%D9%88-%D9%86%D9%82%D9%84-impat0hsddzn</link>
                <description>چکیدهپیش‌بینی درخواست‌های حمل و نقل و جابه‌جایی نقش حیاتی در بهینه‌سازی سیستم‌های حمل و نقل و بهبود کارآیی کلی مدیریت ترافیک دارد. در سال‌های اخیر، حوزه شبکه‌های پیچیده و پویا به منظور درک روابط و الگوهای پیچیده در شبکه‌های حمل و نقل، توجه قابل‌توجهی به خود جلب کرده است. این مطالعه بر روی استفاده از تکنیک‌های یادگیری نمای گراف برای پیش‌بینی درخواست‌های ترافیک با دقت بالا تمرکز دارد.هدف این تحقیق، ارائه یک مدل قوی و دقیق برای پیش‌بینی می‌باشد با بهره‌گیری از تحلیل شبکه‌های پیچیده و الگوریتم‌های یادگیری ماشین. مدل پیشنهادی از منابع داده متنوعی از جمله داده‌های تاریخی ترافیک، اطلاعات جغرافیایی و ویژگی‌های زمینه‌ای استفاده می‌کند تا پویایی‌های مرتبط با درخواست‌های ترافیک را بهبود بخشد. برای دستیابی به این هدف، ترکیبی از الگوریتم‌های سنتی مانند روش‌های آماری و اندازه‌گیری مرکزیت و ...، به همراه تکنیک‌های پیشرفته یادگیری ماشین مانند شبکه‌های عصبی پیچشی گراف، استفاده خواهد شد. در روش‌های یادگیری ماشین، مدل بر روی مجموعه‌داده‌ای بزرگ از درخواست‌های ترافیک تاریخی و اطلاعات شبکه مربوطه آموزش داده می‌شود تا روابط پیچیده بین گره‌های مختلف را فرا بگیرد و درخواست‌های ترافیک آینده را با دقت بالا پیش‌بینی کند و عملکرد مدل پیشنهادی با استفاده از معیارهای مختلف ارزیابی ارزیابی خواهد شد تا برتری و کارایی روش یادگیری نمایشی گراف را بررسی کند.یافته‌های این تحقیق به حوزه پیش‌بینی ترافیک و شبکه‌های پیچیده پویا کمک خواهد کرد با ارائه رویکردی نوآورانه و دقیق در پیش‌بینی درخواست‌های ترافیک. مدل توسعه یافته قادر است سیستم‌های مدیریت ترافیک را بهبود دهد، تخصیص منابع را بهینه کند و در نهایت تجربه کلی حمل و نقل را برای سفرکنندگان بهبود بخشد.مقدمهدر علم شبکه‌های پیچیده پویا، پیش‌بینی‌‌های مربوط به ترافیک مسئله‌ای مهم است که درک و پیش‌بینی نوسانات و الگوهای ترافیکی در شبکه‌های پیچیده را ممکن می‌سازد. شبکه‌های پیچیده پویا معمولاً از تعداد زیادی عنصر (مانند گره‌ها و اتصالات) تشکیل شده‌اند که با یکدیگر تعامل می‌کنند و در طول زمان تغییر می‌کنند. در محیط‌های شهری، شبکه‌های جاده‌ای به عنوان نمونه‌ای از شبکه‌های پیچیده پویا مطرح هستند. ترافیک در این شبکه‌ها تحت تأثیر عوامل مختلفی مانند تقاضا، رویدادها، مسیریابی و نیز عملکرد سیستم‌های حمل و نقل است. پیش‌بینی ترافیک به این شکل می‌تواند به مدیریت و بهبود کیفیت حمل و نقل کمک کند.در علم شبکه‌های پیچیده پویا، روش‌های پیش‌بینی ترافیک از گستره‌ای از الگوریتم‌ها و مدل‌های مختلف بهره می‌برند. از روش‌های آماری و ساده‌تر مانند رگرسیون خطی تا روش‌های پیچیده‌تری مانند شبکه‌های عصبی، مدل‌های بازنمایی گراف و یادگیری عمیق استفاده می‌شود. این روش‌ها با تحلیل و پردازش داده‌های ترافیک، الگوها و نمونه‌های تاریخی را شناسایی کرده و بر اساس آن‌ها پیش‌بینی‌های دقیقی درباره ترافیک آینده ارائه می‌دهند. از این طریق، مدیران شبکه‌های حمل و نقل قادر خواهند بود تصمیمات بهتری برای بهبود جریان ترافیک و کاهش توقفات اتخاذ کنند. به طور مثال، با استفاده از داده‌هایGPS خودروها، می‌توان الگوهای حرکت خودروها را تحلیل کرده و پیش‌بینی‌هایی درباره جریان ترافیک در آینده ارائه داد. همچنین، با استفاده از داده‌های کنترل ترافیک می‌توان الگوهای تغییرات سیگنال‌های راهنمایی و رانندگی را بررسی کرده و ترافیک را در تقاطع‌ها پیش‌بینی کرد.امروزه، یادگیری بازنمایی گراف در حوزه ترافیک، یکی از رویکردهای مورد توجه است که با استفاده از شبکه‌های پیچیده پویا و الگوریتم‌های یادگیری ماشین، نمایشی مناسب و قابل استفاده از ساختار گراف ترافیک را ایجاد می‌کند. هدف اصلی این روش، استخراج نمایش برداری از عناصر مرتبط با ترافیک، مانند تقاطع‌ها، خیابان‌ها، خودروها و شرایط رانندگی، در قالب یک گراف است. در این رویکرد، اطلاعات مرتبط با ترافیک در یک گراف مدل می‌شوند که گره‌ها معمولاً عناصر ترافیکی و یال‌ها نشان‌دهنده ارتباطات بین آن‌ها هستند. سپس، با استفاده از الگوریتم‌های یادگیری ماشین و یادگیری نمایش گراف، بردارهای نمایشی برای هر گره در گراف استخراج می‌شوند. این بردارها معمولاً ویژگی‌های مرتبط با هر عنصر ترافیکی را در خود جای داده‌اند. با استفاده از این نمایش برداری، می‌توان مسائل مختلفی را در حوزه ترافیک حل کرد. به عنوان مثال، با استفاده از شبکه‌های عصبی گراف می‌توان ترافیک را در تقاطع‌ها پیش‌بینی کرد و زمان‌های تاخیر را تخمین زد. همچنین، با استفاده از مدل‌های یادگیری ماشین بر روی نمایش برداری ترافیک، می‌توان الگوهای رفتاری خودروها را تحلیل کرده و مسائلی مانند تشخیص رانندگی ناامن و پیش‌بینی تصادفات را بهبود داد.گراف مبدا-مقصد در این تحقیق یک ساختمان داده است که برای نمایش ارتباطات بین نقاط مبدا و مقصد در تقاضای سفر استفاده می‌شود. در این گراف، نقاط مبدا و مقصد به عنوان گره‌ها نمایش داده می‌شوند و یال‌ها ارتباطات بین این نقاط را نشان می‌دهند. گراف مبدا-مقصد اطلاعات مکانی و زمانی را در نظر می‌گیرد و ارتباطات بین نقاط را مدل‌سازی می‌کند. این گراف به طور مشخص اطلاعات اساسی را برای پیش‌بینی تقاضای سفر در نظر می‌گیرد و در مدل‌های یادگیری عمیق در ادامه این تحقیق به‌کار گرفته شده است. از این گراف برای استخراج ویژگی‌های مکانی، زمانی و ارتباطی بین نقاط مبدا و مقصد استفاده می‌شود که در نهایت استفاده از گراف مبدا-مقصد، بهبود قابل توجهی در دقت پیشبینی تقاضا و ارتقای کارایی مدیریت ترافیک و تخصیص منابع را به همراه دارد.کمی پس‌زمینه برای همگام شدن!بیایید قبل از شروع قسمت‌های بعد، کمی ادبیات این حوزه را مرور کنیم.انواع مسائل پیش‌بینی ترافیکجریان ترافیک به صورت تعداد وسایل نقلیه در حال تردد از یک واحد مکانی خاص در یک بازه زمانی خاص تعریف می‌شود.واحدهای مکانی را معمولا از طریق دوربین‌های حسگر، بخش خاصی از جاده‌ها و ... مشخص می‌کنند. در اینجا سه سطح مشکلات جریان ترافیک را مد نظر قرار می‌دهیم که شامل جریان در سطح جاده، جریان در سطح منطقه و جریان در سطح ایستگاه می‌باشد.مسائل جریان در سطح جادهمسائل جریان در سطح جاده مربوط به حجم ترافیک روی جاده‌ها هستند و شامل جریان ترافیک جاده، جریان مبدأ-مقصد جاده و ظرفیت ترافیک تقاطع‌ها می‌شود. در مشکلات جریان ترافیک جاده‌ای، هدف پیش‌بینی، حجم ترافیکی است که از یک سنسور جاده یا یک مکان خاص در طول جاده در یک بازه زمانی مشخص (مثلاً پنج دقیقه) عبور می‌کند. در مشکلات جریان مبدأ-مقصد جاده، هدف، حجمی است که در یک زمان مشخص بین یک مکان (مبدأ) و مکان دیگری (مقصد) وجود دارد. مشکل ظرفیت ترافیک تقاطع، حجم ترافیکی که از طریق یک تقاطع عبور می‌کند را مد نظر قرار می‌دهد.مسائل جریان در سطح منطقهمسائل جریان در سطح منطقه، حجم ترافیک در یک منطقه را مورد بررسی قرار می‌دهند.یک شهر ممکن است به بخش‌های منظم (که تقسیم‌بندی آن‌ها بر اساس شبکه مورد نظر مشخص است) یا بخش‌های نامنظم (مانند تقسیم بر اساس جاده‌ها یا کدهای پستی) تقسیم شود. این مشکلات بر اساس نوع حمل و نقل، به مشکلات جریان تاکسی منطقه‌ای، جریان دوچرخه منطقه‌ای، جریان سرویس اشتراکی منطقه‌ای و جریان مبدأ-مقصد تاکسی منطقه مربوط به حجم ترافیک در سطح منطقه هستند.در مشکلات جریان سرویس اشتراکی منطقه‌ای، حجم ترافیک مرتبط با خدمات اشتراکی مانند خدمات حمل و نقل عمومی یا خدمات رایگان اشتراکی در یک منطقه خاص را بررسی می‌کند. برای مثال جریان مبدأ-مقصد تاکسی منطقه مشکلی است که حجم ترافیک بین یک مبدأ و مقصد در یک منطقه خاص را بررسی می‌کند.مسائل جریان در سطح ایستگاهدر این بخش، مسائل جریان در سطح ایستگاه مورد بررسی قرار می‌گیرند. این مشکلات مربوط به حجم ترافیکی هستند که در یک ایستگاه فیزیکی مانند ایستگاه مترو یا اتوبوس اندازه گیری می‌شود. این مشکلات براساس نوع ایستگاه به مشکلات جریان مسافران مترو در سطح ایستگاه، جریان مسافران اتوبوس در سطح ایستگاه، جریان وسایل نقلیه اشتراکی در سطح ایستگاه، جریان دوچرخه در سطح ایستگاه و جریان مسافران راه آهن در سطح ایستگاه تقسیم می‌شوند.سرعت ترافیکسرعت ترافیک یکی دیگر از شاخص‌های مهم وضعیت ترافیک است که کاربردهای بالقوه‌ای در سامانه‌های حمل و نقل هوشمند Intelligent Transportation System &#40;ITS&#41; دارد. این شاخص به عنوان میانگین سرعت خودروها در یک واحد فضایی در یک بازه زمانی مشخص تعریف می‌شود. ارزش سرعت در جاده‌های شهری می‌تواند نشان‌دهنده سطح شلوغی ترافیک جاده باشد. به عنوان مثال،سرویس نقشه‌ی گوگل این سطح شلوغی را از داده‌های جمع‌سپاری جمع‌آوری شده از دستگاه‌های تلفن همراه و حسگرهای درون خودرو نشان می‌دهد. پیش‌بینی بهتر سرعت ترافیک همچنین برای مسیریابی و برنامه‌ریزی وقت ورود بسیار مفید است.سرعت ترافیک در دو سطح مسائل سرعت در سطح جاده و سطح منطقه مورد بررسی قرار می‌گیرند. همچنین در این دسته بندی، پیش‌بینی زمان سفر و پیش‌بینی شلوغی نیز در نظر گرفته می‌شوند زیرا این موارد با سرعت ترافیک به طور نزدیکی مرتبط هستند. پیش‌بینی زمان سفر برای مسافران برنامه‌ریزی زمان سفر و برای رانندگان انتخاب مسیرهای سریع را آسان می‌کند. شلوغی ترافیک یکی از مهم‌ترین و فوری‌ترین مشکلات حمل و نقل در شهرها است که باعث از دست دادن زمان قابل توجه، آلودگی هوا و هدررفت انرژی می‌شود.تقاضای ترافیکپیش‌بینی تقاضای ترافیک، یک جزء کلیدی برای موفقیت خدمات تاکسی و حمل و نقل آنلاین است و این موضوع به ارائه دهندگان این خدمات کمک می‌کند تا منابع محدود حمل و نقل موجود را به مناطق شهری با تقاضای بیشتر اختصاص دهند. در مورد مسافران، پیش‌بینی تقاضای ترافیک به آن‌ها کمک می‌کند تا در مواقعی که تاکسی یا سرویس‌های حمل و نقل آنلاین در دسترس نیستند، از راه‌های دیگر جابه‌جایی مانند سرویس‌های حمل و نقل عمومی استفاده کنند.تقاضای ترافیک به تقاضای پتانسیلی برای سفر اشاره دارد که ممکن است به صورت کامل برآورده شود یا نشود. به عنوان مثال، در یک پلتفرم آنلاین درخواست تاکسی ، درخواست‌های سفری که توسط مسافران ارسال می‌شوند، تقاضا را تعیین می‌کنند، در حالی که تنها یک زیرمجموعه از این درخواست‌ها بسته به تامین رانندگان و وسایل نقلیه، به خصوص در ساعت‌های پربار، پاسخ داده می‌شوند. پیش‌بینی دقیق تقاضای سفر، عنصر کلیدی از سیستم‌های برنامه‌ریزی خودروها است، چه برای پلتفرم‌های آنلاین و چه مراکز توزیع تاکسی فیزیکی.ساختار گراف‌های ترافیکی در شبکه‌های عصبی گرافییک گراف ترافیک معمولاً یک گراف جهت‌دار است که برای نمایش زیرساخت حمل و نقل استفاده می‌شود. در این گراف، گره‌ها معمولاً مکان‌ها یا نقاط مهم در شبکه حمل و نقل را نشان می‌دهند. به عنوان مثال، می‌توان یک گره به هر تقاطع، راه‌های بین مکان‌ها، محل‌های پارکینگ یا ایستگاه‌های حمل و نقل اختصاص داد. یال‌ها در گراف ترافیک معمولاً نشان‌دهنده روابط بین مکان‌ها یا عوامل مختلف حمل و نقل هستند. به عنوان مثال، یال می‌تواند نشان‌دهنده وجود جاده‌ها، خیابان‌ها، خطوط اتوبوس، خطوط قطار یا روابط مشابه باشد. همچنین، وزن‌ها معمولاً برای نشان‌دادن میزان ترافیک، فاصله یا ویژگی‌های مربوط به ترافیک در ارتباطات بین گره‌ها مورد استفاده قرار می‌گیرند.گراف ترافیک می‌تواند به عنوان ورودی برای پیش‌بینی ترافیک و سایر وظایف مرتبط با حوزه حمل و نقل مورد استفاده قرار گیرد. با استفاده از شبکه‌های عصبی گرافی، می‌توان اطلاعات مختلف را از گراف ترافیک استخراج کرده و بهبود عملکرد پیش‌بینی ترافیک را دست یابیم. با تحلیل ویژگی‌ها و روابط موجود در گراف ترافیک، مدل‌های شبکه عصبی گرافی قادرند الگوها و تغییرات ترافیک را درک کرده و پیش‌بینی‌های دقیق‌تری ارائه دهند. همچنین، این گراف می‌تواند برای تحلیل و مدل‌سازی رفتار وسایل نقلیه، شبکه راه‌ها و ارتباطات بین مکان‌ها مورد استفاده قرار گیرد.البته از این گراف استفاده‌های متنوع دیگری نیز می‌شود. برای مثال، می‌توان از آن برای تخمین زمان سفر، طراحی بهینه مسیر، توصیه‌گر ترافیک، بهبود ترافیک و مدیریت ترافیک استفاده کرد. استفاده از گراف ترافیک در مدل‌های شبکه عصبی گرافی به دلیل توانایی‌های خاص خود، باعث بهبود عملکرد و دقت در پیش‌بینی ترافیک و سایر وظایف مرتبط با حوزه حمل و نقل می‌شود.پژوهش‌های انجام شدهدر اینجا بررسی می‌کنیم که چه پژوهش‌هایی اخیرا و یا کلا در این زمینه انجام شده است. مدل‌های پیش‌بینی ترافیکمتوسط تاریخی (HA)این روش Historical average یکی از روش‌های آماری پایه است که براساس میانگین تقاضای تاریخی سفرها در چهار هفته گذشته استوار است. به عنوان مثال، از میانگین تقاضای (OD (Origin-Destintion (مبدأ-مقصد) تاریخی در چهار هفته قبل برای پیش‌بینی استفاده می‌شود.مدل درخت تصمیم گرادیانی (GBDT)مدل GBDT (Gradient Boosting Decision Tree) یک الگوریتم درخت تصمیم گیری با گرادیان افزایشی است. این الگوریتم شامل تعدادی درخت تصمیم گیری با رویکرد ایجاد مدل به صورت متوالی است. در هر مرحله، یک درخت تصمیم گیری جدید به مدل اضافه می‌شود و تلاش می‌شود با بهبود خطاهای پیش‌بینی قبلی، دقت و کارایی مدل را بالا برد.مدل GBDT با استفاده از ترکیب چندین درخت تصمیم گیری، قادر است بهبود چشمگیری در پیش‌بینی دقیق ترافیک ایجاد کند. با تنظیم پارامترهای مختلف مانند عمق حداکثر درخت و تعداد درخت‌ها، می‌توان عملکرد بهتری در پیش‌بینی ترافیک بدست آورد. این مدل به صورت مکرر از خطاهای پیش‌بینی قبلی یاد می‌گیرد و با استفاده از روش گرادیان افزایشی، بهبود چشمگیری در دقت پیش‌بینی را ایجاد می‌کند.در این مطالعه، مدلGBDT با سه گروه عمق حداکثر مختلف (3، 5 و 7) تنظیم شده است و مشخص شده است که عمق حداکثر 7 باعث بهبود عملکرد بهتری در پیش‌بینی ترافیک می‌شود. این مدل با ترکیب تعدادی درخت تصمیم گیری قوی، قادر است الگوهای پیچیده تقاضای مبدأ-مقصد را در ترافیک شهری مدل کند و پیش‌بینی دقیقی را ارائه دهد.مدل XGBاین مدل (XGBoost) یک پیاده‌سازی از درخت‌های تصمیم گرادیانی است که برای سرعت و عملکرد بالا طراحی شده است. این مدل برای حل مسائل پیش‌بینی طبقه‌بندی و رگرسیون با استفاده از درخت‌های تصمیم افزایشی کاربرد دارد. در آن، نسبت زیرنمونه‌گیری و عمق حداکثر درخت متغیر است و بهینه‌سازی مقادیر مناسب برای این پارامترها انجام می‌شود.در این مطالعه، مقدار نسبت زیرنمونه‌برداری مدل ،XGB 0.8 است و حداکثر عمق درخت در محدوده‌های 3، 5 و 7 تنظیم می‌شود. بررسی‌ها نشان می‌دهد که عمق حداکثر 7 بهترین پارامتر برای مدل است. با استفاده از این مدل، قادر خواهیم بود الگوهای پیچیده‌تری را در داده‌های تقاضای مبدأ-مقصد ترافیک مدل کنیم و پیش‌بینی دقیقی را انجام دهیم.مدل جنگل تصادفی (RF)مدل RF Random Forest یک مدل است که با استفاده از نمونه‌های تصادفی از هر درخت تصمیم گیری آموزش داده می‌شود. تعداد درختان نیز از مقادیر 10، 100 و 200 تنظیم می‌شود که مقدار بهینه آن 200 است. با استفاده از این مدل، می‌توانیم یک مجموعه از درختان تصمیم گیری را آموزش داده و با اجتماع نتایج آن‌ها، یک پیش‌بینی قوی‌تر برای ترافیک را ارائه دهیم.مدل LASSOاین روش نیز با استفاده از داده‌های تاریخی به عنوان ورودی، مانند رگرسیون عادی، آموزش داده می‌شود. اما با توجه به تابع هدفی که در آن تراکم کمینه مطلق و انتخاب عملگر مدنظر قرار می‌گیرد، پارامتری که تعادل بین خطاهای تجربی و پیچیدگی مدل را تعیین می‌کند، از مقادیر 0.1، 1 و 10 تنظیم می‌شود. بهترین پارامتر برای این مدل 0.1 است. با استفاده از این مدل، می‌توانیم با ترکیبی از متغیرهای مهم و حذف متغیرهای غیرضروری، یک پیش‌بینی دقیق‌تر از ترافیک را ارائه دهیم.مدل شبکه عصبی چندلایه (MLP)این مدل(Multi-layer Perception) شبکه عصبی پایه را نشان می‌دهد که شامل حداقل سه لایه است: لایه ورودی(Input Layer)، لایه مخفی(Hidden Layer) و لایه خروجی(Output Layer). این مدل با استفاده از الگوریتم انتشار برگشتی (Backpropagation) آموزش می‌بیند. در اینجا، دو لایه مخفی با اندازه ۱۲۸ و ۶۴ مشخص شده است و مقدار بهینه برای نرخ یادگیری نیز توسط تنظیم پارامترهای مختلف آزمایش مشخص می‌شود.حافظه بلند مدت کوتاه مدت (LSTM)این مدل (Long Short-Term Memory) یک شبکه عصبی بازگشتی مصنوعی است که از اتصالات بازخوردی برای حفظ و تنظیم اطلاعات یک دنباله استفاده می‌کند. در این مدل، دروازه‌ها و سلول‌ها برای کنترل و حفظ اطلاعات مورد استفاده قرار می‌گیرند. در مقاله‌ی یک ساختار با دو لایه LSTM ایجاد شده که به ترتیب شامل ۱۲۸ و ۶۴ سلول LSTM است. در این مدل، نرخ یادگیری را تنظیم می‌کنیم و نرخ بهینه آن ۰.۰۰۱ است.مدل Spatial LSTMاین معماری شامل سه لایه مخفی است. هر لایه مخفی دارای واحدهای مخفی است که اندازه آن‌ها به ترتیب 256، 128 و 64 است. این لایه‌ها به ترتیب به عنوان لایه‌های اولیه، متوسط و نهایی شناخته می‌شوند. ورودی مدل Spatial LSTM شامل نقشه‌های ویژگی فضایی است که به عنوان یک دنباله از نقشه‌ها در نظر گرفته می‌شوند. هر نقشه ویژگی فضایی نماینده ویژگی‌های مکانی در یک زمان مشخص است سپس اطلاعات از ورودی فضایی به طور متوالی و با توجه به ترتیب زمانی در لایه‌های مخفی پردازش می‌شوند. در هر لحظه، لایه مخفی بر اساس ورودی فعلی و حافظه قبلی خود، اقدام به تصمیم‌گیری و تولید خروجی می‌کند. این عملکرد به مدل امکان می‌دهد تا الگوهای زمانی و فضایی را در داده‌ها تشخیص دهد و پیش‌بینی کند.واحدهای LSTM از گیت‌ها برای کنترل جریان اطلاعات و حافظه خود استفاده می‌کنند. این گیت‌ها شامل گیت فراموشی، گیت ورودی و گیت خروجی هستند که به تنظیم جریان اطلاعات و حافظه مورد استفاده در مدل کمک می‌کنند.در نهایت، خروجی مدلSpatial LSTM قابل استفاده برای پیش‌بینی تقاضای ترافیک است. با توجه به قابلیت‌های شبکه، این مدل قادر است الگوهای زمانی و فضایی موجود در داده‌های ورودی را تشخیص داده و با استفاده از آن‌ها، تقاضای ترافیک را پیش‌بینی کند. این پیش‌بینی می‌تواند به عنوان اطلاعات مهم برای برنامه‌ریزی منابع و بهینه‌سازی ترافیک مورد استفاده قرار بگیرد. همچنین، این مدل با استفاده از گیت‌ها و حافظه‌ی طولانی مدت خود، قابلیت حفظ و استفاده از اطلاعات گذشته را نیز دارد. این ویژگی باعث می‌شود که مدل قادر به پیش‌بینی تقاضای ترافیک در طول زمان باشد و بهبودی در دقت و عملکرد مدل ایجاد کند.مدل ED-MGCمدل Encoder-Decoder Multi-Graph Convolutional یک ساختار شبکه عصبی است که برای پیش‌بینی تقاضای ترافیک استفاده می‌شود. این مدل شامل دو بخش کدگذار Encoder و کدگشا Decoder است که هرکدام از طریق لایه‌های متعددی اطلاعات را پردازش می‌کنند.بخش کدگذار اطلاعات ورودی را دریافت کرده و با استفاده از لایه‌های چندگانه‌ی MGC  (تصویر زیر)  اطلاعات را در فضای گرافی تبدیل می‌کند. هر لایهMGC از واحدهای پنهان با سایز مشخصی تشکیل شده است و با استفاده از عملیات گراف کانولوشن، اطلاعات را در فضای زمان-فضا پردازش می‌کند. بخش کدگذار توانایی استخراج ویژگی‌های مهم از داده‌های ورودی را دارد و این ویژگی‌ها را به بخش کدگشا منتقل می‌کند. بخش کدگشا با دریافت ویژگی‌های استخراج شده توسط بخش کدگذار، اقدام به بازسازی تقاضای ترافیک می‌کند. با استفاده از لایه‌های MGC، اطلاعات را در فضای گرافی بازسازی و به فرم اصلی خود برمی‌گرداند. بخش کدگشا توانایی بازسازی و پیش‌بینی تقاضای ترافیک را دارد و با استفاده از اطلاعاتی که از بخش کدگذار دریافت می‌کند، تقاضاهای آینده را تخمین می‌زند.مدلED-MGC به عنوان یک ساختار کدگذار-کدگشا با لایه‌های MGC، قابلیت درک و پردازش الگوهای زمانی و فضایی در داده‌های ترافیک را دارد. با استفاده از این مدل، می‌توان پیش‌بینی دقیقی از تقاضای ترافیک در زمان‌های آینده ارائه داد. مدلED-MGC با استفاده از توانایی‌های کدگذار-کدگشا و استفاده از لایه‌های MGC، قادر است الگوهای پیچیده‌تر و وابستگی‌های زمانی و مکانی در داده‌های ترافیک را تشخیص داده و در پیش‌بینی تقاضا بهبود قابل ملاحظه‌ای ایجاد کند.مدل Graph WaveNetمعماری مدل Graph WaveNet  (مطابق تصویر زیر) شامل دو بخش اصلی است: بخش استخراج ویژگی و بخش پیش‌بینی.در بخش استخراج ویژگی، ابتدا داده‌های فضایی-زمانی گرافی به عنوان ورودی به مدل داده می‌شوند. سپس با استفاده از یک شبکه عصبی بازگشتی، ویژگی‌های فضایی-زمانی از داده‌های گرافی استخراج می‌شوند. این شبکه عصبی بازگشتی، با استفاده از یک مکانیزم توجه، ویژگی‌های مهم فضایی-زمانی را در داده‌های گرافی شناسایی می‌کند و با استفاده از یک لایه پولینگ، این ویژگی‌ها را به صورت خلاصه شده در طول زمان مدل می‌کند.در بخش پیش‌بینی، با استفاده از ویژگی‌های استخراج شده، یک شبکه عصبی بازگشتی دیگر برای پیش‌بینی داده‌های فضایی-زمانی گرافی استفاده می‌شود. این شبکه عصبی بازگشتی، با استفاده از یک مکانیزم توجه، ویژگی‌های مهم فضایی-زمانی را در طول زمان مدل می‌کند و با استفاده از یک لایه خطی، پیش‌بینی نهایی را ارائه می‌دهد.با استفاده از این معماری، مدل Graph WaveNet قادر به پیش‌بینی دقیق داده‌های فضایی-زمانی گرافی، از جمله پیش‌بینی جریان ترافیک است.شبکه ها گرافی پیچشیمعماری شبکه های گرافی پیچشی بر پایه شبکه های عصبی پیچشی بر روی گراف ها استوار است. در اینمعماری، از لایه های پیچشی گراف به جای ماتریس های وزن دهی به عناصر همسایه، استفاده می شود. به عبارت دیگر، در این روش، ویژگی های همسایگان هر گره از طریق یک عملیات همسایگی گراف، استخراج می شوند. این لایه ها اطلاعات محلی و جایگاهی گره ها را در نمایش برداری گراف در نظر می گیرند. این معماری منجر به یادگیری نمایشی قدرتمند از گراف می شود که ویژگی های مهم و الگوهای موجود در ارتباطات گره ها را دربرمی گیرد. یادگیری نمایش گرافی (Graph Representation Learning)یادگیری نمایش گرافی (یا همان Graph Representation Learning)، دسته‌ای از تکنیک‌های یادگیری ماشین است که هدف آن تولید بردار هایی با ابعاد کوچک، برای بازنمایی یک گره و یا یک زیر گراف، از یک گراف است. یادگیری نمایش گرافی به دریافت اطلاعات ساختاری و معنایی یک گره و یا یک زیر گراف و نشان دادن این اطلاعات در یک فضای پیوسته کمک می‌کند به طوری که گره‌های مشابه و یا زیرگراف‌ها نزدیک به یکدیگر نگاشته شده و گر‌ه‌های متفاوت از هم دور نگه‌داشته می‌شوند.این تکنیک در زمینه‌های مختلف از جمله گراف های ترافیکی، کاربردهای متفاوتی دارد. در اینجا به اختصار به برخی از کاربردهای آن می‌پردازیم.۱- تحلیل شبکه‌های اجتماعی: یادگیری نمایش گرافی می‌تواند برای کاربردهای متفاوتی از جمله یافتن انجمن‌ها مورد استفاده قرار بگیرد. همانطور که گفته شد این تکنیک تلاش می‌کند که گره‌ها و زیرگرافهای شبیه هم را نزدیک هم نگه دارد بنابراین اعضای یک انجمن ناخودآگاه کنار هم قرار دارند و به این ترتیب می‌توان آن‌ها را تشخیص داد، یعنی خوشه‌های متشکل از گره‌ها را با الگوهای اتصال مشابه در یک شبکه اجتماعی شناسایی می‌کند. مقصود از نزدیکی در اینجا، با به دست آوردن نمایشی با ابعاد کم از گره‌ها و بررسی اطلاعات ساختاری و معنایی آن‌هاست و می‌توان از توابع مختلف فاصله مثل فاصله‌ی اقلیدسی استفاده کرد. تا گره‌های نزدیک را در یک گروه قرار داد.شناسایی گره‌های مهم یکی دیگر از کاربرد‌های یادگیری نمایش گرافی در تحلیل شبکه‌های اجتماعی است. با استفاده از این تکنیک و بررسی معیارهای مرکزیت هر گره، می‌توان میزان اهمیت و تاثیر هر گره در یک اجتماع را بررسی کرد. با گنجاندن معیارهای مرکزیت در node embedding می‌توان یک نمایش با ابعاد کم ساخت و رهبران و گر‌ه‌های تاثیرگذار در شبکه را شناسایی کرد.۲- بیوانفورماتیک:‌ این تکنیک در تجزیه و تحلیل شبکه‌های بیولوژیکی مثل شبکه‌های برهمکنش‌های پروتئینی، شبکه‌های تنظیم کننده ژن و شبکه‌های متابولیک کاربرد دارد. همچنین برای پیش‌بینی عملکرد یک پروتئین و یا پیش‌بینی تعمالات دارو-هدف، می‌توان از یادگیری نمایش درختی استفاده کرد.۳- سیستم‌های توصیه‌گر: سیستم‌های توصیه‌گر امروزه کاربردهای وسیعی پیدا کرده‌اند از جمله پیشنهاد موسیقی و فیلم و … با کمک این ابزار می‌توان مدل‌سازی گراف تعاملات کاربر- کالا را انجام داد. به شکلی که هر کاربر و کالا، یک گره در نظر گرفته می‌شوند و ارتباط میان‌ ‌آن‌ها یک یال در نظر گرفته می‌شود. با بررسی مشخصات ذخیره شده هر کاربر که تمایلات آن کاربر را بررسی می‌کند، می توان ترجیحات و واکنش کاربر به یک کالا حدید را پیش بینی کرد. همچنین با استفاده از این تکنیک می‌توان راه حل نسبتا خوبی برای مشکل &quot;شروع سرد‌(cold-start problem)&quot; ارائه داد. وقتی برای کاربری اطلاعات خوب و کافی برای پیشنهاد کالا وجود ندارد، می‌توان از اطلاعات کاربر های دیگر استفاده کرد تا به کاربر جدید پیشنهاد مناسب داده شود.۴- پردازش زبان طبیعی: یادگیری نمایش گراف می تواند برای تجزیه و تحلیل و نمایش ساختار نحوی و معنایی متن زبان طبیعی، مانند درختان وابستگی، درختان تجزیه و نمودارهای معنایی استفاده شود.۵- امنیت سایبری: یادگیری نمایش گراف می تواند برای شناسایی ناهنجاری ها و حملات در امنیت شبکه مانند تشخیص نفوذ، تشخیص بدافزار و تشخیص فیشینگ استفاده شود. با یادگیری جاسازی گره هایی که ویژگی های ساختاری و رفتاری آن ها را نشان می دهد، یادگیری نمایش گراف می تواند از این اطلاعات برای شناسایی گره‌هایی که رفتار غیرعادی از خود نشان می دهند و علامت گذاری آنها به عنوان تهدید بالقوه، استفاده کند.روش‌ها۱- روش‌های طیفی(Spectral methods): روش‌های طیفی، از مقادیر ویژه و بردارهای ویژه گراف ماتریس لاپلاسی یا ماتریس مجاورت، برای نمایندگی گراف استفاده می کنند. روش‌های طیفی در یادگیری نمایش گرافی، به خانواده‌ای از تکنیک‌ها اشاره دارد که از مقادیر ویژه و بردارهای ویژه ماتریس لاپلاسی گراف برای نمایش گره‌های گراف در فضایی با ابعاد کم استفاده می‌کنند. این تکنیک‌ها به‌طور گسترده در زمینه یادگیری ماشین بر روی گراف‌ها و درخت‌ها مورد استفاده قرار گرفته‌اند، زیرا رویکردی اصولی برای ثبت ساختار زیربنایی یک گراف ارائه می‌کنند و می‌توانند برای کارهایی مانند طبقه‌بندی گره‌ها، پیش‌بینی پیوندها و خوشه‌بندی گراف استفاده شوند.ماتریس لاپلاسین یک گراف یک ماتریس نیمه مثبت معین وارون‌پذیر است که رابطه دو به دوی روابط بین گره‌های گراف را کدگذاری می‌کند. بردارهای ویژه ماتریس لاپلاسی با انواع مختلفی از تبدیلات رابطه دارند، در حالی که مقادیر ویژه میزان تغییر در هر حالت را اندازه‌گیری می‌کنند. با انتخاب زیرمجموعه‌ای از بردارهای ویژه که با بزرگترین مقادیر ویژه مرتبط هستند، می‌توان یک نمایش کم بعدی از گراف به دست آورد که ویژگی‌های ساختاری مهم آن را حفظ می‌کند.برخی از روش‌های طیفی محبوب برای یادگیری نمایش گراف عبارتند از:۱- خوشه‌بندی طیفی: این روش از بردارهای ویژه ماتریس لاپلاسی برای تقسیم گراف به خوشه‌ها بر اساس شباهت بین گره‌ها استفاده می‌کند.۲- شبکه‌های کانولوشنی گراف (GCNs): این شبکه‌های عصبی از نمایش طیفی گراف برای انجام عملیات کانولوشنی بر ویژگی‌های گره‌ها استفاده می‌کنند.۳- نقشه‌های ایگنومپس: این روش با استفاده از بردارهای ویژه ماتریس لاپلاسی، گره‌های گراف را به یک فضای کم بعدی نگاشت می‌کند.۴- روش‌های تصادفی مبتنی بر پیاده‌روی(Random walk-based methods): روش‌های مبتنی بر پیاده‌روی تصادفی، پیاده‌روی‌های تصادفی روی گراف ایجاد می‌کنند و از دنباله‌های گره‌هایی که توسط پیاده‌روی‌های تصادفی بازدید می‌شوند برای نمایش استفاده می‌کنند. نمونه‌هایی از روش‌های تصادفی مبتنی بر پیاده‌روی شامل DeepWalk، Node2vec و GraphSAGE هستند.۵- شبکه‌های عصبی کانولوشنال (CNN) روی گراف‌ها: CNN‌ها روی گراف‌ها، عملیات کانولوشنی را در همسایگی‌های محلی گره‌ها در گراف اعمال می‌کنند تا یک نمایش مناسب را یاد بگیرند. نمونه‌هایی از CNN بر روی گراف‌ها عبارتند از: شبکه‌های کانولوشن گراف (GCN)، شبکه‌های توجه گراف (GAT)، و شبکه‌های ایزومورفیسم گراف (GIN).۶- کدگذاری خودکار گراف(graph autoencoders): کدگذارهای خودکار گراف، یک نمایندگی را با کدگذاری گراف در فضایی با ابعاد کم و سپس رمزگشایی آن به ساختار اصلی گراف یاد می‌گیرند. نمونه هایی از رمزگذارهای خودکار گراف عبارتند از رمزگذارهای خودکار گراف متغیر (VGAE) و رمزگذارهای خودکار متغیر گراف (GVAE).پیاده سازی GCN توجه به کاربرد گسترده‌ی یادگیری ماشین شبکه‌های پیچیده و گسترش GCN‌ها، بر آن شدیم که یک نمونه‌ی ساده از آن‌ها را به هدف آشنایی بیشتر پیاده سازی کنیم. برای شروع ابتدا کتابخانه های مورد نیاز را اضافه میکنیم:import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import SparseCategoricalCrossentropyبطور خلاصه، کد بالا یک مدل GCN (Graph Convolutional Network) را با استفاده از TensorFlow برای آموزش روی مجموعه داده‌های گرافی تعریف می‌کند. الگوریتم GCN یک نوع شبکه عصبی است که برای یادگیری بر روی داده‌هایی با ساختار گرافی استفاده می‌شود.در ابتدا، مدل GCN تعریف می‌شود که از دو لایه GraphConvolution تشکیل شده است. هر لایه شامل یک عملکرد GraphConvolution و یک عملکرد فعال‌سازی (اختیاری) است. در هر مرحله، ورودی‌های مدل (نشانه‌های گره و ماتریس مجاورت) را می‌گیرد و عملیات گراف کانولوشن را بر روی آن‌ها انجام می‌دهد.سپس، داده‌های مورد نیاز برای آموزش (نشانه‌های گره، ماتریس مجاورت و برچسب‌های هدف) را تعریف می‌کنید و آن‌ها را در یک مجموعه داده TensorFlow قرار می‌دهید. سپس، داده‌ها را به صورت دسته‌ای (batch) و با ترتیب تصادفی (shuffle) آماده می‌کنید.بعد از آماده‌سازی داده‌ها، مدل GCN را با تعریف ابعاد و ویژگی‌های مخفی و خروجی مورد نظر مقداردهی اولیه می‌کنید.سپس، تابع هزینه و بهینه‌ساز را تعریف کرده و به مدل اعمال می‌کنید. در هر مرحله آموزش، داده‌های یک دسته را می‌گیرید و با استفاده از اعمال دسته‌ای (gradient tape)، خطا را محاسبه و گرادیان‌ها را نسبت به پارامترهای آموزشی مدل محاسبه می‌کنید. سپس بهینه‌ساز، گرادیان‌ها را با پارامترهای مدل هماهنگ می‌کند.در پایان حلقه آموزش، می‌توانید روی مجموعه اعتبارسنجی ارزیابی انجام دهید و یا تمامی وظایف مورد نیاز را انجام دهید.در نهایت، مدل آموزش دیده را می‌توانید ذخیره کنید تا بتوانید بعداً از آن استفاده کنید.به خاطر داشته باشید که باید کد را با توجه به نیازهای خاص مجموعه داده و وظیفه خود تغییر دهید. برای مثال، تغییرات لازم برای انطباق با نحوه نمایش داده‌ها و گراف، پیش‌پردازش‌های مختلف و سایر تنظیمات مربوطه را باید اعمال کنید.امیدوارم این توضیحات به شما در مورد آموزش یک مدل GCN بر روی مجموعه داده‌های گرافی کمک کند!# Define your GCN model
class GCN(tf.keras.Model):
def __init__(self, input_dim, hidden_dim, output_dim):
 super(GCN, self).__init__()
 self.conv1 = GraphConvolution(hidden_dim, activation=&#039;relu&#039;)
 self.conv2 = GraphConvolution(output_dim)

def call(self, inputs):
 x, adjacency = inputs
 x = self.conv1([x, adjacency])
 x = self.conv2([x, adjacency])
 return tf.nn.log_softmax(x, axis=-1)

# Define the GraphConvolution layer
class GraphConvolution(layers.Layer):
  def __init__(self, output_dim, activation=None):
   super(GraphConvolution, self).__init__()
   self.output_dim = output_dim
   self.activation = activation

def build(self, input_shape):
  input_dim = input_shape[0][-1]
  self.kernel = self.add_weight(
   &amp;quotkernel&amp;quot,
    shape=[input_dim, self.output_dim],
initializer=&amp;quotglorot_uniform&amp;quot,
)
def call(self, inputs):
x, adjacency = inputs
x = tf.matmul(adjacency, x)
x = tf.matmul(x, self.kernel)
  if self.activation is not None:
    x = self.activation(x)
return x

# Define your dataset
# Assuming you have node features (x), adjacency matrix (adjacency), 
and target labels (y)
x = ...  # Node features
adjacency = ...  # Adjacency matrix
y = ...  # Target labels
# Normalize the adjacency matrix (optional but recommended)adjacency = normalize_adjacency(adjacency)
# Create a TensorFlow Dataset
dataset = tf.data.Dataset.from_tensor_slices((x, adjacency, y))
batch_size = 32
dataset = dataset.batch(batch_size).shuffle(buffer_size=len(x))

# Initialize your GCN model
input_dim = ...  # Dimension of node features
hidden_dim = ...  # Dimension of hidden layer
output_dim = ...  # Dimension of output layer
model = GCN(input_dim, hidden_dim, output_dim)

# Define your loss function and optimizer
loss_fn = SparseCategoricalCrossentropy(from_logits=True)
optimizer = Adam(learning_rate=0.01)
# Training loop
num_epochs = 10
for epoch in range(num_epochs):
  for batch_data in dataset:
    with tf.GradientTape() as tape:
      logits = model(batch_data[:2])
      loss = loss_fn(batch_data[2], logits)
   gradients = tape.gradient(loss, model.trainable_variables)
   optimizer.apply_gradients(zip(gradients, model.trainable_variables))

# Evaluate on validation set or perform any other necessary tasks
# Save your trained model
model.save_weights(&#039;gcn_model.tf&#039;)متاسفیم که ویرگول عزیز پشتیبانی از سینتکس هایلایت را هنوز به پلتفرم خود نیافزوده‌است.مجموعه دادهدر این بخش از مجموعه داده آماده شده از شرکت بین المللی اوبر استفاده خواهد شد. اوبر یک سامانه تقاضای جابه جایی بین مسافران و رانندگان است و به این صورت عمل می کند که مسافر ابتدا مبدا و مقصد مورد نظر را در سیستم وارد کرده و سپس تقاضای خودرو و راننده می کند. رانندگان نزدیک تر به مبدا درخواست را دریافت کرده و اولین نفری که درخواست را قبول نماید به سمت وی حرکت می کند. مجموعه داده ی آماده شده توسط این شرکت برای شهرهای متفاوت موجود است و ویژگی های کامل و مهمی شامل مانند زمان درخواست، مدت سفر، تاریخ، کد مبدا، کد مقصد و ... را داراست. با کمک رابط های برنامه نویسی در دسترس است. در ادامه بررسی های اماری روی این مجموعه را میبینیم.منابع[1] A. Barabási and M. Pósfai. Network science. Cambridge University Press, 2016.[2] M. Newman. Networks: An Introduction. Oxford University Press, 2010.[3] W. Jiang and J. Lou, “Graph neural network for traffic forecasting: A survey,” Expert Systemswith Applications: An International Journal, vol.207, no.C, 2022.[4] G. C. Chen T., “Xgboost: A scalable tree boosting system,” ACM-international conference onknowledge discovery and data mining, no.22, pp.785–794, 2016.[5] Y. R. Li Y. and S. C, “Diffusion convolutional recurrent neural network: Data-driven trafficforecasting,” International Conference on Learning Representations (ICLR), 2018.[6] J. Ke, X. Qin, H. Yang, and Z. Zheng, “Predicting origin-destination ride-sourcing demandwith a spatio-temporal encoder-decoder residual multi-graph convolutional network,” Elsevier,no.C 122, 2021.[7] Z. Wu, S. Pan, Guodong, and J. Jiang, “Graph wavenet for deep spatial-temporal graph modeling,”28th International Joint Conference on Artificial Intelligence, no.28, pp.1907–1913,2019.[8] fenxiao chen, yun-cheng wang, bin wang, and c.-c. jay kuo, “Graph representation learning: asurvey,” Cambridge University Press in association with Asia Pacific Signal and InformationProcessing Association, vol.9, pp.1–21, 2020.[9] P. Graham Ganssle, Ph.D., “Node classification by graph convolutional network - tutorial,”xperoinc resources, 2018.[10] https://www.sciencedirect.com/science/article/pii/S2666651021000024 [11] https://inc.ucsd.edu/mplab/users/nick/dimensionalityReduction.pdf[12] https://arxiv.org/abs/0711.0189[13] https://arxiv.org/abs/1706.02216</description>
                <category>tara brn</category>
                <author>tara brn</author>
                <pubDate>Sun, 09 Jul 2023 13:39:15 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با علم شبکه‌ پیچیده</title>
                <link>https://virgool.io/@tarabrn/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%B9%D9%84%D9%85-%D8%B4%D8%A8%DA%A9%D9%87-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%87-tn8fsvn9sfat</link>
                <description>مقدمهشبکه‌های پیچیده یکی از موضوعات پیچیده در علم رایانه هستند که به تحلیل و بررسی پدیده‌های پیچیده در بسیاری از زمینه‌ها مانند فیزیک، علوم شبکه‌ای، علوم اجتماعی، بیولوژی، اقتصاد و غیره می‌پردازد. در سال‌های اخیر، با پیشرفت فناوری‌های نوین، شبکه‌های پیچیده به موضوع بسیار مهم و حیاتی در تحقیقات علمی تبدیل شده‌اند. در این مطلب به معرفی علم شبکه و شبکه پیچیده، کاربردهای آن و ابزارهای مناسب برای تحلیل شبکه پیچیده پرداخته شده است.علم شبکه‌ پیچیده چیست؟علم شبکه پیچیده به دنبال درک ساختار و رفتار شبکه‌های پیچیده است که از دیدگاه علمی، اجتماعی، بیولوژیکی، فیزیکی و مهندسی مورد مطالعه قرار می‌گیرند. این علم با استفاده از مدل‌های ریاضی و نرم‌افزارهای تحلیلی سعی در بررسی رفتار و خصوصیات شبکه‌های پیچیده دارد. علم شبکه پیچیده با مطالعه شبکه‌هایی همچون شبکه‌های عصبی، شبکه‌های اجتماعی، شبکه‌های حمل و نقل، شبکه‌های اطلاعاتی و شبکه‌های بیولوژیکی سعی در درک و توصیف رفتار و خصوصیات این شبکه‌ها دارد.در علم شبکه پیچیده، شبکه‌های پیچیده به عنوان یک سیستم متشکل از عناصر مرتبط و متصل به یکدیگر تعریف می‌شوند. این عناصر می‌توانند نودها، ارتباطات، یا عناصر دیگری باشند که با یکدیگر در ارتباط هستند. از این رو، شبکه پیچیده می‌تواند شامل یک مجموعه از شبکه‌های ساده‌تر باشد که با یکدیگر ارتباط برقرار می‌کنند و به شکلی پیچیده با یکدیگر تعامل دارند.به عنوان مثال، شبکه‌های اجتماعی شامل افراد به عنوان نودها و ارتباطاتی که بین این افراد وجود دارد به عنوان ارتباطات، به عنوان یک شبکه پیچیده در نظر گرفته می‌شوند. همچنین، شبکه‌های حمل و نقل نیز می‌توانند شامل خیابان‌ها و جاده‌ها به عنوان نودها و مسیر طی شده توسط خودروها نیز یال‌های آن باشد.کاربردهای علم شبکه پیچیدهکاربردهای علم شبکه پیچیده بسیار گسترده و متنوع هستند. این کاربردها در بسیاری از صنایع و حوزه‌های علمی مورد استفاده قرار می‌گیرند. در زیر به برخی از کاربردهای علم شبکه پیچیده اشاره می‌کنیم:پیش‌بینی‌های بازار: استفاده از شبکه‌های پیچیده برای پیش‌بینی تغییرات بازار و تحلیل داده‌های مالی است. این کاربرد به تجزیه و تحلیل داده‌های مالی، ارزش‌گذاری سهام، مدیریت ریسک و مقایسه رفتار بورس با رفتار سایر بازارهای مالی کمک می‌کند.بیوانفورماتیک: در زمینه بیوانفورماتیک، شبکه‌های پیچیده برای مطالعه و پیش‌بینی ساختار و عملکرد پروتئین‌ها و تعاملات مولکولی استفاده می‌شوند.شبکه‌های اجتماعی: این روزها، شبکه‌های اجتماعی ابزاری مهم برای بسیاری از مردم و شرکت‌ها و کسب‌وکارها شده‌اند. شبکه‌های پیچیده در این زمینه برای تحلیل رفتار کاربران، پیش‌بینی روند رشد و بازدهی، تحلیل رفتار رقبا و رسیدن به رویکردهای بازاریابی مؤثر استفاده می‌شوند.پزشکی: در پزشکی، شبکه‌های پیچیده برای تشخیص و پیش‌بینی بیماری‌ها و درمان آن‌ها به کار می‌روند. از جمله کاربردهای شبکه‌های پیچیده در پزشکی می‌توان به شبکه‌های عصبی مصنوعی برای تشخیص تصاویر پزشکی، تحلیل تصاویر مغزی و ...و بسیاری از موارد دیگر.برخی ابزارهای مناسب برای تحلیل شبکه پیچیدهتحلیل شبکه‌های پیچیده به دلیل تعداد بالای گره‌ها و ارتباطات بین آن‌ها،  چالش‌های زیادی را برای تحلیل‌گران و پژوهشگران به دنبال دارد. برای مقابله  با این چالش‌ها، ابزارهای متعددی برای تحلیل شبکه‌های پیچیده وجود دارند  که به محققان کمک می‌کنند تا اطلاعات بیشتری را از رفتار و ویژگی‌های  شبکه‌های پیچیده به دست آورند. در ادامه به برخی از این ابزارها اشاره  می‌کنیم:Gephi: یکی از معروف‌ترین ابزارهای تحلیل شبکه‌های پیچیده است. این ابزار با امکانات گسترده‌ای از جمله طراحی گراف، شبکه‌های تفریحی، شبکه‌های اجتماعی، تحلیل سلسله مراتبی و ... به محققان امکان می‌دهد تا شبکه‌های پیچیده را با استفاده از روش‌های گرافیکی و تصویری تحلیل کنند.Cytoscape: این ابزار نیز یکی دیگر از پرکاربردترین ابزارهای تحلیل شبکه‌های پیچیده است که برای تحلیل شبکه‌های پروتئینی و ژنتیکی استفاده می‌شود. Cytoscape ابزارهای گرافیکی و پیشرفته‌ای را برای تحلیل شبکه‌های پیچیده فراهم می‌کند و امکاناتی را برای نمایش گراف، جستجو در شبکه، تحلیل شبکه و ... فراهم می‌کند.NodeXL: این نرم‌افزار، برای تحلیل شبکه‌های اجتماعی و وب طراحی شده است. NodeXL می‌تواند اطلاعات بسیار زیادی را از شبکه‌ها به دست آورد و این اطلاعات را به صورت گرافیکی نمایش دهد. Pajek: این نرم افزار، برای تحلیل شبکه‌های اجتماعی، جامعه‌شناسی، روانشناسی، ریاضیات و فیزیک طراحی شده است. Pajek با استفاده از الگوریتم‌های مختلف، می‌تواند شبکه‌های بسیار پیچیده را تجزیه و تحلیل کند. NetworkX: این کتابخانه برای زبان برنامه‌نویسی پایتون طراحی شده است و به برنامه‌نویسان امکان تحلیل و ساخت شبکه‌های پیچیده را می‌دهد. با استفاده از NetworkX، می‌توانید شبکه‌های بسیار بزرگ را تحلیل کرده و اطلاعاتی از آن‌ها به دست آورد.برخی کاربردهای نوین علم شبکه:علم شبکه پیچیده به عنوان یک حوزه چندرشته‌ای، تحت تأثیر تکنولوژی و پیشرفت‌های جدید قرار گرفته است. از آنجا که این حوزه تلاش می‌کند تا سیستم‌های پیچیده را مدلسازی و تحلیل کند، کاربردهای آن در بسیاری از زمینه‌ها و صنایع مختلف به کار گرفته می‌شود. در ادامه به برخی از کاربردهای نوین علم شبکه پیچیده اشاره خواهیم کرد:۱- تحلیل شبکه‌های اجتماعی: با پیشرفت تکنولوژی و فراوانی داده‌های ایجاد شده توسط کاربران شبکه‌های اجتماعی، تحلیل شبکه‌های اجتماعی به یکی از مهمترین کاربردهای علم شبکه پیچیده تبدیل شده است. این تحلیلات شامل شناخت افراد مؤثر، شناسایی گروه‌هایی با ارتباط وابستگی، تحلیل الگوی ارتباطات، پیش‌بینی رفتار کاربران و بسیاری موارد دیگر است.۲- تحلیل ارتباطات اجتماعی: با استفاده از شبکه‌های پیچیده و الگوریتم‌های شبیه‌سازی اجتماعی، می‌توان الگوها و ارتباطاتی که در شبکه‌های اجتماعی وجود دارند را شناسایی کرده و بهبود کارآیی شبکه‌های اجتماعی و ارتباطات افراد در آن‌ها را بهبود بخشید.۳- تحلیل شبکه‌های عصبی: شبکه‌های عصبی نیز یک نمونه از شبکه‌های پیچیده هستند که در زمینه های مختلفی مانند تشخیص چهره، تشخیص صدا، تحلیل تصویر و بسیاری دیگر استفاده می‌شوند. با توجه به اهمیت تشخیص و پردازش داده‌های بزرگ، تحلیل شبکه‌های عصبی نیز به یکی از کاربردهای پراهمیت علم شبکه پیچیده تبدیل شده است. ۴- تحلیل شبکه‌های مالی: با استفاده از علم شبکه پیچیده، می‌توان شبکه‌های مالی را برای تحلیل و پیش‌بینی رفتار بازار و حرکت قیمت‌ها، استفاده کرد. این تحلیلات می‌توانند به سرمایه‌گذاران و متخصصان مالی در انتخاب بهترین استراتژی‌ها در بازار کمک کنند.۵- طراحی شبکه‌های عصبی بهینه: با استفاده از شبکه‌های پیچیده و الگوریتم‌های یادگیری عمیق، می‌توان شبکه‌های عصبی بهینه را طراحی کرده و بهبود عملکرد و دقت آن‌ها را بهبود بخشید.۶- تحلیل رفتار مصرف‌کنندگان: با استفاده از شبکه‌های پیچیده و الگوریتم‌های یادگیری ژرف، می‌توان الگوهای رفتاری مصرف‌کنندگان را شناسایی کرده و بهبود استراتژی‌های بازاریابی و تبلیغات را بهبود بخشید.۷- تشخیص و پیش‌بینی بیماری‌ها: با استفاده از شبکه‌های پیچیده و الگوریتم‌های یادگیری ژرف، می‌توان بیماری‌ها را با دقت بالا تشخیص داد و پیش‌بینی کرد. این کاربرد می‌تواند در پیشگیری و درمان بیماری‌ها بسیار مؤثر باشد.پایان</description>
                <category>tara brn</category>
                <author>tara brn</author>
                <pubDate>Sun, 23 Apr 2023 21:39:50 +0330</pubDate>
            </item>
                    <item>
                <title>مقایسه دو فناوری BRMS و BPMS</title>
                <link>https://virgool.io/DigitalTransformation/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AF%D9%88-%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C-brms-%D9%88-bpms-flceyxmc7enm</link>
                <description>توی این نوشته اول قصد داشتم راجع به BPMS بگم ولی وقتی به فارسی سرچ کردم دیدم مطلب ازش کم نیست! بعد گفتم خب احتمالا راجع به BRMS دیگه مطلب درست حسابی نباشه! ولی باز هم موقع سرچ دیدم خود ویرگول کلی مطلب داره. این شد که تصمیم گرفتم توی این پست یه مقایسه ساده درباره‌ی این دو مفهوم بنویسم.مقدمهاگر اصلا نمیدونید این دو عبارت چی هستن پیشنهاد میکنم در حد چند دقیقه سرچ کنید بعد این نوشته رو بخونید ولی به طور کلی BPMS خلاصه &quot;Business Process Management System&quot; هست، یعنی مدیریت فرایند کسب و کار. BRMS هم خلاصه شده‌ی &quot;Business Rules Management System&quot; یعنی سیستم مدیریت قوانین کسب و کار. بعضی جاها به جای System ، Software هم می‌نویسند.در مدیریت فرایند کسب و کار درباره‌ی &quot;چگونه انجام دادن&quot; و در مدیریت قوانین کسب و کار درباره‌ی &quot;چه باید انجام شود&quot; صحبت میشه. در واقع در سازمان هر کدوم برای وظایفی مورد نیازن، برای مدیریت فرآیندهای دستی (انسانی) و اجرای فرآیندهای خودکار که بدونند چگونه کار را انجام بدند، به یک BPMS نیاز داریم ولی با BRMSقوانین کسب و کار مدیریت و اجرا میشن و موقع تصمیم گیری به ما کمک می‌کنند که چه کاری باید انجام بشه. پس یک موتور قوانین (BRMS) قوانینی اجرا میکنه که تصمیم میگیره چه فرایندی و به چه ترتیبی اجرا شه.کِی سراغ BPMS بریم؟هر وقتی توی کسب و کار خواستید مطمئن بشین یه فرایند استاندارد و کارآمد انجام می‌شه یا نه.اگر خواستید یکی از فرایندهای موجود به طور کلی تغییر کنه. (نه فقط یه لایه‌ی سطحی)هرجایی نیاز به هماهنگی فرایندها بود، مثلا نیاز به فرایندی داشتید که با فرایندهای تجاری سازمان‌های دیگه در ارتباط باشه یا اصلا برای پشتیبانی فرایندهای حاضر نیاز به هماهنگ کردن جریان چند فرایند دیگه بود.اگر خواستید بخشی از فرایندهارو خودکار کنید به ویژه برای پشتیبانی یک مجموعه‌ی ناهمگن از فرایندهای بک‌اندی.کِی سراغ BRMS بریم؟وقتی نیاز داریم یک سری قوانین پیچیده داشته باشیم که پیاده سازی آن ها با کد سخت میشه.معمولا در هر تجارتی هزاران قانون وجود داره که مدیریت خود اینها چالش برانگیزه. با کمک موتور قوانین میشه هم در زمان صرفه جویی کنیم هم طول چرخه‌ی عمر برنامه بهتر می‌شه چون سرعت پاسخگویی به تغییرات و درخواست ها سریع تر میشه.اگر در سازمانی هستیم که قوانین تجارتی سریع عوض میشن حتما BRMS مفیده چون خطاها و سو تفاهم ها به حداقل میرسه.آیا ترکیب BRMS و BPMS لازمه؟تا اینجا فهمیدیم که این دو فناوری باهم متفاوتن. اما آیا مکمل هم هستند؟ بیایم باهم دو تا سناریو بررسی کنیم:فرض کنید پیشروی فرایندهای یک سازمان به جایی می‌رسه که قبل از ادامه کار باید یک تصمیم مهم و پیچیده بگیره مثلا آمادگی بازار برای محصولش دقیق بررسی بشه. برای اینکار از یک موتور قوانین استفاده می‌کنه تا داده‌های تهیه شده رو بگیره و بهترین تصمیمات و فعالیت‌هارو ارائه بده یا حتی بگه چه داده‌ی دیگری نیاز هست جمع آوری بشه یا چه کسی در چه موقعیت شغلی باید کارخاصی انجام بده و ... . بعد از نتایج استفاده می‌شه تا BPM ادامه کارشو پیش ببره.در سناریو دوم فرض کنید یک BRM به نقطه ای ار کار می‌رسه که با کمبود داده مواجه شده و برای تصمیم گیری نیاز به داده بیشتر هست اینجاست که یک فرایند BPM آغاز می‌کنه که کاربر مناسب به جریان اضافه کنه تا ازمایش‌هایی که نیاز هست انجام شه. وقتی فرایند BPMتموم میشه دوباره کار BRM شروع می‌شه و با داده‌های به دست اومده ادامه میده.در کل حتی اگر دو سناریو که توضیح دادیم هم در نظر نگیریم، بعد ایجاد هر قانون یا تصمیم جدید معمولا یک فرایندی شروع میشه که بهش میگن rule action و برای اجرا سراغ BPM میریم.نکات تکمیلییکی از تفاوت‌های مهم دیگر از لحاظ عملکردی بین BRMS و BPMS این است که معمولا قوانین با سرعت بیشتری درحال تغییر یا ایجاد هستند در حالی که ساختار و جریان فرایندها پایدارتر است.معرفی اوپن سورس‌هابه نظرم خوب بود چندتا محیط چند ابزار اوپن سورس و رایگان هم ببینیم:اولین مورد Drools یک سلوشن BRMS است که هسته یک موتور قواعد تجاری (BRE)، پشتیبانی کامل در زمان اجرا برای مدل‌های Decision Model and Notation) DMN)، پلاگین Eclipse IDE برای توسعه هسته و موارد دیگری مثل web authoring و ... ارائه می‌کند و رابط کاربری نسبتا ساده‌ای دارد که در تصاویر زیر قابل مشاهده است.آشنایی با محیط Droolsشرکت‌های ایرانی مرتبطدر نهایت خوبه باهم چند تا مثال هم ببینیم. من با کمی سرچ یه سری شرکت ایرانی پیدا کردم که در این زمینه ها فعالیت می‌کنند:آیکن  ایران رایانه  باسا  برسا نوین رای  پاسارگاد  پارسه رایانه شرکت بهسا  پرنیان پردازش پارس  پگاه آفتاب  تاران  تذرو افزار  «این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»منابعhttps://www.fico.com/blogs/are-bpms-and-brms-complementary-or-nothttp://bizrules.info/weblog/2006/02/differences_between_process_bp.htmlhttps://www.linkedin.com/pulse/bpm-brms-rpa-calvin-kiboma/https://ebpm.ir/10242</description>
                <category>tara brn</category>
                <author>tara brn</author>
                <pubDate>Sat, 24 Dec 2022 02:23:01 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با 20 اصطلاح مهم و باکلاس در معماری نرم‌افزار!</title>
                <link>https://virgool.io/@tarabrn/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%AF%D8%B1-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-pfzmaqsilfmn</link>
                <description>آشنایی با برخی اصطلاحات کاربردی در معماری نرم افزار1.  DDD (Domain Driven Design)در حدود سال 2003 کتابی به نام Domain Driven Design توسط فرد بسیار ** به نام اریک ایوان* نوشته شد که بسیاری از اصطلاحاتی که به کار گرفته است، از جمله DDD یا Domain Driven Design، امروزه در صنعت معماری نرم افزار کاربرد فراوان دارند.در تعریف Domain Driven Design طبق یکی از مصاحبه‌هایی که خود اریک ایوان داشته، میتونیم بگیم:&quot; وقتی که داریم یک نرم‌افراز را توسعه میدیم نباید تمرکز اولیه ما روی تکنولوژی‌ها باشه بلکه باید اول روی کسب و کار یا هدفی که قراره این نرم افزار داشته باشه تمرکز کنیم. یعنی دامنه یا همون Domain! &quot;احتمالا اولین سوالی که پیش میاد اینه که دامنه یعنی چی؟ دامنه در واقع همون مسئله‌ایه که کسب و کار ما داره تلاش میکنه با یک نرم افزار حلش کنه. مثلا دامنه بانکی. (به نظر شما دامنه اسنپ یا تپسی چیه؟ به نظر من حمل و نقل)در واقع Domain Driven Design نگاه بالا به پایین (top-down) داره، اگه به عنوان مثال به شکل زیر نگاه کنیم، میبینیم برای داشتن یک سرویس بخش‌های زیادی وجود داره که برنامه نویس‌ها و عوامل دیگه درگیرش هستند مثلا کلاس بندی چطوری باشه، چه دیزاین پترنی بهتره، ماژول‌های اصلی چیا باشه و ... مثال نگاه پایین به بالا (bottom-up) به یک سرویسولی در Domain Driven Design دید کلی‌تری داریم و در واقع میایم نگاه می‌کنیم چه سرویس‌هایی برای حل مسئله کسب و کار ما لازمه و باید وجود داشته باشه و به جزییات هر بخش کاری نداریم. تصویر زیر میتونه دید بهتری بده: Domain Driven Designمثالی از نگاه بالا به پایین دردر نهایت ممکنه براتون سوال به وجود بیاد که خب این رویکرد اصلا به چه دردی میخوره؟! چرا باید یادش بگیریم؟!اول اینکه شما به عنوان یک دولوپر شاید بخواین پیشرفت کنید و به مرحله طراحی یک محصول برسید، شما باید قادر باشید ایده خودتونو اول از همه مدل کنید و قبل از کد زدن به نیازمندی‌های سطح بالای کارتونو پیدا کنید.خیلی وقت‌ها مشتری‌ها علم نرم‌افزاری ندارند و حتی نمیتونن خواستشونو به مجری به صورت صحیح انتقال بدند، اینجا میتونیم از DDD کمک بگیریم. به راحتی فیچرهای لازم قابل فهم می‌شوند و تایید گرفتن از مشتری هم آسون‌تر میشه.در نهایت اگر کسب و کار شما مشکلی که به خاطرش به وجود اومده را حل نکنه مفید نخواهد بود و دیگه مهم نیست معماری پشت سیستم چه قدر تمیز و مناسب باشه و یا از چه تکنولوژی های به روزی استفاده کرده باشید، با کمک DDD این موضوع را حل کنید.2. Hexagonal Architecture  معماری شش ضلعی یا Hexagonal Architecture در اصل یکی از رویکرد سازماندهی کدهایمان است که به زبانی خیلی ساده با ایجاد قوانین و محدودیت‌های منطقی مشخص میکند هر نوع کد مختص به کدام بخش سیستم نرم‌افزاری است و تمرکز آن بر تولید کامپوننت‌ها به صورت loosely coupled است، برخلاف معماری‌های لایه‌ای که لایه ها برای تغییر، تست و ... روی یکدیگر تاثیر می‌گذراند. نام دیگر ولی کمتر رایج این معماری ports and adapters است که در ادامه توضیحات و از شکل زیر می‌توان دلیل آن را فهمید.نمایی از معماری شش ضلعی یا Hexagonal Architectureهمانطور که از تصویر مشخص است، هر کامپوننت برای ارتباط با سایرین از تعدادی port با پروتکل‌های مشخص بسته به کارایی استفاده می‌کند. Adapterها نیز ارتباط کامپوننت‌ها و دنیای خارجی را میسر می‌کنند. هر پورت ممکن است تا چندین آداپتر هم داشته باشد، برای مثال داده‌های یک سیستم ممکن است از روش‌های مختلفی همچون cmd یا واسط کاربری و ... از کاربران دریافت شود.نکته دیگری که ممکن است ذهن شما را مثل من(!) درگیر کرده باشد این است که نام شش ضلعی این مفهوم را می‌رساند که حتما 6 بخش در معماری Hexagonal Architecture وجود دارد، در صورتی که 4 بخش اصلی داریم. لایه‌ی دامنه APIلایه‌ی بیزینسلایه‌ی REST Adapterلایه‌ی Persistence Adapterمن بعد از کمی سرچ متوجه شدم بیشتر به خاطر شمایل گرافی و وجود فضای کافی برای نمایش سایر رابط‌های کاربری اینطور نمایش داده شده و لزوما نباید 6 تا بخش اصلی داشت.( خوشحال می‌شم اگر نکته‌ی دیگری بود برام بنویسید.)در نهایت هم اگر خیلی کوتاه بخوام در باره‌ی مزایای این معماری بگم:راحت میشه اداپتر اضافه یا کم کنیم، به اصطلاح میگن: plug and playقابلیت تست را افزایش می‌دهد.کد تمیزتر و خوانا می‌شه.سازماندهی سیستم به خصوص در آینده راحت‌تر می‌شه.پایگاه داده مستقل میشه و تغییرات این بخش هم آسون‌تر میشه.3. CQRSدر الگوی CQRS یا Command query responsibility segregation نرم افزار به دو بخش خواندن و نوشتن (به‌روز رسانی) تقسیم می‌شود(Read and Write sides). در بیشتر سیستم‌های نرم افزاری تعداد دفعات خواندن اطلاعات چندین برابر نوشتن اطلاعات است. با کمک این الگو و جداسازی این دو بخش می‌توان وقوع تداخل‌ها را کنترل کرد و همچین سرعت را بسیار بالا برد. (همان طور که میدانید سرعت خواندن اطلاعات خیلی بیشتر از نوشتن آن است.)در ادامه برای مثال سه روشی که می‌توان الگوی CQRS را پیاده سازی کرد توضیح میدهیم:با کمک یک دیتابیس: ساده ترین نوع است و همانطور که در تصویر زیر مشاهده می‌کنید کامندها از طریق لایه‌ی persistence نتیجه را در دیتابیس ذخیره می‌کنند و کوئری‌ها به کمک یک لایه‎‌ی data access به دیتابیس وصل می‌شوند.معماری CQRS به کمک یک دیتابیسبا کمک دو دیتابیس:  همونطور که احتمالا توی ذهنتون اومد، یکی از دیتابیس ها برای خواندن و دومی برای نوشتنه اطلاعات استفاده میشه. نکته مهم هماهنگی و یکپارچگی اطلاعات این دو دیتابیسه! همونطور که در تصویر می‌بینید با هر افزایش یا به روزرسانی اطلاعات دیتابیس Write DB باید دیتابیس دیگر یعنی Read DB هم به روزرسانی بشه.معماری CQRS به کمک دو دیتابیسروش منبع یابی رویدادی یا event-sourcing: ایده‌ی کلی این روش اینه که تغییرات موجودیت‌ها در طول زمان ذخیره بشه و بامکانیزمی وضعیت گذشته و فعلی یک شئ را مقایسه کنیم. سرعت این روش از حالت‌های قبلی هم بالاتر میره ولی ایرادی که داره اینه که نمیتونیم eventهای قبلیمونو ویرایش یا حذف کنیم و فقط میشه event جدید اضافه کنیم.معماری CQRS با استفاده از روش event-sourcing(منبع1 و منبع2)4. MVVMمعماری MVVM یا Model - View - ViewModel یکی از الگوهای معماری نرم‌افزار است که توسط مایکروسافت معرفی شده و  شباهت زیادی به MVC داره (اگر با MVC آشنا نیستید میتونید سرچ کنید یا از اینجا بخونید). این تقسیم بندی توسعه موازی بخش‌های مختلف نرم‌افزارو ممکن می‌کند.مدل یا Model : بیزینس آبجکت‌هایی که داده ها و دامنه اپلیکیشن را کپسوله‌سازی (encapsulate) می‌کنند. درواقع مسئول نگهداری داده‌ها و اطلاعات به صورت خام است و حدالامکان سعی می‌شه که سرویس خاصی برای ویرایش و ... داده‌ها ارائه نکنه.نما یا View: همون رابط کاربری و پوسته‌ای از برنامس که کاربر با اون در ارتباطه.نما-مدل یا ViewModel: پیوند بین دو بخش قبلی اینجا اتفاق میفته، مثلا داده ها از مدل بازیابی میشوند و تغییراتی که لازم هست اتفاق میفته و در نما نمایش داده میشه. انتقال داده بین نما و نما-مدل توسط تکنیکی به نام data-binding انجام میشه.در کل برای اینکه یک برنامه‌ی ساختار یافته‌تر داشته باشیم پترن MVVM میتونه مفید باشه. (منبع1 ، منبع2)5. Event Sourcingاگر بخوایم در یک جمله مفهوم event-sourcing رو بگیم خوبه به این جمله از مارتین فاولر (Martin Fowler) مراجعه کنیم که میگه : &quot;Capture all changes to an application state as a sequence of events.&quot;در ایونت سورسینگ هدف اینه که رفتار نرم‌افزار در تمامی رویدادهایی که اتفاق میفته ثبت بشه و در یک لیست یا مخزن ذخیره شه. این لیست اصطلاحا append-only هست. یعنی نمیشه لاگ‌های قبلی ویرایش یا حذف بشن. یکی از مزایای بزرگ این روش دیباگ و کنترل رفتار برنامه است. از جمله کاربردهای این روش میشه به سیستم‌های مالی، سیستم‌های مرتبط با مسائل بهداشتی و کنترل سلامت، دولتی، حمل و نقل، بازی های ویدیویی و ... اشاره کرد ولی در کنار همه‌ی مزایایی که برای ما فراهم میکنه مثل هر روش دیگه معایبی هم داره. مثلا کوئری زدن به یک مخزن ایونت کار نسبتا سختی محسوب میشه و برای همین از CQRS استفاده میشه. (مورد سوم همین نوشته) ولی از طرفی چون همه رفتار و جزییات در تاریخچه ثبت شده از لحاظ زمانی کار با کوئری ها خیلی راحت تره! (مزایا و معایبش در هم تنیده شده!) (منبع1، منبع2 و منبع3)6. Micro Frontendsجهت پیاده سازی، توسعه و تست راحت تر بخش فرانت‌اند با توجه به اینکه اخیرا معماری میکروسرویس محبوب شده انتخاب بسیار مناسبی است. در واقع بخش فرانت اند به قطعات کوچک تری تجزیه میشه که کنترلش راحت تر باشه. مارتین فاولر میکرو فرانت اندو به صورت زیر تعریف میکنه: &quot;سبک معماری که در آن برنامه های کاربردی مستقل در یک کل بزرگتر مونتاژ می شوند.&quot;اگر بخواهیم چندتا از مزیت‌های استفاده از میکرو فرانت‌اند رو بگیم:میتونیم تیم‌های کوچیک‌تر و بیشتر داشته باشیم و به جای اینکه مثلا 20 نفر روی یک پروژه کار کنند که معمولا هم لازمه تخصصشون یکی باشه میشه مثلا 5 تا تیم کوچیکتر داشته باشیم که حتی یکی React کار میکنه یکی Vue و ... و در عین حال سرعت رشد پروژه هم بالاتر بره.همونطور که گفتیم قدرت نگهداری برنامه که یکی از Quality Attribute های مهم در معماری نرم‌افزار است بالاتر میره.اگرچه هنوز میکرو فرانت اند نسبت به میکرو سرویس سمت بک‌اند کم طرافدار تره، طبق گزارشات هرساله درصد بیشتری از دولوپرها به سمت استفاده از میکرو فرانت‌اند میرن.تصویر زیر به خوبی این مفهوم و تیم مزایایی که توضیح دادیمو نشون میده:( منبع1، منبع2 و منبع3)7. Low Code Platformsپلتفرم‌های کم کد ابزارهایی گرافیکی هستند که برای طراحی سایت، اپلیکیشن و ... به کار گرفته می‌شوند. این پلتفرم‌ها باعث می‌شوند سازمان در زمان نسبتا کمی به به ابزار  و نیازهای خود برسه و نیاز نداشته باشه نیروی گرون قیمت و زیاد استخدام کنه ولی از طرفی سطح توانایی این ابزار در حدی نیست که در رقابت با سایر رقبای بازار بتونه جز بهترین‌ها باشه. از سمت دیگه چون این ابزار طبق یک سری چهارچوب کد تولید می‌کنند لزوما بهترین کد تولید نمی‌شه و بعدها ممکنه موقع توسعه مشکلات زیادی برای سازمان به وجود بیاد. از نمونه‌های رایج این پلتفرم‌ها Canvas Apps هستن که یک اپلیکیشن از بالا به پایین (top - down) طراحی میشه.توی منبعی که در زیر اوردم 9 تا از بهترین پلتفرم‌های کم کد (low code) به تربیت زیر اورده:AppianMendixOutSystemsQuickbaseZoho CreatorKissflowSalesforce LightningMicrosoft Power AppsNintex( منبع1 ، منبع2)8.ESBگذرگاه سرویس سازمانی یا ESB مخفف عبارت Enterprise Service Bus است. در واقع یک میان افزار است که برای ادغام سرویس‌ها، سیستم ها  و ... مختلف که با زبان های متفاوتی صحبت می‌کنند در یک سازمان استفاده میشود. هر وقت یکی از بخش ها پیامی برای انتقال دارد ابتدا ESB ان را ترجمه میکند و بعد به مقصد مناسب هدایت میکند.از مزایای این راهکار میتوان به یکپارچگی و سهولت ارتباط بین سرویس گیرندگان اشاره کرد . در عین حال نقاط تبادل در سیستم کمتر میشود و نه تنها مدیریت عملکرد و توسعه راحت تر شده بلکه به نوعی خودش موجب افزایش امنیت است. در نهایت نگهداری سرویس های قدیمی تر راحت تر خواهد بود و نیاز نیست برای ایجار ارتباطات جدید هربار سرویس های دیگر دستخوش تغییر بشن. تصویر زیر به درک بهتر مفهوم ESB در یک معماری سرویس گرا کمک میکند:(منبع1، منبع2)9. API Gatewayاگه دستی در برنامه نویسی داشته باشین قطعا بارها اسم API به گوشتون خورده، برای مرور میتونید این منبع رو مطالعه کنید. اما API Gateway یا دروازه API یه ابزار مدیریت API محسوب میشه که ارتباط بین کلاینت و مجموعه‌ای از سرویس‌های بک‌اندی رو مدیریت میکنه. در واقع تمامی API call هارو میگیره و نتیجه مناسب بهشون رو برمیگردونه. این مسئله از طرفی تا حد خوبی امنیت سرویس‌ها رو هم تضمین میکنه چون دیگه کلاینت مستقیم با همه‌ی سرویس ها در ارتباط نیست. از طرفی نگهداری و توسعه کد هم ساده تر می‌شه چون دیگه لازم نیست برای تغییر یک سرویس از سمت کلاینت هم تغییری ایجاد شه. یکی از ابزار معروف اوپن سورس در این زمینه هم HAProxy است.  در نهایت اگر به این موضوع علاقه مند بودید نوشته‌ی &quot;API Gateway چیست و چرا از آن استفاده می‌کنیم؟&amp;amp;amp;amp;amp;quot; میتونه مفید باشه. (منبع2)API Gateway چیست و چرا از آن استفاده می‌کنیم؟10. Business Rules Management Systems (BRMS)سیستم مدیریت قوانین کسب و کار یا BRMS راهکاری برای ذخیره کردن، ویرایش و اجرای سریعتر و راحت تر قوانین تجاری است. قوانین تجاری هم دستور العمل های منطقی‌ای(and or) هستن که فعالیت‌های سازمانو تعریف، کنترل و محدود میکنند. خیلی از سازمان ها  به صورت سنتی و نانوشته یک سری قوانینی دارند که رعایت و به خاطر سپاری اونهارو برای کارمندها سخت میکنه و  منجر به ناهنجاری میشه. با کمک BRMS مواردی که گفته شد  حل میشه و مزایای دیگه‌ای از جمله موارد زیر به دست میاد:افزایش کارایی به علت وجود تصمیم گیری خودکار در مواردی که اتوماسیون شده اند. پس تصمیمات تکراری که دستی انجام میشدند هم کمتر میشن.توانایی مقیاس بندی تصمیمات برای اپلیکیشن های مختلفبهبود خدماتی که به کاربر ارائه میشود و بهبود تجربه کاربربا کمک BRMS میشه برای کارکنان مختلف یا پیمانکارهای خارجی سطح دستری تعیین کرد و به نوعی بر امنیت موثر است.(منبع1، منبع2)11. Business Process Management Systems (BPMS)سیستم مدیریت فرایند کسب و کار یا BPMS راهکاریه که کمک میکنه فرایندهای سازمان از حالت سنتی به سمت الکترونیکی و خودکار شدن پیش بروند. برای مثال بتونیم روال کاری سازمانمونو با زبان گرافیکی رسم کنیم و خودکار اجرا بشن. برای آشنایی با برخی از مزایای استفاده  BPMS میتونیم به موارد زیر اشاره کنیم: افزایش چابکی سازمان (agile)2. اتوماسیون گردش کار3. مدیریت و تعریف و پیگیری راحت تر فرایند ها4. ایجاد داشبورد های بصری که با یک نگاه اطلاعات مهم را بتوان دید5. قابلیت هایی برای ایجاد و حفظ یکپارچگی (Integration)و...از معروف ترین و پرکاربردترین BPMSهای معروف میتوان به bonitasoft و Red Hat JBoss BPM Suite اشاره کرد. (در پست تفاوت BPMS و BRMS این دو راهکارو مقایسه کردم و تصاویری از محیط نرم افزارها وجود داره که اگه دوست داشتید میتونید بخونید.)منبع1Red Hat Process Automation Manager12. Message Queueصف‌های پیام یا Message Queue بخشی از نرم افزار هستند که ارتباط برنامه را ساده‌تر میکنند. صف پیام در واقع یک بافر یا حافظه موقتی محسوب می‌شود و این موضوع ارتباط غیر هم زمان بین گیرنده و فرستنده را ممکن میکند. صف‌ها از قانون FIFO پیروی میکنند یعنی اولین ایتم وارد شده در لیست اولین آیتمی است که رسیدگی می‌شود.در معماری صف یک یا چند تولید کننده(producer) داریم که پیام‌ها را روی صف قرار میدهند و از سوی دیگر مصرف کننده(ها)(consumer) پیام ها را دریافت میکنند و اقدامات لازم را انجام میدهند.یکی از ابزارهای معروف در این زمینه RabbitMQ است که یک صف پیام اوپن سورس و قابل توسعه می‌باشد. RabbitMQ از پروتکل AMQP پیروی میکند که مخفف Advanced Message Queuing Protocol است.RabbitMQ Message Broker(منبع1 ، منبع2)13. Docker and Containerizationکانتینر واحد استاندارد سازی شده نرم افزار است که شامل کدها و وابستگی‌های  آن می‌شود و بر لایه سیستم عامل مجازی سازی می شود تا بهتر، سبک‌تر و سریع‌تر از سرور مجازی کار کند و برنامه با اطمینان و سرعت بالا از یک محیط محاسباتی به محیط دیگر اجرا شود. Containerization مفهومیه که امروزه خیلی پر طرفدار شده و به معنی بسته بندی کردن (packing) تمامی مواردی است که برای اجرای برنامه لازمند مثلا وابستگی های زمان احجرا (runtime dependencies) ، فایل های تنظیمات  و ... . راه حل های نرم افزاری مختلفی وجود دارند که داکر یکی از محبوب ترین هاست.پس داکر یک راه حل کانتینر سازی یا containerization  است که این کار را ساده تر و سریع تر میکند و بدون در نظر گرفتن نوع سیستم عامل (ویندوز، لینوکس و ...) روی هر بستری راه اندازی میشود. ساده ترین مورد استفاده از داکر برای اجرای یک یا چند کانتینر آماده به عنوان وابستگی‌های کد هستند. مثلا اگر برنامه ما از یک پایگاه داده‌ی postgreSQL استفاده کنه به جای نصب مستقیم روی دستگاه میشه از داکر استفاده کرد. در منبع 2 دستورات لازم برای اجرای این مثال اومده که اگر علاقه دارید میتونید بخونید.( منبع1، منبع2 و منبع3)14. Container Orchestrationدر مورد قبلی دیدیم که کانتینر سازی برنامه‌ها و سرویس‌ها هر روز محبوب تر میشه ولی با زیاد شدن کانتینرها مدیریت و نگهداری هم سخت تر میشه، برای اینکار ابزارهایی به وجود اومدن که orchestrator نام دارند که به خودکار سازی (اتوماسیون) این موضوع هم کمک می‌کنند و شامل طیف گسترده‌ای از مواردیه که تیم توسعه دهنده برای مدیریت چرخه طول عمر کانتینر (container’s lifecycle) بهشون لازم داره مثلا اسکیل کردن(کم و زیاد)، موراد شبکه، دیپلوی و ... .از مزایای استفاده از ارکستراسیون کانتینرها میتونیم به موارد زیر اشاره کنیم:ساده سازی عملیات: همونطور که گفتیم با زیاد شدن تعداد کانتینرها پیچیدگی و ناهماهنگی هم زیاد میشه و اگر دقت نکنیم ممکنه کلا مدیریت سیستم از کنترل خارج شه. پس اصلی تریم و مهم ترین مزیت به نظر من این مورده.انعطاف پذیری(Resilience): خود ابزار هماهنگ سازی (orchestration ) قادر هستن که به صورت خودکار کانتینر مورد نیازو ری‌استارت یا اسکیل کنند.امنیت: با توجه به این که به سمت اتوماسیون میریم خطای انسانی کمتر میشه و به نوعی امنیت بهبود پیدا میکنه.در تصویر زیر چند تا از پرکاربرد ترین ابزارهای ارکستراسیون نام برده شدند.(برخی از منابع: منبع1 ، منبع2)15. Log Management Toolsابزارهای مدیریت لاگ یا Log Management Tools محصولاتی هستند که لاگ‌های سیستم را به صورت متمرکز تر نمایش میدهند و قابلیت تجزیه و تحلیل و ویژوالایز آن‌ها را فراهم میکنند. برخی از ابزار مدیریت لاگ مکانیزم هشدار real-time هم فراهم میکنند. همچنین میتوان به صورت زنده و داینامیک کارایی سیستم هم بررسی کرد و تحت نظارت داشت و درکل عملکرد مدیریت به صورت پویا و راحت تر برای سازمان فراهم میشه. علاوه بر مواردی که گفته شد این ابزار معمولا قابلیت پاک سازی و تبدیل و ... داده های لاگ شده رو هم دارند.چند تا از بهترین ابزار مدیریت لاگ در منبع1 اومده که من هم پرکاردبرترین‌هاشو مختصرا معرفی میکنم:رتریس یا Retrace: این ابزار فیچرهای خیلی زیادی با قیمت مناسب فراهم کرده مثلا قابلیت فیلتر کردن و جست و جو ساختارمند بین لاگ‌ها وجود داره و میشه خطاها و گزارش هارو با کمک این ابزار به صورت هدفمند پیگیری کرد.2. لاگ اینتریز یا Logentries : این ابزار بر بستر کلاد کار میکنه و مدیریت و سرچ لاگ‌ها رو به صورت زنده (real-time) فراهم میکنه. به گفته‌ی خودشون از پروتکل های مدرن برای محافظت دیتای سیستم شما استفاده میکنه.(برخی از منابع: منبع2 ، منبع3)16. Monitoring Toolsروش‌های پایش (نظارت) یا Monitoring tools مجموعه‌ای از ابزار نظارت سیستم هستن که کمک می کنن به صورت مداوم وضعیت سیستم رو بررسی کنیم و در صورت لزوم بهبود ببخشیم. از آن جایی که نظارت برای کسب و کارها بسیار ضروری است این ابزار کمک می‌کنند ایرادهای سیستم به محض رخ دادن پیدا و از ایجاد مشکلات بزرگ‌تر جلوگیری بشه. اگر نظارت به درستی انجام نشه ممکنه آسیب‌ها و اختلالات زیادی به وجود بیاد.  مثلا یکی از این ابزار های نظارتی اوپن سورس prometheus  است که امکانات رسم و تصویرسازی خوبی را به همراه زبان کوئری مخصوص داره و در وهله‌ی اول بر جمع آوری، تجزیه و تحلیل دیتا بر اساس سری‌های زمانی به کاربران و توسعه دهندگان قابلیت‌های نظارت را خودشان تنظیم کنند.برخی از بخش هایی که نیاز دارند در شرکت نظارت روشون باشه:سرورها در زمان واقعیزیر ساخت‌های ابریکانتینرها مثل داکر و ...عملکر شبکهو موارد بسیار دیگراز دیگر ابزار مانیتورینگ می‌توان به زیبکس ( Zabbix)، ناگیوس (Nagios) و ریمان (Riemann) اشاره کرد که همگی اوپن سورس هستند. برخی از شرکت‌های ایرانی نیز پشتیبانی و نمایندگی‌هایی بر روی برخی از این ابزار ایجاد کرده‌اند مثلا شرکت سدید آفرین در حوزه‌ی مانیتورینگ زیر ساخت‌ها، سرویس‌ها و ...  فعالیت می‌کند.(منبع1 و منبع2 و منبع3)17. Static Code Analysisدر static code analysis یا تحلیل ایستا کد، کد بررسی و دیباگ میشه ولی آنرا اجرا نمیشه! هدف از این بررسی اینه که مطمئن شیم آیا این کد با استاندارد های تعیین شده یا مورد نظرمان تطبیق داره یا نه؟برای تحلیل ایستا که گاهی با اسم Source Code Analysisهم ممکنه به گوشتون بخوره، یک سری ابزار تسهیل یا خودکارسازی وجود دارند که کمک می‌کنن توسعه دهندگان این تحلیل‌ها رو راحت تر انجام بدن. این ابزار ها کد رو اسکن می‌کنن و نقص‌ها و ضعف‌های اونو بررسی و کشف می‌کنند. مثلا خطا های برنامه نویسی یا تخطی از استاندارد ها. گاهی هم ممکن است خطاهای نحوی یا امنیتی را کشف کنن.  تحلیل ایستا انواع مختلفی داره که عبارتند از:تحلیل کنترلی (که بر منطق برنامه تمرکز دارد)تحلیل داده (بر استفاده ی درست از داده تمرکز دارد)تحلیل خطا و واسط ها که به ترتیب بر خطاهای مدل و واسط های بخش های مختلف کد تمرکز دارند.برای مثال RIPS یکی از ابزار تحلیل ایستای کد برای زبان PHP هست که توی عکس زیر طرز کارش هست :یا مثلا OWASP که از محبوب ترین ابزار برای این کاره :در نهایت خوبه بدونین یک سری خطاهایی هم داره ( هم false negative و هم false posetive ) که اگر خواستید میتونید توی منبع1 بیشتر در موردش بخونید. (منبع1 ، منبع2)18. Continuous Deliveryدر continous delivery یا تحویل پیوسته یا تحویل مستمر (همون CD در CICD که احتمالا به گوشتون خورده) هدف افزایش دقت و سرعت انتشار کد جدید است که امروزه از طریق خودکارسازی (Automate) به اون میرسن و معمولا توی تیم‌ دواپس یک شرکت انجام می‌شه.در این رویکرد توی دوره‌های کوچک فرآیند توسعه اتفاق می‌افته و به سرعت منتشر میشه و همین باعث میشود هر ویژگی کوچکی که اضافه می‌شه تست شه و هزینه و ریسک‌های فنی کم بشن و از طرفی سرعت توسعه هم بالا میره. فرآیند آماده سازی و تست کدها در این نوع رویکرد به صورت خودکار اتفاق میفته. در نهایت با تست و انتشار تغییرات در یک مخزن مثل github در قسمت‌های کوچک، فرآیندdeploy رو در محیط اصلی ساده تر و کم هزینه تر میکنه. اگه سری به کتاب معماری تمیز رابرت مارتین (عمو باب معروف) زده باشید یه بخشی هست که میاد از مصیبت انتشار نسخه‌های جدید نرم‌افزار صحبت میکنه که تیم ها قدیم 5 روز هفته کد میزدن 2 روز اخر جمع میشدن دور هم تا کدهارو ادغام کنن و نسخه جدیدو بالا بیارن! و اینکار کاملا دستی انجام میشده. بعد شما فکر کنید نه تنها چندین دولوپر چند روز از توسعه و کار اصلی عقب میفتادن بلکه با مکافات رفع باگ میکردن و ساعت‌ها و حتی روزها بالا آوردن نسخه جدید طول می‌کشیده. (منبع1 ، منبع2) 19. Single Sign On (SSO) and Identity Managementسامانه احراز هویت یکپارچه یا Single Sign On یک روش احراز هویت است که اجازه میدهد با یک آیدی مشخص به چندین سیستم نرم افزاری مستقل ولی مرتبط با هم وارد شیم. در واقع با کمک یک سرویس احراز هویت مرکزی کاربر می‌تونه با تنها یک بار ورود نام کاربری و رمز عبور به تمام سرویس‌های تحت پوشش آن سیستم مرکزی وارد شود. مثلا سرویس‌های گوگل است که شامل گوگل درایو،‌ جیمیل، گوگل کولب و ... است و با یک بار وارد شدن از همه‌ی آنها میشه استفاده کنیم و لازم نیست برای هر کدوم دوباره لاگین کنیم. از مزایای خوبش میشه گفت که درصد ریکوئست‌های فراموشی پسورد از سمت کاربران خیلی پایین میاد، تجربه بهتری برای کاربر ایجاد میشه و لازم نیست تعداد زیادی پسورد یادش بمونه برای جاهای مرتبط و خب قطعا در امنیت هم تاثیر داره.حالا identity management  چیه؟ در این مفهوم هدف اینه که ما بررسی کنیم آیا یک کاربر خاص اجازه‌ی دسترسی به یک بخش خاص از نرم افزار را داره یا نه؟ و متناسب با اجازه‌هایی که دارد به او دسترسی بدیم. امروزه مدیریت هویت بخش مهم امنیتی در سیستم های نرم افزاری به خصوص IOT به حساب میاد. علاوه بر مزایای واضحی که داره باعث میشه شرکت‌ها بتونن راحت تر به پیمان کارهای خارج از شرکت دسترسی بدن.(منبع1، منبع2، منبع3)20. Service Meshسرویس مش راهکاری برای کنترل چگونگی به اشتراک گذاشتن داده در قسمت های مختلف اپلیکیشنه در واقع یک لایه ی زیرساختیه که داخل اپلیکیشن قرار گرفته است و می‌تونه این موضوع که بخش های مختلف یک اپلیکیشن چقدر خوب با هم ارتباط برقرار میکنند را ثبت کند با این روش میشه ارتباطات را به سادگی بهینه سازی کرد.مثلا یک اپلیکیشن مدرن میکرو سرویسی رو تصور کنید که از بخش های مختلف زیادی تشکیل شده( همونطور که میدونید اپلیکیشن های مدرن معمولاً میکروسرویسی هستن و از تعدادی سرویس تشکیل شدن که هرکدوم کار خودشونو انجام میدن ولی ممکنه یک سرویس برای اجرا نیاز به داده و ارتباط با دیگران داشته باشه). حالا فرض کنید یکی از سرویس ها بیش از حد درخواست دریافت کنه. اینجاست که service mesh وارد عمل میشه و درخواست ها را از یه سرویس به بعدی انتقال می دهد و این ارتباطات را بهینه می کند.در میکروسرویس ها همین ارتباط سرویس به سرویس است که باعث کارایی آنها میشود، میکروسرویس بدون service mesh هم ممکنه کار کنه اما هرچه تعداد سرویس ها بیشتر و ارتباطات پیچیده میشه، وجود سرویس مش ضروری تره. یکی از پروژه های اوپن سورس معروف این رویکرد Istio هست میتونید اینجا راجع بهش بخونید. (منبع)</description>
                <category>tara brn</category>
                <author>tara brn</author>
                <pubDate>Sat, 26 Nov 2022 07:11:34 +0330</pubDate>
            </item>
            </channel>
</rss>