Issue with PopulationSize in Genetic Algorithm toolbox

47 visualizzazioni (ultimi 30 giorni)
There is a project I wanted to use the genetic algorithm tools on and attempted to rig a basic script to test it out. However, I could not run the code because it kept giving me the following error.
Error using gaoptimset>checkfield (line 436)
Invalid value for OPTIONS parameter PopulationSize: must be a positive numeric (not a character vector).
I didn't understand where I had specified PopulationSize as a character vector, so I used optimoptions to change PopulationSize to 50 manually. However it kept throwing me the same error.
When stepped through the program, I entered ga() and found that the default value for PopulationSize is the character vector '50 when numberOfVariables <= 5, else 200' which obviously isn't a numeric value. In any case, this value is supposed to be overridden when optimoptions is used to specify a value other than the default, but it didn't.
Am I doing something wrong or is the genetic algorithm solver broken? Code is as follows.
Further details is that I am doing this on my laptop with a copy of MATLAB R2024b downloaded on it. I have the Global Optimization toolbox installed.
% Testing Genetic Algorithm
clc, clear, close all
rng default % For reproducibility
numberOfVariables = 2;
lb = [-3,-3];
ub = [3,3];
a = 0.1;
b = 0.05; % define constant values
FitnessFunction = @(x) test_fitness(x,a,b);
options = optimoptions("ga",PopulationSize=50);
[x,fval] = ga(FitnessFunction,2,[],[],[],[],lb,ub,[],options);
  4 Commenti
Torsten
Torsten circa 7 ore fa
Modificato: Torsten circa 6 ore fa
According to this page
"PopulationSize" is to be prescribed as a positive integer, not as a character.
But if the above code doesn't work on your computer, I cannot tell you what the problem is.
Maybe you have a second function "ga.m" on your computer ? What do you get if you type
which -all ga.m
/MATLAB/toolbox/globaloptim/globaloptim/ga.m
Maybe there is confusion between MATLAB's "ga" and the Genetic Algorithm Toolbox under
?
Victor
Victor circa 3 ore fa
Only the one included with MATLAB appears. This issue mystifies me.

Accedi per commentare.

Risposta accettata

Star Strider
Star Strider circa 10 ore fa
Modificato: Star Strider circa 10 ore fa
The problem is that the arguments to ga are defined by thier positions, and there have to be 10 arguments before the 'options' argument at the end. Adding one more '[],' before hte 'options' argument solves that problem.
All it needs now is the 'test_fitness' function to be defined, and it should work.
Try something like this --
% Testing Genetic Algorithm
clc, clear, close all
rng default % For reproducibility
numberOfVariables = 2;
lb = [-3,-3];
ub = [3,3];
a = 0.1;
b = 0.05; % define constant values
FitnessFunction = @(x) test_fitness(x,a,b);
options = optimoptions("ga",PopulationSize=50);
[x,fval] = ga(FitnessFunction,2,[],[],[],[],lb,ub,[],[],options);
Unrecognized function or variable 'test_fitness'.

Error in solution>@(x)test_fitness(x,a,b) (line 10)
FitnessFunction = @(x) test_fitness(x,a,b);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in createAnonymousFcn>@(x)fcn(x,FcnArgs{:}) (line 11)
fcn_handle = @(x) fcn(x,FcnArgs{:});
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in makeState (line 58)
firstMemberScore = FitnessFcn(state.Population(initScoreProvided+1,:));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in galincon (line 24)
state = makeState(GenomeLength,FitnessFcn,Iterate,output.problemtype,options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error in ga (line 420)
[x,fval,exitFlag,output,population,scores] = galincon(FitnessFcn,nvars, ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.
EDIT -- (26 Jan 2026 at 18:01)
Minor text tweaks.
.
  5 Commenti
Victor
Victor circa 2 ore fa
I've ran my code in MATLAB online and it works there. I still have not determined the cause of the initial problem but this is the best answer this far. i'll be doing this project in MATLAB Online for the foreseeable future.

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by