<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Asma Niyaee</title>
        <link>https://virgool.io/feed/@asmaniyaee</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-07-06 13:31:37</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2046618/avatar/rVCr71.jpg?height=120&amp;width=120</url>
            <title>Asma Niyaee</title>
            <link>https://virgool.io/@asmaniyaee</link>
        </image>

                    <item>
                <title>الگوریتم هافمن (Huffman Coding)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%D9%81%D9%85%D9%86-huffman-coding-gjjhrjnbssm2</link>
                <description>الگوریتم هافمن (Huffman Coding) یه الگوریتم از نوع حریصانه برای فشرده سازی داده‌هاستحالا الگوریتم‌های حریصانه در کل چی هستن؟ الگوریتم حریصانه (Greedy) در هر مرحله از حل مسئله، بهترین انتخاب ممکن در همان لحظه رو انجام می‌ده، بدون اینکه به پیامدهای آینده یا انتخاب‌های قبلی توجه کنه. یعنی مثل کسی که تو فروشگاه دنبال خرید با کمترین پول باشه و فقط به قیمت لحظه‌ای نگاه کنه، نه اینکه کل سبد خرید رو بررسی کنه.ویژگی‌هاش:- تصمیم‌گیری مرحله‌ای: در هر گام، بهترین گزینه انتخاب می‌شه.- عدم بازگشت: انتخاب‌ها نهایی هستن و به عقب برنمی‌گرده.- سادگی و سرعت بالا: چون نیازی به بررسی همه حالت‌ها نداره.- جواب تقریبی یا بهینه: گاهی جواب کاملاً بهینه می‌ده، گاهی فقط نزدیک به بهینه.حالا نکته اینجاست، برای اینکه این الگوریتم جواب درست بده، مسئله باید دو ویژگی داشته باشه:اولا خاصیت انتخاب حریصانه (Greedy Choice Property): انتخاب بهترین گزینه در هر مرحله باید منجر به بهترین جواب کلی بشه.دوما زیرساختار بهینه (Optimal Substructure): مسئله باید قابل تقسیم به زیرمسئله‌هایی باشه که خودشون هم قابل حل با همین روش باشن.حالا الگوریتم هافمن (Huffman) چیه؟الگوریتم هافمن که برای فشرده‌سازی داده‌ها استفاده میشه ایده‌اش اینه:یک، کاراکترهایی که بیشتر تکرار می‌شن، با کدهای کوتاه‌تر نمایش داده بشنو دو، کاراکترهای کم‌تکرار، با کدهای بلندتراین باعث می‌شه حجم داده نهایی کمتر بشه و انتقال یا ذخیره‌سازی سریع‌تر انجام بشه.مراحل اجرا:۱. محاسبه فراوانی کاراکترهامثلاً در رشته‌ی &quot;asmaaa&quot;، کاراکتر a سه بار، s و m هرکدوم یک بار ظاهر شدن.۲. ساخت درخت هافمن- هر کاراکتر به‌عنوان یک گره با وزن (فراوانی) در نظر گرفته می‌شه.- دو گره با کمترین وزن با هم ترکیب می‌شن.- این کار ادامه پیدا می‌کنه تا فقط یک درخت باقی بمونه.۳. تخصیص کد دودویی به هر کاراکتر- حرکت به چپ: 0- حرکت به راست: 1- مسیر هر کاراکتر از ریشه تا برگ، کد اون کاراکتره.اگه بخوایم یه مثال بزنیمفرض کن رشته‌ای داریم با کاراکترهای زیر و فراوانی‌هاشون:| کاراکتر | فراوانی || A | 5 || B | 9 || C | 12 || D | 13 || E | 16 || F | 45 |بعد از ساخت درخت هافمن، ممکنه کدها به شکل زیر باشن:| کاراکتر | کد هافمن || F | 0 || C | 100 || D | 101 || A | 1100 || B | 1101 || E | 111 |می‌بینی که کاراکتر F که بیشترین فراوانی رو داره، کوتاه‌ترین کد رو گرفتهحالا برای درک بهترش میشه یه مسئله حل کردcppinclude &lt;iostream&gt;include &lt;queue&gt;include &lt;unordered_map&gt;using namespace std;struct Node {char ch;int freq;Node left, right;Node(char c, int f) {ch = c;freq = f;left = right = nullptr;}};struct Compare {bool operator()(Node a, Node b) {return a-&gt;freq &gt; b-&gt;freq;}};Node* buildHuffmanTree(unordered_map&lt;char, int&gt; freqMap) {priority_queue&lt;Node, vector&lt;Node&gt;, Compare&gt; pq;for (auto pair : freqMap) {pq.push(new Node(pair.first, pair.second));}while (pq.size() &gt; 1) {Node* left = pq.top(); pq.pop();Node* right = pq.top(); pq.pop();Node* merged = new Node(&#039;\0&#039;, left-&gt;freq + right-&gt;freq);merged-&gt;left = left;merged-&gt;right = right;pq.push(merged);}return pq.top();}void generateCodes(Node* root, string code, unordered_map&lt;char, string&gt;&amp; huffmanCode) {if (!root) return;if (root-&gt;ch != &#039;\0&#039;) {huffmanCode[root-&gt;ch] = code;}generateCodes(root-&gt;left, code + &quot;0&quot;, huffmanCode);generateCodes(root-&gt;right, code + &quot;1&quot;, huffmanCode);}توضیح :۱. ساختار Node     هر گره شامل یک کاراکتر، فرکانس، و اشاره‌گر به فرزندان چپ و راست هست.۲. صف اولویت‌دار (Priority Queue)     گره‌ها بر اساس فرکانس مرتب می‌شن. کمترین فرکانس اولویت بیشتری داره.۳. ساخت درخت هافمن     - دو گره با کمترین فرکانس انتخاب می‌شن.   - با هم ترکیب می‌شن و گره جدیدی ساخته می‌شه.   - این گره جدید دوباره وارد صف می‌شه.   - این روند ادامه پیدا می‌کنه تا فقط یک گره باقی بمونه → ریشه درخت.۴. تولید کدهای دودویی     با پیمایش درخت از ریشه تا برگ‌ها:   - حرکت به چپ → اضافه کردن 0   - حرکت به راست → اضافه کردن 1   - مسیر هر برگ (کاراکتر) تبدیل به کد هافمن اون کاراکتر می‌شه.امیدوارم این مطلب براتون مفید بوده باشه...</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Sun, 14 Sep 2025 15:54:17 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم تبرید شبیه سازی شده (Simulated Annealing)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%AA%D8%A8%D8%B1%DB%8C%D8%AF-%D8%B4%D8%A8%DB%8C%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B4%D8%AF%D9%87-simulated-annealing-cpelou2jfj16</link>
                <description>الگوریتم تبرید شبیه سازی شده (Simulated Annealing) یه الگوریتم بهینه‌سازی از نوع قطعیه (تو پست های قبلی هم به این نوع الگوریتم‌ها اشاره کردم ولی این توضیح رو داشته باشید: الگوریتم‌های بهینه‌سازی قطعی مثل اون دوستای منظمی هستن که همه‌چیز رو طبق برنامه و بدون هیچ شانسی انجام می‌دن. این الگوریتم‌ها به نوعی دقیق و منطقی پیش میرن و معمولاً از فرمول‌های ریاضی برای پیدا کردن بهترین راه‌حل استفاده می‌کنن.)حالا الگوریتم تبرید شبیه سازی شده دقیقا چیه؟تصور کن که در حال بازدید از یک شهر قدیمی پر از تپه و دره هستی و می‌خوای به بالاترین تپه برسی. اما اگه فقط به سمت بالا حرکت کنی، ممکنه در تپه‌های کوچکتر گیر بیفتی و نتونی به بلندترین تپه برسی. الگوریتم تبرید شبیه‌سازی شده مثل یه نقشه هست که بهت کمک می‌کنه حتی اگه بعضی وقتا به سمت پایین حرکت کنی، در نهایت به بلندترین تپه برسی.چطوری کار می‌کنه؟این الگوریتم از مفهوم تبرید در فیزیک الهام گرفته که در اون یک ماده ابتدا گرم و سپس به تدریج سرد می‌شه. همونطور که دمای سیستم کاهش پیدا می‌کنه، حرکت ذرات هم کم کم آروم می‌شه و سیستم به حالت پایدار (یا بهینه) خودش می‌رسه.۱. شروع با یک دما و راه‌حل اولیه: دما رو روی مقدار بالایی تنظیم می‌کنی و با یه راه‌حل اولیه شروع می‌کنی.۲. پیدا کردن همسایه‌های راه‌حل فعلی: در هر مرحله، همسایه‌هایی برای راه‌حل فعلی پیدا می‌کنی (مثلاً با تغییرات کوچیک).۳. قبول یا رد راه‌حل جدید: اگه راه‌حل جدید بهتر باشه، اون رو قبول می‌کنی. اما اگه بدتر باشه، با احتمالی که به دما وابسته‌ است، ممکنه اون رو قبول کنی. به این میگن &quot;پذیرش توسط جهش&quot;.۴. کاهش دما: دما رو به تدریج کم می‌کنی و این مراحل رو تکرار می‌کنی تا دما خیلی کم بشه و به یک راه‌حل نهایی برسی.مثلا برای این‌که راحت‌تر بفهمی: فرض کن تو یه فروشگاه زنجیره‌ای کار می‌کنی و باید چیدمان قفسه‌ها رو بهینه کنی تا فروش بیشتری داشته باشی. با استفاده از الگوریتم تبرید شبیه‌سازی شده، می‌تونی چیدمان‌های مختلف رو امتحان کنی و حتی اگر یک چیدمان کمتر خوب به نظر برسه، ممکنه در طول زمان به یک چیدمان بهتر منجر بشه. مزایا- ساده و انعطاف‌پذیر: به راحتی می‌تونه برای مسائل مختلف تنظیم بشه.- پرهیز از افتادن در کمینه‌های محلی: به دلیل پذیرش راه‌حل‌های بدتر در ابتدا، به بهینه سراسری نزدیک می‌شه. معایب- زمان‌بر: به خاطر نیاز به تنظیم دما و تعداد زیادی تکرارها، ممکنه زمان زیادی ببره.- نیاز به تنظیمات دقیق: پارامترهایی مثل نرخ کاهش دما باید به دقت تنظیم بشن تا الگوریتم بهینه عمل کنه. این مثال یک مسئله ساده رو حل می‌کنه: پیدا کردن کمینه یک تابع یک‌بعدی به نام f(x) = x^2 + 4*sin(5*x) + 3*cos(3*x) در بازه [−10, 10].  #include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

double f(double x) {
    return x * x + 4 * sin(5 * x) + 3 * cos(3 * x);
}

double getRandom(double min, double max) {
    return min + (double)rand() / RAND_MAX * (max - min);
}

double simulatedAnnealing(double initialTemp, double coolingRate, double minTemp) {
    double x = getRandom(-10, 10);  // شروع با یک راه‌حل تصادفی
    double temp = initialTemp;

    while (temp &gt; minTemp) {
        double newX = x + getRandom(-1, 1);  // تولید یک راه‌حل همسایه
        newX = std::min(10.0, std::max(-10.0, newX));  // محدود کردن به بازه [−10, 10]

        double deltaE = f(newX) - f(x);

        if (deltaE &lt; 0 || exp(-deltaE / temp) &gt; getRandom(0, 1)) {
            x = newX;  // پذیرش راه‌حل جدید
        }

        temp *= coolingRate;  // کاهش دما
    }

    return x;
}

int main() {
    srand(time(0));  // مقداردهی تصادفی

    double initialTemp = 1000;
    double coolingRate = 0.99;
    double minTemp = 0.01;

    double result = simulatedAnnealing(initialTemp, coolingRate, minTemp);
    std::cout &lt;&lt; &amp;quotMinimum found at x = &amp;quot &lt;&lt; result &lt;&lt; &amp;quot, f(x) = &amp;quot &lt;&lt; f(result) &lt;&lt; std::endl;

    return 0;
}توضیحات کد: ۱. تابع f:تابع هدف که می‌خوایم کمینه اون رو پیدا کنیم. ۲. تابع getRandom: برای تولید اعداد تصادفی در یک بازه مشخص. ۳.تابع simulatedAnnealing: پیاده‌سازی الگوریتم تبرید شبیه سازی شده. ۴.حلقه‌ی اصلی: در هر مرحله، دما کاهش پیدا می‌کنه و یک راه حل همسایه جدید ایجاد میشه. اگه راه حل جدید بهتر باشه با یک احتمال مشخص، اون رو قبول می‌کنیم. ۵. مقداردهی اولیه: تنظیمات دمای اولیه، نرخ کاهش دما و دمای کمینه.امیدوارم این مطلب براتون مفید بوده باشه و مثل همیشه اگه می‌خواید بیشتر با این موضوع آشنا بشید منابع بیشتری رو مطالعه کنید✨️.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Sat, 11 Jan 2025 19:02:32 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم جستجوی گراف (Graph Search Algorithms)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%DA%AF%D8%B1%D8%A7%D9%81-graph-search-algorithms-ityv1exgphrt</link>
                <description>یه  ابزار قدرتمنده که برای پیمایش و جستجوی اطلاعات تو ساختار های گراف استفاده میشه که دو تا الگوریتم پر کاربرد داره؛ BFS و DFS که اولی عالی برای پیدا کردن کوتاه ترین مسیره و دومی عالی برای چک کردن همه راه‌ها، حالا بیاید تا این موضوع رو بیشتر باز کنیم: ۱. جستجوی اول سطح (BFS) فرض کن توی یه مهمونی هستی و دنبال دوستت می‌گردی. اول از همه نزدیک‌ترین آدم‌ها رو می‌بینی و می‌پرسی، بعدش میری سراغ کسانی که دورترن. اینطوری، تو همه رو به ترتیب از نزدیک به دور چک می‌کنی.حالا کاربردش چیه؟ پیدا کردن کوتاه‌ترین مسیر از یک نقطه به نقطه دیگه در یک شبکه (مثل پیدا کردن کوتاه‌ترین راه توی یک نقشه).مزایا- برای پیدا کردن کوتاه‌ترین مسیر عالیه.- نظم داره و اول همه نزدیک‌ها رو چک می‌کنه.معایب- اگه شبکه خیلی بزرگ باشه، ممکنه حافظه زیادی مصرف کنه.- برای شبکه‌های خیلی بزرگ شاید زمان بیشتری بگیره.۲. جستجوی اول عمق (DFS)حالا دوباره فرض کن توی همون مهمونی هستی، ولی این بار تصمیم می‌گیری از یکی از درها وارد بشی و تا ته بری، هر اتاق رو چک کنی و اگه دوستت نبود، برگردی و بری سراغ اتاق بعدی. اینطوری همیشه تا ته میری بعد برمی‌گردی.کاربرد؟ پیدا کردن همه مسیرهای ممکن و چک کردن کامل یک ساختار (مثل جستجو توی یه پرونده کامپیوتری برای پیدا کردن همه فایل‌ها).مزایا:- حافظه کمتری مصرف می‌کنه چون فقط مسیر فعلی رو توی حافظه نگه می‌داره.- برای حل مسائل پیچیده که همه مسیرها باید بررسی بشن خیلی خوبه.معایب:- ممکنه به جایی برسه که مسیر بی‌نهایت طولانی بشه و زمان زیادی بگیره.- لزوماً کوتاه‌ترین مسیر رو پیدا نمی‌کنه.نکات بیشتر درباره BFS:۱.گراف‌های وزن‌دار و بدون وزن:   - الگوریتم BFS معمولاً برای گراف‌های بدون وزن (یا گراف‌هایی که همه یال‌ها وزن یکسان دارن) به کار می‌ره. برای گراف‌های وزن‌دار، الگوریتم Dijkstra بیشتر استفاده می‌شه.۲. پیدا کردن اجزای همبند:   - الگوریتم BFS می‌تونه برای پیدا کردن اجزای همبند (Connected Components) در یک گراف استفاده بشه. به این معنی که می‌تونیم بفهمیم کدوم قسمت‌های گراف به هم متصل هستن و کدوم‌ها مستقلن.۳. پیدا کردن حلقه‌ها:   - با استفاده از BFS می‌تونیم حلقه‌ها یا چرخه‌ها (Cycles) در یک گراف رو تشخیص بدیم. اگه در طول جستجو به یک گره‌ای برسیم که قبلاً بازدید شده و همسایه هم باشه، این نشون‌دهنده وجود حلقه است.۴. پیچیدگی زمانی و مکانی:   - پیچیدگی زمانی (Time Complexity): الگوریتم BFS زمانی برابر با $$O(V + E)$$ داره، که در اون $$V$$ تعداد گره‌ها و $$E$$ تعداد یال‌هاست.   - پیچیدگی مکانی (Space Complexity): الگوریتم BFS فضایی برابر با $$O(V)$$ مصرف می‌کنه، چون نیاز به ذخیره گره‌ها و وضعیت بازدید اونها داره.5. کاربردهای دیگر:   - تحلیل شبکه‌های اجتماعی: برای پیدا کردن دوستان مشترک یا پیشنهاد دوستان جدید.   - پیدا کردن کوتاه‌ترین مسیر در بازی‌ها: مثل بازی‌های پازلی که باید راهی برای خروج پیدا کنی.   - حل مسائل جریان شبکه: مثل مسئله بیشینه جریان (Maximum Flow).حالا اگه اطلاعات بیشتری می‌خواید بیایم یه مثال از جستجوی اول سطح (BFS) رو توی زبان سی پلاس پلاس پیاده‌سازی کنیم. فرض کن یه نقشه شهری داریم و می‌خواهیم کوتاه‌ترین مسیر رو از یک نقطه به نقطه دیگه پیدا کنیم. هر نقطه توی نقشه به عنوان یک گره و هر جاده به عنوان یال در نظر گرفته شده.cpp
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;queue&gt;

using namespace std;

// تابع BFS برای پیدا کردن کوتاه‌ترین مسیر در یک گراف
void BFS(const vector&lt;vector&lt;int&gt;&gt;&amp; graph, int start, vector&lt;int&gt;&amp; distance) {
    int n = graph.size();
    vector&lt;bool&gt; visited(n, false);
    queue&lt;int&gt; q;

    visited[start] = true;
    distance[start] = 0;
    q.push(start);

    while (!q.empty()) {
        int current = q.front();
        q.pop();

        for (int neighbor : graph[current]) {
            if (!visited[neighbor]) {
                visited[neighbor] = true;
                distance[neighbor] = distance[current] + 1;
                q.push(neighbor);
            }
        }
    }
}

int main() {
    // تعریف گراف به صورت یک لیست مجاورت (Adjacency List)
    vector&lt;vector&lt;int&gt;&gt; graph = {
        {1, 2},      // همسایه‌های گره 0
        {0, 3, 4},   // همسایه‌های گره 1
        {0, 4},      // همسایه‌های گره 2
        {1, 5},      // همسایه‌های گره 3
        {1, 2, 5},   // همسایه‌های گره 4
        {3, 4}       // همسایه‌های گره 5
    };

    int start = 0; // شروع از گره 0
    vector&lt;int&gt; distance(graph.size(), -1);
BFS(graph, start, distance);

    // چاپ فاصله‌ها از نقطه شروع
    for (int i = 0; i &lt; distance.size(); ++i) {
        cout &lt;&lt; &amp;quotفاصله از &amp;quot &lt;&lt; start &lt;&lt; &amp;quot تا &amp;quot &lt;&lt; i &lt;&lt; &amp;quot برابر است با: &amp;quot &lt;&lt; distance[i] &lt;&lt; endl;
    }

    return 0;
},در این کد، ابتدا گراف به صورت یک لیست مجاورت (Adjacency List) تعریف شده که هر گره و همسایه‌هاش رو نشون می‌ده. بعدش با استفاده از الگوریتم BFS، فاصله هر گره از نقطه شروع حساب می‌شه. در نهایت فاصله‌ها چاپ می‌شن.این مثال نشون می‌ده که چطوری می‌تونیم با استفاده از BFS توی یه نقشه شهری کوتاه‌ترین مسیرها رو پیدا کنیم. امیدوارم این مطلب به دردت خورده باشه و مثل آخر همه بلاگ‌ها می‌خوام بگم اطلاعات این پست خیلی بیسیکه و اگه قصد دارید از این الگوریتم استفاده کنید دقیق مطالعه‌اش کنید.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Tue, 07 Jan 2025 17:07:28 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم جنگل تصادفی (Random forest)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%AC%D9%86%DA%AF%D9%84-%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%DB%8C-random-forest-tq9qhdqjeikq</link>
                <description>الگوریتم جنگل تصادفی (Random Forest)الگوریتم جنگل تصادفی یه روش قدرتمند تو دنیای یادگیری ماشینه... این الگوریتم از ترکیب چندین درخت تصمیم برای بهبود دقت و پایداری مدل استفاده می‌کنه و باید اضافه کنم که نخستین الگوریتم برای جنگل‌های تصمیم تصادفی رو «تین کم هو» با بهره‌گیری از روش زیرفضاهای تصادفی ساخت و نسخه‌های بعدی اون توسط لیو بریمن ارتقا پیدا کرد؛ حالا بیایید به تفصیل بررسی کنیم:چطوری کار می‌کنه؟درخت‌های تصمیم:   - اول باید با درخت‌های تصمیم آشنا بشیم. درخت تصمیم، یک ساختار شاخه‌بندیه که برای تصمیم‌گیری‌ها و پیش‌بینی‌ها استفاده می‌شه به طور ساده، هر درخت تصمیم، از ریشه شروع میشه و در هر گام، بر اساس یک ویژگی، به یکی از شاخه‌ها حرکت می‌کنه تا در نهایت به یک برچسب (برای دسته‌بندی) یا یک مقدار (برای رگرسیون) برسه‌.   - الگوریتم جنگل تصادفی از چندین درخت تصمیم تشکیل شده که به صورت موازی کار می‌کنن.تصادفی‌سازی:   - در جنگل تصادفی، هر درخت تصمیم با داده‌های تصادفی از مجموعه داده آموزشی ساخته میشه. این تصادفی‌سازی باعث میشه که هر درخت تصمیم به‌طور مستقل از بقیه درخت‌ها یاد بگیره.   - همچنین، تو هر گام از ساخت درخت، تنها از زیرمجموعه‌ای از ویژگی‌ها استفاده میشه. این تنوع و تصادفی‌سازی باعث میشه جنگل تصادفی از بیش‌برازش (overfitting) جلوگیری کنه. ترکیب نتایج:   - نتایج پیش‌بینی از هر درخت تصمیم ترکیب می‌شن تا نتیجه نهایی به دست میاد‌؛ معمولاً با ترکیب رأی (برای دسته‌بندی) یا میانگین (برای رگرسیون) این نتایج به دست میان.یه مثال برای درک بهترمزایا و معایبمزایا:۱. کاهش خطر بیش‌برازش (Overfitting): الگوریتم جنگل تصادفی با ترکیب نتایج چندین درخت تصمیم، معمولاً نسبت به الگوریتم‌های تک‌درختی، مثل درخت تصمیم، از بیش‌برازش محافظت می‌کنه.۲. قابلیت کار با داده‌های پیچیده: جنگل تصادفی به دلیل ترکیب پیش‌بینی‌ها از چندین درخت، می‌تونه با داده‌های پیچیده و متنوع خوب کار کنه.معایب:۱. پیچیدگی محاسباتی: اجرای جنگل تصادفی نیازمند محاسبات زیادیه، چون باید چندین درخت تصمیم رو آموزش بدیم و نتایج اونا رو ترکیب کنیم.۲. مصرف حافظه بالا: ذخیره و مدیریت چندین درخت تصمیم نیازمند حافظه زیادیه.به طور کلی، الگوریتم جنگل تصادفی چون مقاومت زیادی در برابر بیش‌برازش و توانایی کار با داده‌های پیچیده رو داره، یه انتخاب خوب برای مسائل مختلفه‌. مثال جهان واقعی از جنگل تصادفی:   - یکی از مثال‌های معروف استفاده از جنگل تصادفی، تشخیص اسپم ایمیل‌هاست. اینجا، جنگل تصادفی با ترکیب نتایج چندین درخت تصمیم، بهترین تصمیم رو برای تشخیص اسپم بودن یا نبودن ایمیل ورودی میگیره.مثل آخر همه بلاگ‌ها می‌خوام بگم اطلاعات این پست خیلی بیسیکه و اگه قصد دارید از این الگوریتم استفاده کنید دقیق مطالعه‌اش کنید؛ خوشحال شدم که این بلاگ رو مطالعه کردید.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Mon, 30 Sep 2024 19:14:20 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم بهینه سازی نهنگ (WOA)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%86%D9%87%D9%86%DA%AF-woa-xctx7ibkvydx</link>
                <description> الگوریتم بهینه سازی نهنگ (Whale Optimization Algorithm): مثل الگوریتم کرم شب تاب یه الگوریتم بهینه سازی (به روش گام به گام برای به‌دست آوردن مقدار بهینه &quot;حداکثر یا حداقل&quot; یه تابع هدف، الگوریتم بهینه سازی میگن.) فرا ابتکاری (تو بلاگ قبلی گفتم اینجا هم میگم... فرا ابتکاری شبیه به اکتشافیه و به دنبال راه حل‌های امیدوار کننده‌ای برای مسائله، در زمینه فرا ابتکاری ویژگی های &quot;موفقیت غیر قابل اندازه‌گیری&quot; همون چیزیه که برای اکتشافی مورد بحث قرار می‌گیره به طور کلی، الگوریتم‌های فرا ابتکاری برای بهینه سازی جهان طراحی شدن.) الهام گرفته از طبیعته که رفتار شکار نهنگ‌های کوژپشت‌رو تقلید می‌کنه؛ این الگوریتم از استراتژی شکار شبکه حباب الهام گرفته شده. به رفتار شکار نهنگ‌های گوژپشت رو تغذیه حباب دار میگن؛ نهنگ‌های گوژپشت ترجیح میدن گله‌ای از ماهی‌های نزدیک به سطح آب‌رو شکار کنن حالا این جستجوی غذا با ایجاد حباب‌های متمایز تو امتداد یه مسیر دایره‌ای یا &#x27;9&#x27; شکل انجام میشه.دو الگوی مرتبط با تغذیه شبکه حباب شامل &quot;مارپیچ رو به بالا&quot; و &quot;دو حلقه&quot; است. تو الگوی «مارپیچ رو به بالا » نهنگ‌های گوژپشت حدود 12 متر به پایین شیرجه می‌زنن بعد شروع به ایجاد حباب‌هایی به شکل مارپیچی تو اطراف طعمه می‌کنن و به سمت سطح شنا می‌کنن؛ الگوی &quot; دو حلقه &quot; شامل سه مرحله مختلفه:  شکار محاصره ای  فاز بهره برداری: روش حمله به حباب تور  مرحله اکتشاف: جستجوی شکار  تغذیه حباب دار رفتاری منحصر به فرده که فقط تو نهنگ‌های گوژپشت قابل مشاهدست؛ تو الگوریتم بهینه سازی نهنگ (WOA) الگوی تغذیه حباب-شبکه مارپیچی- به منظور انجام بهینه سازی به صورت ریاضی مدل شده. میشه رفتار شکار رو با تصادفی یا بهترین عامل جستجو برای تعقیب طعمه شبیه سازی کرد یا از یک مارپیچ برای شبیه‌سازی مکانیسم حمله حباب‌دار نهنگ‌های گوژپشت استفاده کرد.الگوریتم‌های بهینه‌سازی فراابتکاری تو کاربردهای مهندسی روز به روز محبوب‌تر می‌شن چون: -به مفاهیم نسبتاً ساده تکیه می‌کنن و خیلی راحت قابل پیاده سازی‌ان  -نیازی به اطلاعات گرادیان نیست-میشه اون‌هارو تو طیف وسیعی از مسائل تو رشته‌های مختلف استفاده کرد.  کاربرد: تو مسائلی که دیتاست‌ها ابعاد بزرگی دارن می‌تونیم با الگوریتم وال زیر مجموعه‌ای از دیتاست رو انتخاب کنیم که بیشترین تاثیر رو تو بخش آموزش دارن؛ پس از بین مقادیر فرضاً 0 و 8 که تو جواب داریم می‌تونیم بگییم اگه عدد از 4 بزگتر بود به عنوان ویژگی انتخاب بشه و اگه کوچک‌تر بود انتخاب نشه:)  خیلی از محقق‌ها چندین فرا ابتکاری رو برای رسیدگی به مسائل پیچیده/حل نشده بهینه سازی توسعه دادن  مثلا: بهینه سازی ازدحام ذرات، بهینه سازی گرگ خاکستری، بهینه سازی کلونی مورچه‌ها، الگوریتم‌های ژنتیک، الگوریتم جستجوی فاخته و غیرهمثل آخر همه بلاگ‌ها می‌خوام بگم اطلاعات این پست خیلی بیسیکه و اگه قصد دارید از این الگوریتم استفاده کنید دقیق مطالعه‌اش کنید.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Sat, 06 Jan 2024 22:28:45 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم کرم شب تاب (FA)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%DA%A9%D8%B1%D9%85-%D8%B4%D8%A8-%D8%AA%D8%A7%D8%A8-fa-firefly-algorithm-sjb7gist6nyy</link>
                <description>الگوریتم کرم شب تاب (Firefly Algorithm) مثل الگوریتم کلونی مورچگان زیر مجموعه‌ای از هوش ازدحامیه و میشه گفت قدرتمند ترین روش بهینه سازی فرا ابتکاریه (فرا ابتکاری شبیه به اکتشافیه و به دنبال راه حل‌های امیدوار کننده‌ای برای مسائله، در زمینه فرا ابتکاری ویژگی‌های &quot;موفقیت غیر قابل اندازه گیری&quot; همون چیزیه که برای اکتشافی مورد بحث قرار می‌گیره؛ به طور کلی، الگوریتم‌های فرا ابتکاری برای بهینه سازی جهان طراحی شدن.) که از طبیعت الهام گرفته شده. تو این الگوریتم میشه راه حل مسائل بهینه سازی رو بر اساس ویژگی‌های کرم‌های شب تاب حل کرد در واقع از فعالیت‌های چشمک زن مشخصه‌ای رو نشون میده تا به عنوان جذب شریک، ارتباط و هشدار خطر برای شکارچیان عمل کنه.مراحل الگوریتم کرم شب تاب:الگوریتم کرم شب تاب از سه قانون بر اساس ویژگی‌های چشمک زن شب تاب‌های واقعی تشکیل شده.1.همه کرم‌های شب تاب تک جنسیتی هستن و صرف نظر از جنسیتشون به سمت کرم درخشان‌تر حرکت می‌کنن.2.میزان جذب کرم شب تاب با درخشندگی اون متناسبه. این امر با افزایش فاصله از بقیه کرم‌های شب تاب کمتر میشه چون هوا نور رو جذب‌ می‌کنه. اگه کرم شب تاب درخشان‌تر یا جذاب‌تر وجود نداشته باشه، کرم‌ها به‌طور تصادفی حرکت می‌کنن.3. روشنایی یا شدت نور هر کرم شب تاب با مقدار تابع هدف یک مسئله مشخص میشه.ساختار:کاربرد ها: پردازش تصویر:فشرده سازی تصویر دیجیتال و پردازش تصویر نیاز به بهینه سازی داره. تو این زمینه، بهینه سازی با استفاده از الگوریتم کرم شب تاب انجام میشه. طراحی سازه: الگوریتم کرم شب تاب تو طراحی بهینه سازه‌ها تو بخش ساخت و ساز استفاده میشه. زیست پزشکی و مراقبت‌های بهداشتی: الگوریتم کرم شب تاب تو زمینه‌های مهم پزشکی مثل طبقه بندی سرطان سینه، تصاویر شبکیه انسان، طبقه بندی تومور سینه، تشخیص تومور مغزی، نظارت بر سلامت و... استفاده شده.  امیدوارم مطالعه این وبلاگ تونسته باشه به سوالات شما پاسخ بده هرچند که توضیح مختصری داشت و اگه قصد دارید از این الگوریتم توی پروژه هاتون استفاده کنید به این اطلاعات محدود بسنده نکنید.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Tue, 14 Nov 2023 18:58:38 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم کلونی مورچگان (ACO)</title>
                <link>https://virgool.io/@asmaniyaee/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%DA%A9%D9%84%D9%88%D9%86%DB%8C-%D9%85%D9%88%D8%B1%DA%86%DA%AF%D8%A7%D9%86-aco-hanm7dh6x6fv</link>
                <description>الگوریتم کلونی مورچگان (Ant Colony Optimization) زیر مجموعه از هوش ازدحامیه (Swarm Inteligent) (هوش ازدحامی یه زمینه از هوش محاسباتیه و از رفتارهای تجمعی با عامل های طبیعی گرفته میشه).این الگوریتم از روش پیدا کردن بهینه ترین راه از آشیانه به منابع غذایی توسط مورچه ها گرفته شده، توی این فرآیند مورچه ها شروع به جستجو برای غذا می کنن و در همین حین ماده ای به اسم فرومون ترشح میکنن و توی مسیری که طی کردن به جا می ذارن؛ هر مورچه ای که نزدیک ترین (بهینه ترین مسیر به) منبع غذایی رو پیدا کنه اون مسیر طی کرده خودش از آشیانه به منبع غذایی رو در راه برگشتش تکرار میکنه، بخش مهم اینه که تو این فرآیند رفت و برگشت مسیر فورمون تقویت میشه و مورچه های دیگه به صورت غریزی به مسیری که فرومون قوی تری داره کشیده میشن.مورچه‌های واگعیکاربرد های این الگوریتم: مسائل پردازش تصویر (Image Processing) داده کاوی (Data Mining) دسته بندی (Classification) و هر مسئله دیگه ای که به دنبال مسیر بهینه برای رسیدن به مقصد باشیم.  امیدوارم این اطلاعات به دردتون خورده باشه هرچند خیلی اطلاعات سطحی رو توضیح دادم و اگه قصد دارید از این الگوریتم توی پروژه هاتون استفاده کنید بهتره این الگوریتم رو از منابع تخصصی تر و با فرمول های ریاضیش مطالعه کنید.این اتفاق طبیعی، مسئله پیدا کردن بهینه ترین راه برای دسترسی به منبع خاصی که هدف ماست رو حل میکنه و توی مدل های هوش مصنوعی (AI) استفاده زیادی داره. بهترین مثال برای نشون دادن این روش استفاده اون برای حل مسئله &quot;فروشنده دور گرد&quot; هس با اینکه این مسئله یه NP کامل حساب میشه (NP:به مسائلی که تا حالا جواب مشخصی نداشتن و جواب هایی که به دست اومدن فقط احتمال داره که درست باشن) ولی حل این مسئله با این الگوریتم خیلی صریح و واضحه. توی مسئله فروشنده دوره گرد یه فروشنده دوره گرد هست که باید از تمامی شهر ها یک بار عبور کنه و وقتی عبور از تمامی شهر ها تموم شد به شهر اول برگرده، هدف این مسئله پیدا کردن کوتاه ترین مسیره.</description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Sat, 11 Nov 2023 11:43:22 +0330</pubDate>
            </item>
                    <item>
                <title>Dissociative identity disorder (DID)</title>
                <link>https://virgool.io/@asmaniyaee/dissociative-identity-disorder-did-v64os5wbepig</link>
                <description>Identity disorder is a mental process that causes thoughts, memories, feelings, actions &amp; identity not to have a connection with each other. This disorder is caused by factors that include the trauma that the patient has experienced. The main person separates herself from her memories.About 90% of patients experience severe emotional, physical, or sexual abuse. It&#x27;s also possible for events such as war or natural disasters. This reaction can be a defense mechanism against physical or emotional pain or a stressful situation.People with identity disorders have two or more characters. Each character has certain characteristics like name, behavior, and interests; and the original person doesn&#x27;t remember anything from her other personalities.Some symptoms of this disorder that can be mentioned are:Depersonalization ParanoiaDerealizationDepression Hearing voices from characters inside the mindConflict in personality and behavior.The treatment of this disorder is impossible with drug therapy. The purpose of therapy is to reconnect all characters to the main person. At the beginning of therapy, two or four personalities are recognized, but after a while, this number reaches thirteen to fifteen.99% of affected people have experienced major life threats in the critical stage of childhood development. Identity disorder is complex and requires a specialist and lack of treatment can lead to many risks, including suicide. </description>
                <category>Asma Niyaee</category>
                <author>Asma Niyaee</author>
                <pubDate>Sat, 29 Apr 2023 17:47:23 +0330</pubDate>
            </item>
            </channel>
</rss>