根据朱莉娅的约束,最大化夏普比率

时间:2017-02-10 12:45:37

标签: julia julia-jump

我希望最大化q [1](夏普比率)的值,但受到朱莉娅的以下限制。

  1. W的值元素是正数。 (W [i]> 0)
  2. 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
    
  3. 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))
    

    如何解决这个问题。

1 个答案:

答案 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),这样它就可以了。