Main Content

estimateBounds

Estimate global lower and upper bounds for set of portfolios

Description

[glb,gub,isbounded] = estimateBounds(obj) estimates global lower and upper bounds for set of portfolios for Portfolio, PortfolioCVaR, or PortfolioMAD objects. For details on the respective workflows when using these different objects, see Portfolio Object Workflow, PortfolioCVaR Object Workflow, and PortfolioMAD Object Workflow.

Note

The estimateBounds function does not consider cardinality or semicontinuous constraints. For more information, see Working with 'Conditional' BoundType, MinNumAssets, and MaxNumAssets Constraints Using Portfolio Objects.

example

[glb,gub,isbounded] = estimateBounds(obj,obtainExactBounds) estimates global lower and upper bounds for set of portfolios with an additional option specified for obtainExactBounds.

example

Examples

collapse all

Create an unbounded portfolio set.

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

  -Inf
  -Inf

ub = 2×1

     0
   Inf

isbounded = logical
   0

The estimateBounds function 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.

Create an unbounded portfolio set.

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

  -Inf
  -Inf

ub = 2×1

     0
   Inf

isbounded = logical
   0

The estimateBounds function 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.

Create an unbounded portfolio set.

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

  -Inf
  -Inf

ub = 2×1

     0
   Inf

isbounded = logical
   0

The estimateBounds function 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.

Input Arguments

collapse all

Object for portfolio, specified using Portfolio, PortfolioCVaR, or PortfolioMAD object. For more information on creating a portfolio object, see

Data Types: object

Flag to specify whether to solve for all bounds or to accept specified bounds whenever available, specified as a logical with values of true or false. If bounds are known, set obtainExactBounds to false to accept known bounds. The default for obtainExactBounds is true.

Data Types: logical

Output Arguments

collapse all

Global lower bounds for portfolio set, returned as vector for a Portfolio, PortfolioCVaR, or PortfolioMAD input object (obj).

Global upper bounds for portfolio set, returned as vector for a Portfolio, PortfolioCVaR, or PortfolioMAD input object (obj).

Indicator for whether portfolio set is empty ([]), bounded (true), or unbounded (false), returned as a logical.

Note

By definition, any portfolio set must be nonempty and bounded:

  • If the set is empty, isbounded = [ ].

  • If the set is nonempty and unbounded, isbounded = false.

  • If the set is nonempty and bounded, isbounded = true.

  • If the set is empty, glb and gub are set to NaN vectors.

An isbounded value is returned for Portfolio, PortfolioCVaR, or PortfolioMAD input object (obj).

Tips

  • You can also use dot notation to estimate the global lower and upper bounds for a given set of portfolios.

    [glb, gub, isbounded] = obj.estimateBounds;

  • Estimated bounds are accurate in most cases to within 1.0e-8. If you intend to use these bounds directly in a portfolio object, ensure that if you impose such bound constraints, a lower bound of 0 is probably preferable to a lower bound of, for example, 1.0e-10 for portfolio weights.

Version History

Introduced in R2011a