qclp

Syntax

qclp(r, V, k, [A], [b], [Aeq], [beq], [x0], [c], [eps], [alpha])

Arguments

V, A and Aeq must be matrices with the same number of columns.

r, b and beq are vectors.

k is a positive scalar.

x0 is a vector of coefficients for absolute value inequality constraints.

c is a non-negative number representing the right-hand constant for absolute value inequality constraints.

eps is a positive floating-point number representing the solution precision. The default value is 1e-6, and the range is [1e-4, 1e-9]. A solution with higher precision can be obtained by decreasing eps. If a value beyond the range is set, it will be adjusted to the default value.

alpha is a positive floating-point number representing the relaxation parameter. The default value is 1.5, and the range is (0,2). The solution process can be sped up by increasing alpha. If a value beyond the range is set, it will be adjusted to the default value.

Details

Solve the following optimization problem with a linear objective function and a set of constraints including a quadratic constraint.

\(\min\limits_xr^T * x\text{ such that}\begin{cases}x^T * V * x\le k\\A * x \le b\\Aeq * x=beq\\norm(x-x_0) \le c\end{cases}\)

The result is a 2-element tuple. The first element is the minimum value of the objective function. The second element is the value of x where the value of the objective function is minimized.

Examples

Determine the optimal portfolio based on expected average returns (r) and the variance-covariance matrix (V) of selected stocks, and the constraints that the volatility of the portfolio should be no more than 11% and the weight of each stock in the portfolio is between 10% and 50%.

$ r = 0.18 0.25 0.36
$ V= 0.0225 -0.003 -0.01125 -0.003 0.04 0.025 -0.01125 0.025 0.0625 $ 3:3
$ k = pow(0.11, 2)
$ A = (eye(3) join (-1*eye(3))).transpose()
$ b = 0.5 0.5 0.5 -0.1 -0.1 -0.1
$ Aeq = (1 1 1)$1:3
$ beq = [1]

$ x = qclp(-r, V, k, A, b, Aeq, beq);

$ x[1];
[0.5,0.380842,0.119158]

Based on the above example, adding absolute value constraints | x1 - 0.35| + | x2 - 0.35 | + | x3 - 0.35 | 0.3 :

$ x0 = [0.35, 0.35, 0.35];
$ c = 0.3;
$ y = qclp(-r, V, k, A, b, Aeq, beq, x0, c);
$ y[1]
[0.475000051441985,0.349999992722491,0.17499995583436]