سه شنبه, ۱۷ دی ۱۳۹۸، ۱۲:۲۰ ب.ظ
نحوه نوشتن یک تابع فیتنس(making a fitness function )
برداشت کلی این است که نوشتن یک تابع فیتنس عموما با الگوریتمهای فراابتکاری معنی پیدا میکند، با این وجود یک تابع فیتنس چیزی نیست جز انتخاب جواب های بهینه از بین مجموعههایی که به شکل تصادفی، حریصانه... انتخاب میشوند. تابع فیتنس میتواند از نوع مینیمم، ماکزیمم یا همگرا به سمت مقادیر یا بردارها و... باشد.
به عنوان یک مثال ساده برای تابع فیتنس برای ماکزیمم سازی را میتوان به شکل زیر اورد.
فقط حواستون باشه، برای نوشتن تابع فیتنس برای مینیمم سازی باید مقدار اولیه بردار پاسخ را برابر بی نهایت یا inf قرار بدید و برای ماکزیمم سازی این مقدار را برابر با 0 یا حداقل مقدار قرار بدید.
clc clear; close all; [X,Y,Z] = peaks(100); [val,ind]=min(Z(:)); v.val=val; v.ind=ind; cn=0; hs=figure('name' , ['period: ' num2str(cn) ' of ' num2str((length(X(:))) ) ' curen value: ' num2str(v.val(end)), ' real max value: ' num2str( max(Z(:)))] ); subplot(1,2,1);surf(X,Y,Z);hold on subplot(1,2,1);plot3(X(ind),Y(ind),Z(ind),'r*');hold on while(true) ind= randi(length(X(:)),1); if v.val(end)<Z(ind) v.val(end+1)=Z(ind); v.ind(end+1)= ind ; subplot(1,2,1);plot3(X(v.ind),Y(v.ind),Z(v.ind),'r*');hold on ; subplot(1,2,2);plot3(X(v.ind),Y(v.ind),Z(v.ind),'r-*');hold on else disp(''); end cn=cn+1; pause(0.002) if cn>=length(X(:)) || v.val(end)==max(Z(:)) break; end hs.Name=['period: ' num2str(cn) ' of ' num2str((length(X(:))) ) ' curen value: ' num2str(v.val(end)), ' real max value: ' num2str( max(Z(:)))]; end
خروجی کد بالا به شکل زیر خواهد بود:
۹۸/۱۰/۱۷