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

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

تابع اصلی برنامه 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,:,:,:,:)

دیدگاه خود را درباره این مقاله با ما به اشتراک بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

در ثبت سفارش خود مشکل دارید؟ 

سفارش خود را از طریق تلگرام و واتس اپ برای ما بفرستید

برای ثبت سفارش در تلگرام کلیک کنید

پروژه آماده لازم دارید ؟ 

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

فروشگاه متلب پروژه