⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devec3.m

📁 模式识别工具箱。非常丰富的底层函数和常见的统计识别工具
💻 M
📖 第 1 页 / 共 2 页
字号:
        ibest   = i;                 % save its location        bestval = val(i);    endendbestmemit = pop(ibest,:);         % best member of current iterationbestvalit = bestval;              % best value of current iterationbestmem = bestmemit;              % best member ever%------DE-Minimization---------------------------------------------%------popold is the population which has to compete. It is--------%------static through one iteration. pop is the newly--------------%------emerging population.----------------------------------------pm1 = zeros(NP,D);              % initialize population matrix 1pm2 = zeros(NP,D);              % initialize population matrix 2pm3 = zeros(NP,D);              % initialize population matrix 3pm4 = zeros(NP,D);              % initialize population matrix 4pm5 = zeros(NP,D);              % initialize population matrix 5bm  = zeros(NP,D);              % initialize bestmember  matrixui  = zeros(NP,D);              % intermediate population of perturbed vectorsmui = zeros(NP,D);              % mask for intermediate populationmpo = zeros(NP,D);              % mask for old populationrot = (0:1:NP-1);               % rotating index array (size NP)rotd= (0:1:D-1);                % rotating index array (size D)rt  = zeros(NP);                % another rotating index arrayrtd = zeros(D);                 % rotating index array for exponential crossovera1  = zeros(NP);                % index arraya2  = zeros(NP);                % index arraya3  = zeros(NP);                % index arraya4  = zeros(NP);                % index arraya5  = zeros(NP);                % index arrayind = zeros(4);iter = 1;while (bestval > VTR & iter < itermax)    popold = pop;                   % save the old population    ind = randperm(4);              % index pointer array    a1  = randperm(NP);             % shuffle locations of vectors    rt = rem(rot+ind(1),NP);        % rotate indices by ind(1) positions    a2  = a1(rt+1);                 % rotate vector locations    rt = rem(rot+ind(2),NP);    a3  = a2(rt+1);    rt = rem(rot+ind(3),NP);    a4  = a3(rt+1);    rt = rem(rot+ind(4),NP);    a5  = a4(rt+1);    pm1 = popold(a1,:);             % shuffled population 1    pm2 = popold(a2,:);             % shuffled population 2    pm3 = popold(a3,:);             % shuffled population 3    pm4 = popold(a4,:);             % shuffled population 4    pm5 = popold(a5,:);             % shuffled population 5    for i=1:NP                      % population filled with the best member        bm(i,:) = bestmemit;          % of the last iteration    end    mui = rand(NP,D) < CR;          % all random numbers < CR are 1, 0 otherwise    if (strategy > 5)        st = strategy-5;		  % binomial crossover    else        st = strategy;		  % exponential crossover        mui=sort(mui');	          % transpose, collect 1's in each column        for i=1:NP            n=floor(rand*D);            if n > 0                rtd = rem(rotd+n,D);                mui(:,i) = mui(rtd+1,i); %rotate column i by n            end        end        mui = mui';			  % transpose back    end    mpo = mui < 0.5;                % inverse mask to mui    if (st == 1)                      % DE/best/1        ui = bm + F*(pm1 - pm2);        % differential variation        ui = popold.*mpo + ui.*mui;     % crossover    elseif (st == 2)                  % DE/rand/1        ui = pm3 + F*(pm1 - pm2);       % differential variation        ui = popold.*mpo + ui.*mui;     % crossover    elseif (st == 3)                  % DE/rand-to-best/1        ui = popold + F*(bm-popold) + F*(pm1 - pm2);        ui = popold.*mpo + ui.*mui;     % crossover    elseif (st == 4)                  % DE/best/2        ui = bm + F*(pm1 - pm2 + pm3 - pm4);  % differential variation        ui = popold.*mpo + ui.*mui;           % crossover    elseif (st == 5)                  % DE/rand/2        ui = pm5 + F*(pm1 - pm2 + pm3 - pm4);  % differential variation        ui = popold.*mpo + ui.*mui;            % crossover    end    for i=1:D        tl = find(ui(:,i) < XVmin(i));        tu = find(ui(:,i) > XVmax(i));        ui(tl,i) = (XVmin(i) + pop(tl,i))/2;        ui(tu,i) = (XVmax(i) + pop(tu,i))/2;    end;%     for i=1:length(a4)/2%         k1  = a4((i-1) * 2 + 1);%         k2  = a4(i * 2);%         e1 = norm(pop(k1,:) - ui(k1,:)) + norm(pop(k2,:) - ui(k2,:));%         e2 = norm(pop(k1,:) - ui(k2,:)) + norm(pop(k2,:) - ui(k1,:));%         if (e1 < e2)%             tempval = feval(fname,ui(k1,:),y);   % check cost of competitor%             nfeval  = nfeval + 1;%             if (tempval <= val(k1))  % if competitor is better than value in "cost array"%                 pop(k1,:) = ui(k1,:);  % replace old vector with new one (for new iteration)%                 val(k1)   = tempval;  % save value in "cost array"% %                 %----we update bestval only in case of success to save time-----------%                 if (tempval < bestval)     % if competitor better than the best one ever%                     bestval = tempval;      % new best value%                     bestmem = ui(k1,:);      % new best parameter vector ever%                 end%             end% %             tempval = feval(fname,ui(k2,:),y);   % check cost of competitor%             nfeval  = nfeval + 1;%             if (tempval <= val(k2))  % if competitor is better than value in "cost array"%                 pop(k2,:) = ui(k2,:);  % replace old vector with new one (for new iteration)%                 val(k2)   = tempval;  % save value in "cost array"% %                 %----we update bestval only in case of success to save time-----------%                 if (tempval < bestval)     % if competitor better than the best one ever%                     bestval = tempval;      % new best value%                     bestmem = ui(k2,:);      % new best parameter vector ever%                 end%             end%         else%             tempval = feval(fname,ui(k1,:),y);   % check cost of competitor%             nfeval  = nfeval + 1;%             if (tempval <= val(k2))  % if competitor is better than value in "cost array"%                 pop(k2,:) = ui(k1,:);  % replace old vector with new one (for new iteration)%                 val(k2)   = tempval;  % save value in "cost array"% %                 %----we update bestval only in case of success to save time-----------%                 if (tempval < bestval)     % if competitor better than the best one ever%                     bestval = tempval;      % new best value%                     bestmem = ui(k1,:);      % new best parameter vector ever%                 end%             end% %             tempval = feval(fname,ui(k2,:),y);   % check cost of competitor%             nfeval  = nfeval + 1;%             if (tempval <= val(k1))  % if competitor is better than value in "cost array"%                 pop(k1,:) = ui(k2,:);  % replace old vector with new one (for new iteration)%                 val(k1)   = tempval;  % save value in "cost array"% %                 %----we update bestval only in case of success to save time-----------%                 if (tempval < bestval)     % if competitor better than the best one ever%                     bestval = tempval;      % new best value%                     bestmem = ui(k2,:);      % new best parameter vector ever%                 end%             end%         end;%     end;            %-----Select which vectors are allowed to enter the new population------------  for i=1:NP    tempval = feval(fname,ui(i,:),y);   % check cost of competitor%       tempval= feval(fname, ui(i,:), ode_ind, m, u, y, x, xmask,fs,fValue);    nfeval  = nfeval + 1;    if (tempval <= val(i))  % if competitor is better than value in "cost array"       pop(i,:) = ui(i,:);  % replace old vector with new one (for new iteration)       val(i)   = tempval;  % save value in "cost array"       %----we update bestval only in case of success to save time-----------       if (tempval < bestval)     % if competitor better than the best one ever          bestval = tempval;      % new best value          bestmem = ui(i,:);      % new best parameter vector ever       end    end  end %---end for imember=1:NP      bestmemit = bestmem;       % freeze the best member of this iteration for the coming    % iteration. This is needed for some of the strategies.    %----Output section----------------------------------------------------------    if (refresh > 0)        if (rem(iter,refresh) == 0)            fprintf(1,'Iteration: %d,  Best: %f,  F: %f,  CR: %f,  NP: %d\n',iter,bestval,F,CR,NP);            for n=1:D                fprintf(1,'best(%d) = %f\n',n,bestmem(n));            end        end    end    iter = iter + 1;    if (FunCount >= 8e5)        return;    end;end %---end while ((iter < itermax) ...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -