About the initial population in Genetic Algorithm Toolbox

2 Ansichten (letzte 30 Tage)
Tony Huang
Tony Huang am 24 Apr. 2013
I have a problem in generating an initial population which meets the constraints in using the Genetic Algorithm Toolbox.
The test problem is as follows:
There are two integral variables x1 and x2. Both of them can only be 0 or 1. The objective function is: z=x1+x2.The constraint is x1+x2<2.
The codes are:
options=gaoptimset('InitialPopulation',[1 0]); A = [ 1 1]; b = 1; lb = zeros(2,1); ub=ones(2,1); intcon=[1 2]; [x,fval,exitflag] = ga(@test,2,A,b,[],[],lb,ub,[],intcon,options);
%******************************************************************** function [y]=test(X) y=-X(1)-X(2); end
To check the initial population generated by the ga toolbox, one line(bold) is added in the file of makeState.m:
% If InitialPopulation is partly empty we will use the creation function to % generate population (CreationFcn can utilize InitialPopulation) if sum(options.PopulationSize) ~= size(options.InitialPopulation,1) % If initial population is empty and we know one feasible individual then % assign it to InitialPopulation if ~isempty(Iterate.x) && isempty(options.InitialPopulation) options.InitialPopulation(1,:) = Iterate.x'; fprintf('makeState: InitialPopulation is not used, Iterate.x\n'); end fprintf('makeState: InitialPopulation is partially used, feval\n'); state.Population = feval(options.CreationFcn,GenomeLength,FitnessFcn,options,options.CreationFcnArgs{:}); assignin('base','InitialPopulationSet',state.Population); % evalin('base','InitialPopulationSet=state.Population');
However, I found a problem with the initial population when x1,x2 are integers(intcon=[1 2]). Some of them do not meet the constraint of x1+x2<2 InitialPopulationSet =
1 0
0 0
0 0
1 0
* 1 1*
1 0
0 0
* 1 1*
0 0
1 0
0 1
1 1
0 1
0 1
0 0
......
When I set intcon=[], which means the constrint of integer is released for x1 and x2, all the initial population meet the constraints: InitialPopulationSet =
1.0000 0
0 0
1.0000 0
0 1.0000
0.2381 0.7619
0.5074 0.4926
0.7263 0.2737
0.3194 0
0 0.2737
1.0000 0
0.2910 0.3516
0.8405 0.0000
0.3612 0.6388
0.5074 0.4926
0.0000 0.0000
......
Can anybody help me to explain why does this situation happen? If the place where I obtain the initial population is wrong, where can I get it correctly?
Thank you very much!
Tony

Antworten (0)

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by