Python: использование CVXOPT для квадратичного программирования

Я использую CVXOPT для выполнения квадратичного программирования для вычисления оптимальных весов портфолио с использованием оптимизации средней дисперсии. Отличный пример можно найти на http://abel.ee.ucla.edu/cvxopt/userguide/coneprog.html#quadratic-programming. Однако аргументы в регуляризованной форме (по мнению автора). Пример - базовая версия. Я хочу сделать немного более сложную проблему, где:

min:

x'Sx  

s.t.:

x'a >= g  
x'1 = 0  
x >= -Wb  
x <= c1 - Wb  

where:
x: active weights of assets (active weight = portfolio weight - benchmark weight)  
S: covariance matrix of asset returns  
a: expected stock excess returns  
g: target gain  
Wb: weights of assets in the benchmark  
c: upper limit (weight) of any asset in the portfolio  

Предположим, что все переменные вычислены или известны.

Базовый пример, представленный в документации:

min:  

x'Sx  

s.t.  

p'x >= g  
1'x = 1

Где p — доходность активов.

Чего я не знаю (ссылаясь на код на http://abel.ee.ucla.edu/cvxopt/examples/book/portfolio.html и проблему оптимизации выше):

1. Я думаю, что эти аргументы устанавливают ограничения, но я не совсем уверен:

G = matrix(0.0, (n,n))
G[::n+1] = -1.0
h = matrix(0.0, (n,1))
A = matrix(1.0, (1,n))
b = matrix(1.0)

2. Я считаю, что это часть проблемы минимизации в «регулируемой форме», что я не уверен, что означает:

mus = [ 10**(5.0*t/N-1.0) for t in xrange(N) ]

3.Каковы аргументы для qp (solver.qp — квадратичный оптимизатор):

xs = [ qp(mu*S, -pbar, G, h, A, b)['x'] for mu in mus ]

Глядя на документацию, я почти уверен, что mu*S (первый аргумент) — это целевая функция, которую нужно минимизировать, а -pbar — это возвращаемые значения. Однако это похоже на проблему максимизации (максимизация отрицательной доходности).

Я не знаю, однако, как используются другие аргументы.

Я ищу помощь в использовании оптимизатора, учитывая мою проблему минимизации и ограничения выше.


person Jason Strimpel    schedule 27.09.2011    source источник


Ответы (1)


Я прочитал документы и думаю, что вам нужно использовать функцию со следующими параметрами. Я предполагаю, что x имеет размер n:

P = S
q = (0,....0)

A = (1, ...... 1)
b = (0)

G расположен вертикально из

 -a
 +I_n
 -I_n

где I_n — единичная матрица размера n x n. И соответствующая правая часть h равна

  -g
  Wb
  ...
  Wb
  C1-Wb
  ...
  C1-Wb

То есть: один -g, n раз Wb и n раз C1-Wb.

ХТН.

person rocksportrocker    schedule 27.09.2011
comment
Спасибо за ответ, но я не слежу за G и h... Что касается G, что вы имеете в виду под -a, ... -a? и +I_n? Что касается h, мне вообще ничего не ясно. Кроме того, какова логика ваших мыслей? - person Jason Strimpel; 28.09.2011
comment
Я просто сформулировал вашу проблему так, чтобы она соответствовала спецификации, указанной в вашей ссылке на cvxopt. - person rocksportrocker; 28.09.2011
comment
-а.... -а был неправ. I_n — единичная матрица размера n, то есть матрица равна нулю вне диагонали. На диагонали только единицы. - person rocksportrocker; 28.09.2011
comment
h — вектор. его записи даны так, как я это описал. Первая запись -g, затем n раз Wb, затем n раз C1-Wb - person rocksportrocker; 28.09.2011