0

У меня есть структура данных симулированных наблюдений, и я пытаюсь вычислить оптимизацию, чтобы получить наибольшее количество успехов для данного уровня риска. Проблема в том, что я не знаю, как программировать ограничения. Вот подмножество моей DF, Строки команд и X1: X10 моделируются результаты успехов и неудачОптимизация с помощью двоичной переменной решения и моделируемой базы данных

X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 0 1 0 1 0 0 0 1 1 0 
2 0 1 0 0 1 1 1 1 1 1 
3 1 0 0 0 0 0 0 1 1 0 
4 1 0 1 1 1 0 0 1 0 1 
5 0 0 1 0 1 0 1 1 1 0 
6 0 1 0 1 0 1 1 0 1 1 
7 1 0 0 0 0 1 1 1 1 0 
8 0 0 1 1 0 0 1 1 0 1 
9 1 0 0 0 0 1 1 1 1 0 
10 0 1 1 0 0 1 0 1 0 0 

Цель будет максимизировать sum(colMeans(DF))

Основываясь на комментарии ниже, я полагал, что я хотел бы написать из математики, которую я пытаюсь решить. Есть несколько разных способов сделать это, кажется, из исследования, но я не знаю, как написать ограничения. Мой большой набор данных - 10 000 X 10 000.

Один подход

Цель Функция = Max (средняя (сумма (Simutaltion [я])

Ограничения:

Наблюдения являются бинарными

Наблюдения = 4

SD (портфель)) < X или Min (успех)> 3

Другой подход:

Цель Функция = Min (SD (сумма (Simutaltion [я])) или Max ((среднее (сумма (Simutaltion [я])/(SD (портфель)

Ограничения:

Наблюдения являются бинарными

Наблюдения = 4

Средняя (сумма (Simulatin [я]))> 5

Так что я играл ар ound с этим еще немного, и я начинаю куда-то уходить.

library(quantprog) 
library(Matrix) 
dmat = cov(t(df)) 
dmat = dmat$mat 
dvec = rowMeans(df) 
n = nrow(dmat) 
Amat = matrix(1,nrow = n) 
bvec = 1 
meq = 1 
sol <- solve.QP(dmat, dvec = -dvec, Amat = Amat, meq = meq) 
sol 
$solution 
[1] -2.2700081 -1.0040420 5.9587712 -2.8265966 0.2037187 1.1641067 -2.0099030 1.5024252 -2.0099030 
[10] 1.2914309 

$value 
[1] -0.730477 

$unconstrained.solution 
[1] 6.750 6.750 6.750 -81.000 -38.250 -78.750 -12.375 36.000 -12.375 -29.250 

$iterations 
[1] 2 0 

$Lagrangian 
[1] 0.5626516 

$iact 
[1] 1 

Когда я делаю это изменение bvec = c(1, rep(0|-.25, n)) я получаю решение, которые, по существу, все 0,

$solution 
[1] 6.018572e-17 -5.455221e-16 4.873879e-13 -4.176466e-15 -8.236146e-17 -2.663993e-16 9.764273e-17 
[8] -4.092027e-17 -2.630662e-13 0.000000e+00 

б tseries и получил эти результаты,

portfolio.optim(t(df), covmat = as.matrix(dmat)) 
$pw 
[1] -6.146157e-17 8.336774e-20 1.818182e-01 2.272727e-01 1.212121e-01 3.030303e-01 0.000000e+00 
[8] 2.658696e-17 6.164972e-15 1.666667e-01 

$px 
[1] 0.4090909 0.4696970 0.5151515 0.5303030 0.3484848 0.4696970 0.4242424 0.6969697 0.6060606 0.5303030 

$pm 
[1] 0.5 

$ps 
[1] 0.1005038 

Если я могу получить ограничение веса для tseries, которое тоже будет работать.

Любые советы по редактированию ограничений также хотели бы добавить минимальный показатель успеха в качестве ограничения. Спасибо,

ответ

2

Я бы подошел к этому в два шага. Сначала запишите модель в математике, а затем попытайтесь реализовать эту модель в части программного обеспечения. Давайте начнем с простейшей линейной модели. Использование стандартного отклонения внутри ограничения требует тяжелой техники (модель становится MINLP или по меньшей мере квадратично ограниченной смешанной целочисленной проблемой).

Я считаю, что математическая модель может быть сформулирована следующим образом:

enter image description here

Здесь п = 4 и d ваш кадр данных в виде матрицы. Мы можем даже упростить, заметив, что уравнение риска может быть выполнено во время предварительной обработки: отбросьте все команды из фрейма данных, если их ряды меньше 2.

Теперь, когда у нас есть модель, нам нужно принять ее в принятой форме решателем. Я видел, что вы использовали LpSolveAPI. Поскольку эта модель очень проста, не так уж сложно включить эту модель в вызовы lpSolveAPI.

+0

Спасибо за совет. Я могу получить эту упрощенную версию для работы с решателем excel. К сожалению, набор данных слишком велик для превосходства. Если было бы проще свести к минимуму sd за определенный коэффициент успеха, который тоже сработает. Единственное ограничение, которое у меня есть, это то, что переменная решения двоичная. Я думал, что модель портфеля с равным весом 1/4 будет работать хорошо, но я просто не знаю, как программировать ограничения. – JB17

+0

2 модели, которые я пытался, были вариантом максимального соотношения шанпе и эффективного портфеля для данного возврата. С весами, равными 1/4. У вас есть какие-либо советы по надежде запрограммировать эти ограничения. – JB17

+0

Минимизация стандартного отклонения часто лучше реализуется как минимизация дисперсии. Взятие квадрата объекта является монотонной операцией, поэтому оптимальное решение одинаков. –