پیشنیازی فعالیت ها در زمان بندی پروژه در گمز

سوالی که تقریبا برای همه ی ما پیش می آید.
◀️ لحاظ کردن پیش نیازی فعالیت ها یا پروژه ها در گمز

فرض کنیم یک پروژه داریم که به تعدادی فعالیت تفکیک می شود. تعدادی از این فعالیت ها پیش نیاز فعالیت های دیگر هستند. مثلا تا فعالیت ۴ به طور کامل انجام نشود، فعالیت ۶ امکان شروع نداشته باشد. این پیش نیازی را می توان با set و یا table در گمز تعریف کرد. که پیشنهاد گمزبوک استفاده از حالت دوم است.
رویه به این شکل است. (فرض کنیم که i فعالیت داریم)
۱- تعریف مجموعه ها
ابتدا باید مجموعه ها تعریف شوند.

sets
i/1*4/;
alias(i,j);

2- تعریف جدول پیش نیازی

pred

 

به عنوان مثال این جدول نشان می دهد که فعالیت ۲ پیش نیاز فعالیت ۳ و ۴ است.
۳- استفاده در محدودیت ها
حال تنها کاری که باید بکنیم این است که در محدودیت هایی که شرط پیش نیازی فعالیت i,j آورده شده است، با استفاده از دستور دلار$ این پیش نیازی را قید کنیم.
مثال:

c1(i,j)$pr(i,j)... c(i)=L=s(j);

درباره نویسنده

19 دیدگاه

  1. یاسمن

    سلام خسته نباشید
    من یک شبکه ای از فعالیت‌ها دارم با ۶ گره که زمان اجرای فعالیت‌ها با (t(i,j نشان داده شده. میخوام در گمز این داده ها رو وارد کنم که مثلا اگر از گره یک به گره دو کمان داشته باشیم `پس زمان اجرای فعالیت (t(1,2 مقدار ۱۰ است این رو چطوری در گمز میتونم بنویسم؟

    1. محمودی

      سلام
      شما t رو اول بیاین با table تعریف کنین. بعد یه arc تعریف کنین که معرف کمان باشه. بعد تو محدودیت ها هر جا لازم بود t رو استفاده میکنین. وقتی شرط arc رو هم لحاظ میکنین، محدودیت و t فقط برای i,j هایی که arcشون برابر با ۱ هست لحاظ میشن.

  2. سجاد

    سلام
    من برای خطی کردن تابع هدفی که حاصل ضرب دو متغیر صفر و یکی x(i,j) & x(kl) d یک Yijkl باینری تعریف کردم.منتها ارور ۱۴۸ و ۱۴۹ میده. برای محدودیت ها هم این ارور رو میده.محدودیت دقیقا همون محدودیت مدل تخصیصه که روی Xij یک سیگمای تک اندیسه که فقط روی j یا i هست.اما ارور میده.ممنون میشم شیوه صحیحش رو بفرمایید.
    اینم قسمت هایی از کدمه

    set i workshops/a,b,c,d,e,f/;
    Alias(i,k);
    set j salons/1*6/;
    Alias(j,l);
    Binary Variable
    X(i,j) Assignment workshop i to salon j;
    
    Binary Variable
    Y(i,j,k,l) Xij * Xkl  ;
             returnback..z=e=sum((i,j,k,l),C(j,l)*V(i,k)*Y(i,j,k,l));
             linearation..Y(i,j,k,l)=g=(X(i,j)+100000((X(k,l)-1));
             assignment1..sum(i,X(i,j)))=e=n;
             assignment2..sum(j,X(i,j)))=e=n;
    
    1. محمودی

      سلام
      حداقل تغییری که باید بدین اینه که:

      Y(i,j,k,l), Xij , Xkl  ;
      
  3. پارازیت

    سلام و وقت بخیر خدمت شما
    آقا سایتتون عالیه.همین که جواب کامنتا رو با حوصله میدید حرف نداره خیلی ممنونم.خاستم تشکر کنم بابت سایتتون
    کلا بگم : پشماااااااااام ریخت حاجی

  4. مهدی

    با عرض سلام و ادب

    یک شبکه پروژه داریم که روابط پیشنیازی نیز مابین آنها حاکم است رویداها شروع و پایان فعالیت ها به ترتیب به صورت i و j هستند ( مرتبط با فعالیت های ij ) از آنجا که مجموعه ما به صورت m:1,2,…i,….,j,….M در مقاله مورد بررسی تعریف شده است و اینکه یکی از توابع هدف مساله شامل حداقل کردن زمان کل پروژه Ym (وای اندیس ام کوچک) می باشد که آن را به صورت حداقل کردن آخرین رویداد شبکه پروژه نیز نشان می دهند.
    ممنون می شوم دوست گرامی در خصوص تعریف مجموعه های حاضر و نوع قید روابط پیش نیازی راهنمایی نمائید.

    1. محمودی

      سلام
      شما برای M نیازی نیست چیزی تعریف بکنید.
      i رو تعریف کنین به عنوان مجموعه، j رو هم بهش آلیاس کنین.
      y(i رو تعریف کنین به عنوان متغیر پیوسته.
      توی تابع هدف به جای y(m بنویسین. y(‘i10’) یا بنویسین:

      y(i)$(ord(i) = card(i));
      

      فرض کردیم که ۱۰ تا فعالیت داشته باشیم.

  5. سیدی

    با سلام خدمت دوستان
    بنده یک سئوال تخصصی داشتم و آن اینکه در مدلسازی زمانبندی کارگاهی انعطاف پذیر چگونه می توان نحوه توالی و تخصیص ماشین ها(با زمان های پردازش مختلف) را کد کرد بعنوان مثال: اگر job1 دارای ۵ عملیات(O) باشد و ۴ ماشین(M) داشته باشیم و ترتیب عملیات روی ماشین ها بصورت زیر باشد: (O11) یعنی عملیات اول روی ماشین اول
    O11-O22-O33-O42-O54
    دقت کنید که عملیات ۲ و ۴ روی ماشین ۲ پردازش شده اند.
    اگر نمونه فایل کد گمز در زمینه FJS داشته باشید و برام ارسال کنید. بسیار خوشحال خواهم شد.
    پیشاپیش از راهنمائی هایتان سپاسگزارم.

    1. محمودی

      سلام
      فکر کنم در کانال چنین مطلبی رو نوشتیم. خیلی هم مهم هست این مسئله.

      1. سیدی

        سلام
        من کانال رو هم جستجو کردم ولی چیزی پیدا نکردم اگه براتون ممکنه راهنمائی بفرمائید.
        متشکرم

        1. محمودی

          سلام
          یه ایمیل به ایمیل سایت بزنین. یه نمونه کد براتون بفرستم. توضیحش خیلی زیاده.

  6. داود مطیعی

    با سلام و عرض ادب
    در مورد مقایسه فراابتکاری مدل های چندهدفه با گمز یه سوال داشتم
    چه جوری میشه جبهه پارتو فراابتکاری رو با گمز در ابعاد کوچک برای مقالات مقایسه کرد؟ در گمر هم میشه جبهه پارتو داشت؟ بخ چه نحوی ممکنه برای مدل چند هدفه در گمز این کارو کرد؟ ممنون میشم که وقت میزارید.

    1. محمودی

      سلام
      بله میشه داشت. از روشایی نظیر محدودیت eps میشه استقاده کرد.
      برا مقایسه فقط روند از روی نمودار با هم مقایسه میشن.

  7. رحیم

    مهندس در این کد که مربوط به زمانبندی قطعات هست z متغیر صفر ویک هست.بعداز حل در جواب تعداد یک های بیشتری از تعداد عملیات های ورودی را نشان می دهد ؟

    Equ10(j,o,o1,i,i1) $ (ord(o)<=3 and ord(o1)=ord(o)+1)      ..             CT(j,o1,i1)- CT(j,o,i)=g=Tj(j,o1,i1) ;
    Equ11(j,j1,o,o1,i) $ (ord(j)ord(j1)and ord(o)ord(o1))  ..             CT(j1,o1,i)- CT(j,o,i)+A*(1-Z(j,i,o,o1))=g=Tj(j,o,i) ;
    Equ12(j,j1,o,o1,i) $ (ord(j)ord(j1)and ord(o)ord(o1))  ..             CT(j,o,i)-CT(j1,o1,i)+A*(Z(j,i,o,o1))=g=Tj(j1,o1,i) ;
    Equ13(j,o,i)                                               ..             CT(j,o,i)=g=Tj(j,o,i);
    
    1. محمودی

      سلام
      اینو دیگه باید تحلیل کنین و بنده متاسفانه نمیتونم کمکی بکنم. قطعا یک اشتباه در مدلسازی یا کد نویسی وجود داره.

  8. علیرضا

    با سلام و احترام
    نمونه ای از زمانبندی پروژه با فعالیت های چند حالته در مسائل است که توی این مدل علاوه بر محدودیت های پیش نیازی که توضیحش رو دادید، یک یا چند فعالیت می توانند به شیوه های دیگری(مثلا دستی یا ماشینی) نیز انجام شوند که منطقا زمان آنها متفاوت است. چند حالته بودن فعالیت ها رو چطور برای گمز تعریف کنیم با توجه به اینکه هدف مسئله حداقل کردن زمان اتمام پروژه است و اینکه منطقا یک شیوه انجام فعالیت از بین حالت های مختلف آن انتخاب میشه؟ یک سوال دیگه هم داشتم . بحث محدودیت منابع رو چطور وارد زمان بندی پروژه در گمز بکنیم. ممنون میشم راهنمایی کنید.

    1. محمودی

      سلام
      برای حالت مختلف کافیه که جاهایی که لازمه (برای ورودی های و یا متغیرها) یک اندیس m اضافه کنین. که m حالات مختلف انجام هست و با دستور set تعریف میشه. سوال دوم رو هم بهش میگن RCPSP
      این یه مقاله مفید

  9. علیرضا

    ممنون میشم اگر نمونه کدی از RCPSP دارید برام ایمیل کنید

دیدگاهی دارید؟