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

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

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

 

تابع اصلی برنامه main است که با اجرای آن حل مسئله فلوشاپ با روش بهینه سازی ژنتیک انجام میشود.

خطوط اول در این تابع مقادیر اولیه را مقدار دهی میکند

% initial value

    n = 5 ; % number of works

    nj = round(rand(n,1)*10)+1; % number of detail works

    g = 4; % steps number

    mt = round(rand(g,1)*5)+1; % machine number in station

   

  %  C = rand(n,max(nj),g)*1000; % time cost

    CO = rand(n,max(nj),g) * 100; % cost per work

   

    P = rand(n,max(nj),g) * 100; % process time

    d = round(rand(n,1) * 100) ; % delivery time for every job

    S = rand(n,n,g)*20 ; % setting work

   

خط اول تعداد کارها رو مشخص میکند

خط دوم تعداد زیر کارهای هر کار

خط سوم تعداد ایستگاه ها

خط چهارم تعداد ماشین در ایستگاه

خط پنجم هزینه تاخیر را مقدار دهی میکند

P  هزینه پردازش d زمان تحویل s زمان تنظیمات

تمامی نام پارامترها مبتنی بر مستند است.

در خطوط زیر جمعیت اولیه الگوریتم ژنتیک با تعداد 10 جمعیت اولیه مقدار دهی میشود و با فراخوانی تابع init_pop جمعیت اولیه الگوریتم ایجاد میشود

% initial population

    num_pop = 10 ;

    X = init_pop(num_pop,n,mt,g);

   

 

در تابع init_pop  جایگشت های متنوع انجام کارها تولید میشود و در ماتریس پاسخ X مقدار دهی میشود

ماتریس X پنج بعدی است که بعد اول تعداد جمعیت بعد دوم کار j بعد سوم اندیس ماشین l بعد چهارم k اندیس کار و i هم اندیس ایستگاه هاست.

تمامی اندیس گزاری ها در پیاده سازی مبتنی بر مستند است.

X = zeros(num,n,max(mt),n,g);

    for number =1 : num

        for i = 1 :g

            series = randperm(n);

            for idx = 1: n-1

                j = series(1,idx+1);

                k = series(1,idx);

                l = round(rand(1,1)*(mt(i)-1))+1;

                X(number,j,l,k,i)=1;

            end

            % last to one

            j = series(1,1);

            k = series(1,n);

            l = round(rand(1,1)*(mt(i)-1))+1;

            X(number,j,l,k,i)=1;

        end

    end

 

 

در خطوط بعد از تابع main تعداد نسل در الگوریتم ژنتیک تعیین میشود

  gen_num = 5 ;

 

و در ازای گذشت نسل ها مراحل زیر انجام میشود

for gen = 1 : gen_num

        % cross over

        newX = cross_over(X);

        % mutation

        newX = mutation(newX);

       

       

        % evalution

        X = merge(X,newX);

       

        X = valid_pop(X) ;

       

        eval = evalution(X,nj,P,S,CO,d);

       

        % remove

        X = remove(X,eval);

    end

   

ابتدا cross over بین جمعیت اتفاق میافتد و جمعیت ایجاد شده جهش داده میشود

سپس جمعیت موجود و فرزندان باهم ترکیب میشوند و تابع valid_pop معتبر بودن پاسخ ها رو چک و در صورت عدم اعتبار انها را معتبر سازی میکند

در نهایت تابع evaluation جمعیت را ارزیابی میکند و تابع remove مقادیر کمتر بهینه جمعیت را حذف میکند.

در نهایت پاسخ مطلوب با کد زیر نمایش داده میشود.

[val idx] = min(sum(eval));

    disp(max(sum(eval(idx,:,:))));

    X(idx,:,:,:,:)