function task = MTSO(Tasks, N, T, rmp,nRepeat,ntasks) if mod(N, 2) ~= 0 N = N + 1; end no_of_tasks = ntasks; if no_of_tasks <= 1 error('At least 2 tasks required for MFEA'); end D = zeros(1, no_of_tasks); for i = 1:no_of_tasks D(i) = Tasks.D(i); end D_multitask = max(D); %options = optimoptions(@fminunc, 'Display', 'off', 'Algorithm', 'quasi-newton', 'MaxIter', 2); % settings for individual learning %bestobj = Inf(1, no_of_tasks); for rep = 1:nRepeat %initial tic vec_flag=[1,-1]; Threshold=0.23; Thresold2= 0.45; C1=0.5; C2=.05; C3=2; Z=3000; CLS=ch(1,Z); HMCR=0.95; PAR=0.4; u=0.005; VarSize=[1 D_multitask]; pCR=0.2; beta_min=0.2; % Lower Bound of Scaling Factor beta_max=0.8; for k=1:no_of_tasks Task(k).fobj=Tasks.Fnc{k}; UB(k,:)=Tasks.Ub{k}(1:D_multitask); LB(k,:)=Tasks.Lb{k}(1:D_multitask); range(k,:)=UB(k,:)-LB(k,:); Task(k).X = repmat(LB(k,:),N,1)+rand(N,D_multitask).* repmat((UB(k,:)-LB(k,:)),N,1); for i=1:N %Task(k).fitness(i)=feval(Task(k).fobj,Task(k).X(i,:),Tasks.Amax(k), Tasks.Lmax(k)); Task(k).fitness(i)=Task(k).fobj(Task(k).X(i,:)); end [GYbest(k), gbest(k)] = min(Task(k).fitness); Task(k).Xfood = Task(k).X(gbest(k),:); %Diving the swarm into two equal groups males and females Nm=round(N/2);%eq.(2&3) Nf=N-Nm; Task(k).Xm=Task(k).X(1:Nm,:); Task(k).Xf=Task(k).X(Nm+1:N,:); Task(k).fitness_m=Task(k).fitness(1:Nm); Task(k).fitness_f=Task(k).fitness(Nm+1:N); [Task(k).fitnessBest_m, Task(k).gbest1] = min(Task(k).fitness_m); Task(k).Xbest_m = Task(k).Xm(Task(k).gbest1,:); [Task(k).fitnessBest_f, Task(k).gbest2] = min(Task(k).fitness_f); Task(k).Xbest_f = Task(k).Xf(Task(k).gbest2,:); end for t = 1:T for k=1:no_of_tasks Temp=exp(-((t)/T)); %eq.(4) Q=C1*exp(((t-T)/(T)));%eq.(5) if Q>1 Q=1; end % Exploration Phase (no Food) if QThresold2 %hot for i=1:Nm flag_index = floor(2*rand()+1); Flag=vec_flag(flag_index); for j=1:1:D_multitask Task(k).Xnewm(i,j)=Task(k).Xfood(j)+C3*Flag*Temp*rand*(Task(k).Xfood(j)-Task(k).Xm(i,j));%eq.(10) end end for i=1:Nf flag_index = floor(2*rand()+1); Flag=vec_flag(flag_index); for j=1:1:D_multitask Task(k).Xnewf(i,j)=Task(k).Xfood(j)+Flag*C3*Temp*rand*(Task(k).Xfood(j)-Task(k).Xf(i,j));%eq.(10) end end else %cold if rand>0.6 %fight for i=1:Nm for j=1:1:D_multitask FM=exp(-(Task(k).fitnessBest_f)/(Task(k).fitness_m(i)+eps));%eq.(13) Task(k).Xnewm(i,j)=Task(k).Xm(i,j) +C3*FM*rand*(Q*Task(k).Xbest_f(j)-Task(k).Xm(i,j));%eq.(11) end end for i=1:Nf for j=1:1:D_multitask FF=exp(-(Task(k).fitnessBest_m)/(Task(k).fitness_f(i)+eps));%eq.(14) Task(k).Xnewf(i,j)=Task(k).Xf(i,j)+C3*FF*rand*(Q*Task(k).Xbest_m(j)-Task(k).Xf(i,j));%eq.(12) end end else%mating for i=1:Nm for j=1:1:D_multitask Mm=exp(-Task(k).fitness_f(i)/(Task(k).fitness_m(i)+eps));%eq.(17) Task(k).Xnewm(i,j)=Task(k).Xm(i,j) +C3*rand*Mm*(Q*Task(k).Xf(i,j)-Task(k).Xm(i,j));%eq.(15 end end for i=1:Nf for j=1:1:D_multitask Mf=exp(-Task(k).fitness_m(i)/(Task(k).fitness_f(i)+eps));%eq.(18) Task(k).Xnewf(i,j)=Task(k).Xf(i,j) +C3*rand*Mf*(Q*Task(k).Xm(i,j)-Task(k).Xf(i,j));%eq.(16) end end flag_index = floor(2*rand()+1); egg=vec_flag(flag_index); if egg==1; [Task(k).GYworst, Task(k).gworst] = max(Task(k).fitness_m); rand_leader_index1 = floor(Nm*rand()+1); rand_leader_index2 = floor(Nm*rand()+1); X_randm1 = Task(k).Xm(rand_leader_index1, :); X_randm2 = Task(k).Xm(rand_leader_index2, :); beta=unifrnd(beta_min,beta_max,VarSize); m=Task(k).Xbest_m+beta.*(X_randm1-X_randm2); % rand_leader_index = floor(Nm*rand()+1); % X_randm = Xm(rand_leader_index, :); z=zeros(size(X_randm1)); j0=randi([1 D_multitask]); for j=1:D_multitask if j==j0 || rand<=pCR z(j)=Task(k).Xbest_m(j); else z(j)=m(j); end end Task(k).Xnewm(Task(k).gworst,:)=z;%eq.(19) %Task(k).Xnewm(Task(k).gworst,:)=repmat(LB(k,:),1,1)+rand(1,D_multitask).* repmat((UB(k,:)-LB(k,:)),1,1); %eq.(19) [Task(k).GYworst, Task(k).gworst] = max(Task(k).fitness_f); rand_leader_index1 = floor(Nf*rand()+1); rand_leader_index2 = floor(Nf*rand()+1); X_randf1 = Task(k).Xf(rand_leader_index1, :); X_randf2 = Task(k).Xf(rand_leader_index2, :); beta=unifrnd(beta_min,beta_max,VarSize); m=Task(k).Xbest_f+beta.*(X_randf1-X_randf2); % rand_leader_index = floor(Nf*rand()+1); % X_randf = Xf(rand_leader_index, :); a=zeros(size(X_randf1)); j0=randi([1 D_multitask]); for j=1:D_multitask if j==j0 || rand<=pCR a(j)=Task(k).Xbest_f(j); else a(j)=m(j); end end Task(k).Xnewf(Task(k).gworst,:)=a;%eq.(20) %Task(k).Xnewf(Task(k).gworst,:)=repmat(LB(k,:),1,1)+rand(1,D_multitask).* repmat((UB(k,:)-LB(k,:)),1,1);%eq.(20) end end end end for j=1:Nm Flag4ub=Task(k).Xnewm(j,:)>UB(k); Flag4lb=Task(k).Xnewm(j,:)UB(k); Flag4lb=Task(k).Xnewf(j,:)UB(k,z); Flag4lb=XFood(z)UB(k,:); % Flag4lb=XFoodUB(k,z); Flag4lb=Task(k).XX_elite1(i,z)UB(k,:)||Task(k).XX_elite1(i,:)UB(k,:); % Flag4lb=Task(k).XX_elite1(i,:)UB(k,z); Flag4lb=Task(k).XXnew(z)UB(k,:)||Task(k).XXnewUB(k,:); % Flag4lb=Task(k).XXnewUB(k,z); flag4lb = Task(k).Xnew(z)