# moga

Find constrained minima of a real multi-objective function.

## Syntax

x = moga(@func,x0)

x = moga(@func,x0,A,b)

x = moga(@func,x0,A,b,Aeq,beq)

x = moga(@func,x0,A,b,Aeq,beq,lb,ub)

x = moga(@func,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = moga(@func,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval,info,output] = moga(...)

## Inputs

func
The function to minimize.
x0
An estimate of the location of a minimum.
A
A matrix used to compute `A*x` for inequality contraints.
Use [ ] if unneeded.
b
The upper bound of the inequality constraints `A*x<=b. `
Use [ ] if unneeded.
Aeq
A matrix used to compute `Aeq*x` for equality contraints.
Use [ ] if unneeded.
beq
The upper bound of the equality constraints `Aeq*x=beq`.
Use [ ] if unneeded.
lb
The design variable lower bounds.
Use [ ] if unbounded. Support for this option is limited. See comments.
ub
The design variable upper bounds.
Use [ ] if unbounded. Support for this option is limited. See comments.
nonlcon
The non-linear constraints function.
The function signature is as follows:
``function [c, ceq] = ConFunc(x)``
where c and ceq contain inequality and equality contraints, respectively. The inequality constraints are assumed to have upper bounds of 0.
The function can return 1 or 2 outputs.
options
A struct containing options settings.
See mogaoptimset for details.

## Outputs

x
The locations of the multi-objective minima.
fval
The multi-objective function minima.
info
The convergence status flag.
• info = 3: a constraint violation within TolCon occurred.
• info = 0: reached maximum number of iterations.
output
A struct containing iteration details. The members are as follows.
• Pareto: a logical matrix indicating which samples belong to the Pareto Front. Each column contains the front information for an iteration.
• nfev: the number of function evaluations.
• xiter: the candidate solution at each iteration.
• fvaliter: the objective function values at each iteration.
• coniter: the constraint values at each iteration. The columns will contain the constraint function values in the following order: linear inequality contraints, linear equality constraints, nonlinear inequality contraints, nonlinear equality constraints.

## Example

Plot the iterations and Pareto Front for the function ObjFunc.

``````function obj = ObjFunc(x)
obj = zeros(2,1);
obj(1) = 2*(x(1)-3)^2 + 4*(x(2)-2)^2 + 6;
obj(2) = 2*(x(1)-3)^2 + 4*(x(2)+2)^2 + 6;
end

init = [2; 0];
lowerBound = [1, -5];
upperBound = [5, 5];

options = mogaoptimset('MaxIter', 40, 'Seed', 2017);
[x,fval,info,output] = moga(@ObjFunc,init,[],[],[],[],lowerBound,upperBound,[],options);

obj1 = output.fvaliter(:,1);
obj2 = output.fvaliter(:,2);
scatter(obj1, obj2);
hold on;

obj1P = fval(:,1);
obj2P = fval(:,2);
scatter(obj1P, obj2P);
legend('Iteration History','Pareto Front');
``````

moga uses a Multi-Objective Genetic Algorithm.

To pass additional parameters to a function argument use an anonymous function.

See the fmincon optimization tutorial for an example with nonlinear constraints.

Options are specified with mogaoptimset. The defaults are as follows.
• MaxIter: 50
• MaxFail: 20000
• PopulationSize: 0 (the algorithm chooses)
• TolCon: 0.5 (%)
• CrowdDist: 0
• Seed: 0
• Display: 'off'