def solve_frontier(R, C, rf, context):
frontier_mean, frontier_var, frontier_weights, var, penalty = [], [], [], 0, 0
n = len(R)
w = cvx.Variable(n)
r = cvx.Parameter(sign='positive')
prob = cvx.Problem(cvx.Minimize(var + penalty),
[sum(w)-context.allowableMargin == 0])
r_vals = linspace(max(min(R), rf), max(R), num=20)
for i in range(20):
r.value = r_vals[i]
var = dot(dot(w, C), w)
penalty = (1/100)*abs(mean_1-r)
prob.solve()
frontier_mean.append(r.value)
frontier_var.append(compute_var(prob.value, C))
frontier_weights.append(prob.value)
print "status:", prob.status
return array(frontier_mean), array(frontier_var), frontier_weightsdef solve_frontier(R, C, rf, context):
frontier_mean, frontier_var, frontier_weights, var, penalty = [], [], [], 0, 0
n = len(R)
w = cvx.Variable(n)
r = cvx.Parameter()
mean_1 = sum(R*w)
#allowableMargin = 1
prob = cvx.Problem(cvx.Minimize(var + penalty),
[cvx.sum_entries(w) == 1,
w >= 0])
r_vals = linspace(max(min(R), rf), max(R), num=20)
for i in range(20):
r.value = r_vals[i]
var = cvx.quad_form(w, C)
penalty = (1/100)*max(mean_1-r.value, -mean_1-r.value) #find better alternative to abs def solve_frontier(R, C, rf, context):
frontier_mean, frontier_var, frontier_weights, var, penalty = [], [], [], 0, 0
n = len(R)
w = cvx.Variable(n)
r = cvx.Parameter()
mean_1 = sum(R*w)
#allowableMargin = 1
prob = cvx.Problem(cvx.Minimize(var + penalty),
[cvx.sum_entries(w) == 1,
w >= 0])
r_vals = linspace(max(min(R), rf), max(R), num=20)
for i in range(20):
r.value = r_vals[i]
var = cvx.quad_form(w, C)
penalty = (1/100)*cvx.max_elemwise(mean_1-r.value, -mean_1-r.value) #find better alternative to abs
prob.solve()
print(logging.debug("r: " + str(r)))
print(logging.debug("prob.value: " + str(prob.value)))
frontier_mean.append(r.value)
frontier_var.append(compute_var(prob.value, C))
frontier_weights.append(prob.value)
print "status:", prob.status
return array(frontier_mean), array(frontier_var), frontier_weightsDEBUG:root:r: param81
DEBUG:root:prob.value: 0.0
DEBUG:root:r: param81
DEBUG:root:prob.value: 0.0
DEBUG:root:r: param81
DEBUG:root:prob.value: 0.0
...optimalR:
[ -5.68298038e-02 2.43611735e-01 3.53116429e-01 -3.36094631e-01
-9.39206819e-02 -1.31529637e-01 -5.26763590e-02 -1.14016331e-04
-2.38461275e-01 -6.85108757e-02]C:
[[ 0.01883194 -0.01755008 -0.01829476 -0.02154588 -0.01421845 -0.01293689
-0.0069792 -0.00916988 -0.00980294 -0.01649447]
[-0.01755008 0.10091211 0.08605381 0.06845271 0.0572482 0.04779117
0.01994855 0.02979787 0.02669141 0.04569414]
[-0.01829476 0.08605381 0.11210214 0.0491932 0.05090629 0.04346153
0.01746663 0.03068978 0.02128769 0.03266539]
[-0.02154588 0.06845271 0.0491932 0.16031082 0.06840978 0.0686063
0.03502345 0.04160541 0.0410681 0.09184603]
[-0.01421845 0.0572482 0.05090629 0.06840978 0.05459739 0.0452198
0.01965265 0.02430314 0.02312082 0.04735021]
[-0.01293689 0.04779117 0.04346153 0.0686063 0.0452198 0.06039362
0.02306852 0.0233749 0.02322384 0.05399279]
[-0.0069792 0.01994855 0.01746663 0.03502345 0.01965265 0.02306852
0.02132792 0.01655368 0.0149683 0.02641823]
[-0.00916988 0.02979787 0.03068978 0.04160541 0.02430314 0.0233749
0.01655368 0.04100387 0.0211659 0.02743472]
[-0.00980294 0.02669141 0.02128769 0.0410681 0.02312082 0.02322384
0.0149683 0.0211659 0.02890283 0.02732543]
[-0.01649447 0.04569414 0.03266539 0.09184603 0.04735021 0.05399279
0.02641823 0.02743472 0.02732543 0.07594181]]def solve_frontier(R, C, rf, context):
frontier_mean, frontier_var, frontier_weights, var, penalty = [], [], [], 0, 0
n = len(R)
w = cvx.Variable(n)
r = cvx.Parameter()
#allowableMargin = 1
r_vals = linspace(max(min(R), rf), max(R), num=20)
for i in range(20):
r.value = r_vals[i]
var = cvx.quad_form(w, C)
mean_1 = cvx.sum_entries(R*w)
penalty = (1/100)*cvx.max_elemwise(mean_1-r.value, -mean_1-r.value) #find better alternative to abs
prob = cvx.Problem(cvx.Minimize(var + penalty),
[cvx.sum_entries(w) == 1,
w >= 0])
prob.solve()
print(logging.debug("r: " + str(r)))
print(logging.debug("prob.value: " + str(prob.value)))
frontier_mean.append(r.value)
frontier_var.append(compute_var(prob.value, C))
frontier_weights.append(prob.value)
print "status:", prob.status
return array(frontier_mean), array(frontier_var), frontier_weightsDEBUG:root:prob.value: 0.00517471016738
DEBUG:root:r: param213
DEBUG:root:prob.value: 0.00517471016738
DEBUG:root:r: param213
DEBUG:root:prob.value: 0.00517471016738
DEBUG:root:r: param213
Normally the minimization should come up with an array of different weights for each iteration.
[ -5.68298038e-02 2.43611735e-01 3.53116429e-01 -3.36094631e-01
-9.39206819e-02 -1.31529637e-01 -5.26763590e-02 -1.14016331e-04
-2.38461275e-01 -6.85108757e-02][[ 0.01883194 -0.01755008 -0.01829476 -0.02154588 -0.01421845 -0.01293689
-0.0069792 -0.00916988 -0.00980294 -0.01649447]
[-0.01755008 0.10091211 0.08605381 0.06845271 0.0572482 0.04779117
0.01994855 0.02979787 0.02669141 0.04569414]
[-0.01829476 0.08605381 0.11210214 0.0491932 0.05090629 0.04346153
0.01746663 0.03068978 0.02128769 0.03266539]
[-0.02154588 0.06845271 0.0491932 0.16031082 0.06840978 0.0686063
0.03502345 0.04160541 0.0410681 0.09184603]
[-0.01421845 0.0572482 0.05090629 0.06840978 0.05459739 0.0452198
0.01965265 0.02430314 0.02312082 0.04735021]
[-0.01293689 0.04779117 0.04346153 0.0686063 0.0452198 0.06039362
0.02306852 0.0233749 0.02322384 0.05399279]
[-0.0069792 0.01994855 0.01746663 0.03502345 0.01965265 0.02306852
0.02132792 0.01655368 0.0149683 0.02641823]
[-0.00916988 0.02979787 0.03068978 0.04160541 0.02430314 0.0233749
0.01655368 0.04100387 0.0211659 0.02743472]
[-0.00980294 0.02669141 0.02128769 0.0410681 0.02312082 0.02322384
0.0149683 0.0211659 0.02890283 0.02732543]
[-0.01649447 0.04569414 0.03266539 0.09184603 0.04735021 0.05399279
0.02641823 0.02743472 0.02732543 0.07594181]]
from __future__ import division