طولانی ترین مسیر یا کمترین شناوری
کلا دو روش برای بحرانی به حساب آوردن فعالیتها و در نتیجه تعیین «مسیر بحرانی»، یعنی مجموعه فعالیتهای بحرانی – که از قدیم علاقه داشتیم تو یه مسیر باشن – وجود داره:
- بر اساس حداکثر شناوری کل فعالیتها
- بر اساس قرار گرفتن روی طولانیترین مسیر
روش اول برای اکثر افراد آشناتره و معمولا جاهایی که تئوری CPM رو توضیح میدن از همین روش استفاده میکنن. تو این روش زودترین و دیرترین تاریخهای شروع و پایان هر فعالیت تو دو مرحله رفت و برگشت محاسبه میشه و تفاضل زودترین و دیرترین تاریخها دو مقدار شناوری شروع و شناوری پایان رو به وجود میاره. نرمافزارهای مختلف یا یکی از این دوتا رو شناوری کل میشناسن، یا حداقل اونها رو، یا حتی انتخاب اون رو به شما بدن؛ البته این دو مقدار تو حالتهای معمولی با هم برابر هستن. حالا حدی برای اونها در نظر گرفته میشه و هر فعالیتی که شناوری کلش از اون مقدار بیشتر نباشه بحرانی به حساب میاد.
شناوری کل فعالیتها تو برنامهای که آزاد باشه از صفر کمتر نمیشه و این فرض تو حالتهای قدیمی که تو تئوریها توضیح داده میشه هم وجود داره. برای همین رسم بر این بوده که شناوری صفر بحرانی به حساب بیاد. حالا تو پروژههایی که مدت زمانشون زیاد باشه و مدت زمان فعالیتهاشون هم خیلی کم نباشه، شناوریهایی مثل یک روز چندان با صفر فرق نمیکنه. به همین خاطر این گزینه هم وجود داره که حداکثر دیگهای برای شناوری تعیین کنین و مثلا بگین که فعالیتهایی که شناوریشون بیشتر از یک روز نباشه بحرانی به حساب میاد.
اگه برنامهتون آزاد نباشه میتونه شناوری منفی هم داشته باشه، که در این صورت منفیها هم بحرانی به حساب میان. البته میدونین که بهتره از برنامههای غیر آزاد استفاده نکنین و در نتیجه نباید انتظار شناوری منفی داشته باشین.
تو روش دوم به جای شناوری کل، از شناوری روابط برای تعیین «طولانیترین مسیر» و به دنبال اون فعالیتهای بحرانی استفاده میشه. هر رابطه بر اساس تفاضل تاریخهای پیشنیاز و پسنیازش مقداری داره که به اون هم میگیم شناوری. اگه شناوری صفر باشه، به رابطه حاکم (driver) گفته میشه. معمولا بین تمام روابطی که برای یه فعالیت تعریف شده فقط یکیشون حاکمه. اگه همه روابط رو به جز رابطه حاکم حذف کنین، زمانبندیتون تغییری نمیکنه. با این حال باید روابط غیر حاکم رو خیلی با دقت وارد کنین، چون هم روی شناوریها اثر میذاره و هم اینکه ممکنه بعد از مدتی به خاطر وارد کردن مقدارهای واقعی وضعیت تغییر کنه و رابطه دیگهای حاکم بشه.
به هر حال، کار از انتهای برنامه شروع میشه. فعالیت انتهایی به عنوان آخرین عنصر «طولانیترین مسیر» انتخاب میشه و بعد مسیر بر اساس روابط حاکم دنبال میشه و فعالیتهای دیگه دونه دونه انتخاب میشن. مجموعه این فعالیتها میشن طولانیترین مسیر برنامه و میتونن بحرانی به حساب بیان.
پس مسیر بحرانی میتونه بر اساس شناوری فعالیتها یا بر اساس شناوری روابط (قرار داشتن تو طولانیترین مسیر) تعیین بشه. این دو روش تو شبکههای خیلی ساده، مشابه اون چیزهایی که برای توضیح دادن تئوری CPM به کار میرن نتیجه یکسانی داره، ولی تو برنامههای پیچیدهای که تو پروژههای واقعی داریم، به خاطر قیدهایی که ممکنه استفاده شده باشه، به خاطر تسطیح منابع، به خاطر تقویمها و خیلی مسایل دیگه ممکنه تفاوتهایی بین نتایج اونها وجود داشته باشه.
نظرهای متفاوتی وجود داره که کدوم روش بهتره. انتخاب ممکنه تا حدی به سبک برنامهریزی هم برگرده؛ ولی به هر حال من شخصا روش مبتنی بر شناوری فعالیتها رو ترجیح میدم، چون سادهتر با المانهایی مثل تقویم و تسطیح و قید کارش رو پیش میبره.