0
$\begingroup$

I need to optimize the following function,

enter image description here

.

I have written the following program. But, I couldn't figure out how to get the program working with two parameters.

main.m

 fitness = @simpleMultiObjective;
 nvar = 2;
 [x, fval] = gamultiobj(fitness, nvar);
simpleMultiObjective.m

 function z = simpleMultiObjective(x, y)
    z(1) = x.^4 + y.^4 - x.^2 * y.^2 + x * y - 10 * x.^2;    
    z(2) = x.^4 + y.^4 - x.^2 * y.^2 + x * y;
 end

This program is generating the following error,

>> main
Error using simpleMultiObjective (line 2)
Not enough input arguments.
Error in createAnonymousFcn>@(x)fcn(x,FcnArgs{:}) (line 11)
fcn_handle = @(x) fcn(x,FcnArgs{:});
Error in gamultiobjMakeState (line 27)
    Score = FitnessFcn(state.Population(1,:));
Error in gamultiobjsolve (line 8)
state = gamultiobjMakeState(GenomeLength,FitnessFcn,ConstrFcn,output.problemtype,options);
Error in gamultiobj (line 261)
[x,fval,exitFlag,output,population,scores] = gamultiobjsolve(FitnessFcn,nvars, ...
Error in main (line 4)
[x, fval] = gamultiobj(fitness, nvar);
Caused by:
    Failure in initial user-supplied fitness function evaluation. GAMULTIOBJ cannot continue.
>> 

How can I fix this?

  • 1
    use one vector-valued parameter instead of two scalar parameters2017-01-09

1 Answers 1

1

(Never too late)

It was in your fitness function :

fitness = @MultiObjective;

nvar = 2;

[x, fval] = gamultiobj(fitness, nvar);

 function z = MultiObjective(x)

    z(1) = x(1)^4 + x(2)^4 - x(1)^2 * x(2)^2 + x(1) * x(2) - 10 * x(1)^2;   

    z(2) = x(1)^4 + x(2)^4 - x(1)^2 * x(2)^2 + x(1) * x(2);

 end

It works :)