# ga

Find the constrained minimum of a real function.

## Syntax

x = ga(@func,nVars)

x = ga(@func,nVars,A,b)

x = ga(@func,nVars,A,b,Aeq,beq)

x = ga(@func,nVars,A,b,Aeq,beq,lb,ub)

x = ga(@func,nVars,A,b,Aeq,beq,lb,ub,nonlcon)

x = ga(@func,nVars,A,b,Aeq,beq,lb,ub,nonlcon,options)

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

## Inputs

`func`- The function to minimize.
`nVars`- The number of variables in the domain.
`A`- A matrix used to compute A*x for inequality constraints.
`b`- The upper bound of the inequality constraints A*x<=b.
`Aeq`- A matrix used to compute Aeq*x for equality constraints.
`beq`- The upper bound of the equality constraints Aeq*x=beq.
`lb`- The design variable lower bounds.
`ub`- The design variable upper bounds.
`nonlcon`- The non-linear constraints function.
`options`- A struct containing option settings.

## Outputs

- x
- The location of the function minimum.
- fval
- The minimum of the function.
- info
- The convergence status flag.
- info = 3
- Converged with a constraint violation within tolCon.
- info = 1
- Function value converged to within tolFun or tolKKT.
- info = 0
- Reached maximum number of iterations or function calls, or the algorithm aborted because it was not converging.

- output
- A struct containing generation details. The members are as follows:
- generations
- The number of generations.
- xgen
- The candidate solution for each generation.
- fvalgen
- The objective function value for each iteration.
- congen
- The constraint values for 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

```
function obj = ObjFunc(x)
obj = 2*(x(1)-3)^2 - 5*(x(1)-3)*(x(2)-2) + 4*(x(2)-2)^2 + 6;
end
n = 2;
A = [-1, -4];
b = [-27];
lb = [-10, -10];
ub = [10, 10];
[x,fval] = ga(@ObjFunc,2,A,b,[],[],lb,ub)
```

```
x = [Matrix] 1 x 2
6.93843 4.98382
fval = 13.8773516
```

```
function obj = ObjFunc(x,offset)
obj = 2*(x(1)-3)^2 - 5*(x(1)-3)*(x(2)-2) + 4*(x(2)-2)^2 + offset;
end
handle = @(x) ObjFunc(x,7);
[x,fval] = ga(handle,2,A,b,[],[],lb,ub)
```

```
x = [Matrix] 1 x 2
6.88378 4.99563
fval = 14.8908606
```

## Comments

Options are specified with gaoptimset.

The initial design variable values can be specified with a vector using the InitialPopulation option.

The design variable ranges can be specified as a 2xN matrix using the PopInitRange option.

- Generations: 100 * number of variables, capped at 1000
- Population Size: 0, which allows the algorithm to choose.
- PopInitRange: [-10,10] units for each variable
- InitialPopulation: random over PopInitRange
- TolCon: 0.5%
- Display: 'off'

The unbounded limits for `lb` and `ub` are not fully supported and are
set to -1000 and 1000. Use of these limits is discouraged due to the size of the search area.

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