我希望最大化q [1](夏普比率)的值,但受到朱莉娅的以下限制。
W的值之和为1.(sum(W [1:5])== 1)
function getSharpeRatio(W,ex_mu,S)
q = ( W'*ex_mu ) / sqrt((W'*S*W))
return q[1]
end
For Reference :: W是(5X1)向量,ex_mu是(5x1)向量,S是(5x5)矩阵。 我找到了两个julia库来使用JuMP和Optim.jl,但是不能根据库的要求翻译函数getSharpeRatio。
更新:到目前为止我已经完成但似乎尚未在JuMP库中实现转置功能 使用JuMP
function getSharpeRatio(W,ex_mu,S)
return dot(W', ex_mu) / sqrt(dot(W',S*W))
end
items = [1;2;3;4;5]
m = Model()
@variable(m, 0 <= W[items] <= 1)
@constraint(m, sum{ W[item] , item in items} == 1)
@objective(m, Max, getSharpeRatio(W,ex_mu,S))
solve(m)
println(getvalue(W))
如何解决这个问题。
答案 0 :(得分:0)
我相信你的功能需要在一个阵列上。制作一个25 + 5 + 5长度的向量,并使getSharpeRatio(v)
启动W,ex_mu,S=translate(v)
函数,使用视图获取临时数组。
translate(v) = (view(v,1:5),view(v,6:10),reshape(view(11:35),5,5))
那不会分配,但这意味着你的新功能可以
function getSharpeRatio(v)
W,ex_mu,S=translate(v)
dot(W,ex_mu)/ sqrt(dot(W,S*W))
end
与JuMP / Optim所期望的相匹配。从那里开始,你需要重新设置你的约束以匹配来自这里的索引......虽然我认为我设置了它(先用W),这样它就可以了。