Почему мой генетический алгоритм намного хуже, чем данная начальная популяция?Как настроить параметры для решения этой проблемы? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь использовать Matlab GA (в Global Optimization Toolbox) для решения обобщенной задачи назначения (назначить m агентов для n задач).Чтобы сократить время вычислений, я создал исходную матрицу населения (ММ), которая удовлетворяет ограничениям строк и столбцов, и установил для параметров GA InitialPopulationMatrix значение ММ.

opts = optimoptions(@ga,'InitialPopulationMatrix',MM);

Однако решение ГА гораздо хуже, чем у моей первоначальной популяции.Во-первых, значение пригодности решения GA было 7625, тогда как это значение составляет только 496 в начальной популяции.Во-вторых, решение GA не удовлетворяло большинству ограничений.Кроме того, при увеличении максимальных поколений, решение GA не станет намного лучше, как застрять локально.

Чтобы получить хорошее решение GA, как я могу улучшить свое кодирование, установив некоторые параметры GA?

Моя проблема имеет большой масштаб, то есть m = 60, n = 145,Число двоичных переменных составляет 8700 (60 * 145), а стоимость присваивания является функцией двоичных переменных (что приводит к квадратичной целевой функции).

Ниже приведен основной скрипт:

%Parameter Setting
tic
nvars=8700;
b=[-dli;dui;-sj;sj];
lb=zeros(1,nvars);
ub=ones(1,nvars);
IntCon=[1:nvars];
%build constraint matrix
  %ga evaluates the matrix product A*x as if x is transposed (A*x').
Ar=kron(eye(nShift),ones(1,nCombo));%Summation along rows of Xij can be expressed as a matrix-vector multiplication A1*XijT(:) 
Ac=kron(ones(1,nShift),eye(nCombo));% Summation along columns can be expressed the same way with

  %Note:  for integer programming, Aeq and beq must be empty ([]), so
  %equality contraints are rewritten to si<=Ac<=sj
A=[-Ar;Ar;-Ac;Ac];
nonlcon = [];
MM=IM(dli,dui,sj);
%PopulationSize: Positive integer | {50} whennumberOfVariables <= 5, {200} otherwise |{min(max(10*nvars,40),100)} for mixed-integer problems

opts = optimoptions(@ga, ...
                    'PopulationSize', 20, ...
                    'MaxGenerations', 10000, ...
                    'InitialPopulationRange',[0;1],...
                    'CrossoverFraction',0.9,...
                    'EliteCount',10,...
                    'InitialPopulationMatrix',MM,...
                    'PlotFcn', {@gaplotbestf,@gaplotstopping});

[x,faval,exitflag]=ga(@Obj_f,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,opts)
toc
Time=toc;

Вот Obj_f.m, который я использовал для фитнес-функции

function [TotalV] = Obj_f(x)
%Time halo violation cost of using matrix Xij
nShift=60;
nCombo=145;
t=3;
%Convert the variable vector x to matrices with nCombo columns.
Xij=vec2mat(x,nCombo);
  %Compute cij for the initial xij_Feasible matrix
Cij=[Xij;Xij(1:t-1,:)];%add the remaining t-1 element's cost into matrix Xij
  [m,n]=size(Xij);
  cij=zeros(m,n);

for j=1:nCombo
    for i=1:nShift
        cij(i,j)=sum(Cij((i:i+t-1),j));
    end
end

Violation=cij.*Xij;
TotalV=sum(Violation(:));

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...