## Validate the MAD Portfolio Problem

Sometimes, you may want to validate either your inputs to, or outputs from, a
portfolio optimization problem. Although most error checking that occurs during the
problem setup phase catches most difficulties with a portfolio optimization problem, the
processes to validate MAD portfolio sets and portfolios are time consuming and are best
done offline. So, the portfolio optimization tools have specialized functions to
validate MAD portfolio sets and portfolios. For information on the workflow when using
`PortfolioMAD`

objects, see PortfolioMAD Object Workflow.

### Validating a MAD Portfolio Set

Since it is necessary and sufficient that your MAD portfolio set must be a
nonempty, closed, and bounded set to have a valid portfolio optimization problem,
the `estimateBounds`

function lets you
examine your portfolio set to determine if it is nonempty and, if nonempty, whether
it is bounded. Suppose that you have the following MAD portfolio set which is an
empty set because the initial portfolio at `0`

is too far from a
portfolio that satisfies the budget and turnover
constraint:

p = PortfolioMAD('NumAssets', 3, 'Budget', 1); p = setTurnover(p, 0.3, 0);

If a MAD portfolio set is empty, `estimateBounds`

returns
`NaN`

bounds and sets the `isbounded`

flag to
`[]`

:

[lb, ub, isbounded] = estimateBounds(p)

lb = NaN NaN NaN ub = NaN NaN NaN isbounded = []

Suppose that you create an unbounded MAD portfolio set as follows:

p = PortfolioMAD('AInequality', [1 -1; 1 1 ], 'bInequality', 0); [lb, ub, isbounded] = estimateBounds(p)

lb = -Inf -Inf ub = 1.0e-008 * -0.3712 Inf isbounded = 0

`estimateBounds`

returns (possibly
infinite) bounds and sets the `isbounded`

flag to
`false`

. The result shows which assets are unbounded so that
you can apply bound constraints as necessary.Finally, suppose that you created a `PortfolioMAD`

object that is
both nonempty and bounded. `estimateBounds`

not only validates
the set, but also obtains tighter bounds which are useful if you are concerned with
the actual range of portfolio choices for individual assets in your
portfolio:

p = PortfolioMAD; p = setBudget(p, 1,1); p = setBounds(p, [ -0.1; 0.2; 0.3; 0.2 ], [ 0.5; 0.3; 0.9; 0.8 ]); [lb, ub, isbounded] = estimateBounds(p)

lb = -0.1000 0.2000 0.3000 0.2000 ub = 0.3000 0.3000 0.7000 0.6000 isbounded = 1

In this example, all but the second asset has tighter upper bounds than the input upper bound implies.

### Validating MAD Portfolios

Given a MAD portfolio set specified in a `PortfolioMAD`

object,
you often want to check if specific portfolios are feasible with respect to the
portfolio set. This can occur with, for example, initial portfolios and with
portfolios obtained from other procedures. The `checkFeasibility`

function
determines whether a collection of portfolios is feasible. Suppose that you perform
the following portfolio optimization and want to determine if the resultant
efficient portfolios are feasible relative to a modified problem.

First, set up a problem in the `PortfolioMAD`

object
`p`

, estimate efficient portfolios in `pwgt`

,
and then confirm that these portfolios are feasible relative to the initial problem:

m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD; p = setScenarios(p, AssetScenarios); p = setDefaultConstraints(p); pwgt = estimateFrontier(p); checkFeasibility(p, pwgt)

ans = 1 1 1 1 1 1 1 1 1 1

Next, set up a different portfolio problem that starts with the initial problem with an additional a turnover constraint and an equally weighted initial portfolio:

q = setTurnover(p, 0.3, 0.25); checkFeasibility(q, pwgt)

ans = 0 0 1 1 1 0 0 0 0 0

`PortfolioMAD`

object
`q`

. Solving the second problem using `checkFeasibility`

demonstrates that
the efficient portfolio for `PortfolioMAD`

object
`q`

is feasible relative to the initial problem:

qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)

ans = 1 1 1 1 1 1 1 1 1 1

## See Also

`PortfolioMAD`

| `estimateBounds`

| `checkFeasibility`

## Related Examples

- Creating the PortfolioMAD Object
- Working with MAD Portfolio Constraints Using Defaults
- Estimate Efficient Portfolios Along the Entire Frontier for PortfolioMAD Object
- Estimate Efficient Frontiers for PortfolioMAD Object
- Asset Returns and Scenarios Using PortfolioMAD Object