PortfolioAnalytics (version 1.1.0)

fn_map: mapping function to transform or penalize weights that violate constraints

Description

The purpose of the mapping function is to transform a weights vector that does not meet all the constraints into a weights vector that does meet the constraints, if one exists, hopefully with a minimum of transformation.

Usage

fn_map(weights, portfolio, relax = FALSE, verbose = FALSE, ...)

Arguments

weights

vector of weights

portfolio

object of class portfolio

relax

TRUE/FALSE, default FALSE. Enable constraints to be relaxed.

verbose

print error messages for debuggin purposes

any other passthru parameters

Value

  • weights: vector of transformed weights meeting constraints.

  • min: vector of min box constraints that may have been modified if relax=TRUE.

  • max: vector of max box constraints that may have been modified if relax=TRUE.

  • cLO: vector of lower bound group constraints that may have been modified if relax=TRUE.

  • cUP: vector of upper bound group constraints that may have been modified if relax=TRUE.

Details

The first step is to test for violation of the constraint. If the constraint is violated, we will apply a transformation such that the weights vector satisfies the constraints. The following constraint types are tested in the mapping function: leverage, box, group, and position limit. The transformation logic is based on code from the random portfolio sample method.

If relax=TRUE, we will attempt to relax the constraints if a feasible portfolio could not be formed with an initial call to rp_transform. We will attempt to relax the constraints up to 5 times. If we do not have a feasible portfolio after attempting to relax the constraints, then we will default to returning the weights vector that violates the constraints.