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.
fn_map(weights, portfolio, relax = FALSE, verbose = FALSE, ...)
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.
vector of weights
object of class portfolio
TRUE/FALSE, default FALSE. Enable constraints to be relaxed.
print error messages for debuggin purposes
any other passthru parameters
Ross Bennett
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.