همیشه میگويیم شناوری کل مدت زمانیه که اگه فعالیت به اون اندازه به تاخیر بیفته تاریخ پایان پروژه رو به تاخیر نمیندازه. این تعریف خیلی قدیمیه و باید تعریف کاملتری به جاش به کار ببریم.
چیزی که تو تعیین شناوری موثره صرفا تاریخ پایان پروژه نیست؛ تاریخهای مهم پروژه است. شناوری مدت زمانیه که اگه فعالیت به اون اندازه به تاخیر بیفته، هیچکدام از تاریخهای مهم پروژه به تاخیر نمیافتند.
تاریخهای مهم اینها هستند:
تاریخ پایان پروژه
تاریخ پایان فعالیتهایی که پسنیاز ندارند (توضیح 1)
فرجهها
تاریخ قیدهایی که انعطافپذیر نیستند
توضیح 1: وقتی تاریخ پایان فعالیتهایی که پسنیاز ندارند در تعیین شناوریها مبنا قرار میگیره که گزینه Calculate Multiple Critical Tasks رو در Tools| Options| Calculation فعال کرده باشيد.
حالا ماجرا رو با هم مرور میکنیم. برنامه شکل زیر رو ببینيد:
تو این برنامه سه گروه فعالیت تعریف شده است. هر گروه دو فعالیت دارد که با هم لینک هستند. میشد مسئله رو روی فعالیتهای تکی هم نشون داد، ولی ما از گروههای دوتایی استفاده کرديم تا سرایت کردن شناوریها رو به عقب هم نشان داده شود. برای هرکدام از این سه گروه نقشههایی کشیديم.
گروه اول طولانیترین مدت زمانها را دارند و به همین خاطر بحرانی شدند. فعالیتهای بحراني در این نما با رنگ قرمز دیده میشوند. شناوری کل فعالیتها هم با خطهای سبز رنگ باریک نشان داده شدند. الان چهار تا فعالیت آخر شناوری کل دارند. مقدار شناوری کل رو میتوانید در جدول هم ببینید.
برای فعالیت چهارم فرجهای در پایان روز 9 قرار میدهيم. وضعیت اینطوری میشود:
فرجه میگويد که فعالیت باید تا اون موقع تمام شده باشد، پس منطقیه که برنامه شناوری را طوری تنظیم کند که فعالیت از اون تاریخ نگذرد. به عبارت دیگر به فرجه اهمیتی در حد تاریخ پایان پروژه بدهد. حالا نگاهی به شناوری فعالیت سوم بندازيد، متوجه شدید که چه اتفاقی افتاد؟ کم شدن شناوری فعالیت چهارم به پیشنیازش هم سرایت کرد.
حالا به فعالیت ششم قید Finish No Later Than برای پایان روز نهم میدهيم:
در این حالت هم شناوری فعالیت ششم و پیشنیازش به طور متناسب کم شد. واقعیت اینه که چنین قیدی تفاوت چندانی با فرجه نداشت.
حالا به شکل بالایی نگاه کنيد و تصور کنيد که وقتی فرجه را به پایان روز هشتم بکشیم. شناوری فعالت چهارم چقدر میشود؟ اگر اون رو به پایان روز هفتم بکشیم چطور؟ بله، در این حالت شناوری کل فعالیت صفر میشود و اون فعالیت همراه با پیشنیازش بحرانی میشوند.
حالا باز هم تصور کنید که فرجه رو عقبتر بکشیم، مثلا پایان روز ششم. در این حالت شناوری فعالیت چقدر میشود؟
این هم همون شناوری منفیه ! مفهوم پیچیدهای نیست، هست؟
تو این وضعیت فعالیت چهارم اگه طبق برنامه پیش برود هم یکی از تاریخهای مهم پروژه یک روز به تاخیر میافتد، یعنی فعالیت باید یک روز کمتر از برنامه وقت ببره تا تاریخ حفظ بشه. یک روز کمتر، یعنی شناوری منفی یک.
حالا فرض کنید تاریخ قید فعالیت ششم که قبلا پایان روز نهم بود رو تبدیل کنیم به پایان روز پنجم. قبل از اینکه به شکل نگاه کنید سعی کنید وضعیت را در ذهنتان به تصویر بکشید. خوب، این کار رو کرديد؟ این هم وضعیت برنامه:
خوب، اگه تصورتان اشتباه بود ناراحت نباشید، به هر حال اگه مسئله خیلی سادهای بود اینجا توضیحش نمیداديم. الان در سومین گروه فعالیتها تناقض وجود دارد. رابطهای که بین فعالیتهای پنجم و ششم وجود دارد رابطه FS سادهای، بدون همپوشانیه، که ایجاب میکند T6 زودتر از روز پنجم شروع نشود، یعنی همان چیزی که در شکلهای قبلی میدیديد. حالا ما قیدی به این فعالیت دادیم که حکم میکنه فعالیت بعد از روز چهارم شروع نشود. این یعنی تناقض.
وقتی بین قید و روابط تناقض وجود داشته باشه تکلیف چیست؟
پیشفرض اين است که قید مبنا قرار بگیرد.
حالا میتوانید برويد در منوي Tools| Options| Schedule و گزینه Tasks will always honor their constraint dates را غیر فعال کنید. حالا اگه تناقضی بین قید و روابط وجود داشته باشد اولویت به روابط داده میشود. این هم میشود وضعیت همان برنامه قبلی، بعد از تغییر تنظیم:
خوب، حالا ما قید و فرجه رو برمیداريم، یعنی وضعیت برنامه میشود مثل اولین شکلی که دیدید (بد نیست الان برگرديد بالا و نگاهی بهش بيندازید). حالا میريم به Tools| Options| Calculate و گزینه Calculate multiple critical paths را فعال میکنيم. نتیجه این میشود:
اصولا همیشه توصیه میشود که در هر برنامه فقط یک فعالیت بدون پسنیاز باشه، یعنی آخرین فعالیت پروژه. البته بهتره بگویم پسنیاز مستقیم و غیر مستقیم، چون ممکنه فعالیتی خودش پسنیاز نداشته باشه، ولی خلاصه فعالیتش پسنیاز داشته باشه و در نتیجه تاریخ پایان فعالیت غیر مستقیم روی بقیه فعالیتها اثر ميگذارد.
به هر حال؛ اگه بیشتر از یک فعالیت پسنیاز مستقیم یا غیر مستقیم داشته باشند، در حالت معمول به جز یکیشون همه شناوری میگیرند. حالا فرض کنيد پروژهای داریم از 10 بلوک ساختمانی. تاریخ پایان هرکدام از بلوکها پسنیازی ندارد، و در عین حال ترجیح میدهیم که هر بلوک در زودترین زمان ممکن تمام بشود و شناوری برايشان نگذاریم. در این صورت میتوانیم این گزینه رو فعال کنیم، در نتیجه شناوری فعالیتهای آزاد حذف میشود و به پیشنیازهاشون هم منتقل میشود. به این ترتیب احتمالا مسیرهای بحرانی جدیدی هم ایجاد میشود. خوب، این وضعیت رو میتوانيد در شکل بالا هم ببینيد.
خوب، من امیدوارم این مطالب رو به شما منتقل کرده باشم:
تنها تاریخ مقدسی که برای محاسبه شناوریها به کار میره تاریخ پایان پروژه نیست.
شناوری منفی با ……. به وجود میاد. با چی؟
مسیرهای بحرانی متعدد با مقید کردن فعالیتهای آزاد به وجود میاد.