In [ ]:
NU = 6
In [ ]:
import numpy as np
import pandas as pd
import os
dir_sim_ = './simulations'
dir_tr_input_ = './transformed_input'
udl_distrib = pd.read_csv(os.path.join(dir_sim_, 'nu_eq_%i.csv' % NU), header=0, index_col=0)
members_pos = pd.read_csv(os.path.join(dir_tr_input_, 'positions.csv'), header=0, index_col=0)
loss_and_profit = np.dot(members_pos.values, udl_distrib.values).transpose()
print loss_and_profit.shape
In [ ]:
from lib.msra_loss import MSRALossFunctionAbs
In [ ]:
class LossFunction1(MSRALossFunctionAbs):
def shortfall_risk(self, m=None):
m = self._check_argument(m)
x_minus_m = np.subtract(self.x, m)
sum_x_minus_m_plus = np.maximum(x_minus_m, 0.).sum(axis=1)
sum_x_minus_m_minus = -np.minimum(x_minus_m, 0.).sum(axis=1)
diff = sum_x_minus_m_plus - 0.5 * sum_x_minus_m_minus
return diff.mean()
def shortfall_risk_jac(self, m):
m = self._check_argument(m)
x_minus_m = np.subtract(self.x, m)
sgn = np.sign(x_minus_m)
sgn_plus = np.maximum(sgn, 0.)
sgn_minus = -np.minimum(sgn, 0.)
diff = sgn_plus + 0.5 * sgn_minus
return diff.mean(axis=0)
In [ ]:
loss_obj = LossFunction1(loss_and_profit, 0.)
In [ ]:
RESULTS = pd.DataFrame(index=members_pos.index)
In [ ]:
from scipy.optimize import minimize
methods = ['SLSQP']
maxiter = 10000
In [ ]:
guess = np.maximum(np.amax(loss_and_profit, axis=0), 0.)
cont = loss_obj.ineq_constraint(guess) >= 0.
while cont:
guess = 0.99 * guess
tmp = loss_obj.ineq_constraint(guess)
cont = tmp >= 0.
print loss_obj.ineq_constraint(guess)
In [ ]:
cons = ({'type': 'ineq',
'fun' : lambda x: loss_obj.ineq_constraint(x),
'jac' : lambda x: loss_obj.ineq_constraint_jac(x)})
bounds = [(0, None) for _ in xrange(loss_obj.dim)]
res = minimize(loss_obj.objective, guess,
jac=loss_obj.objective_jac,
constraints=cons,
method='SLSQP',
bounds=bounds,
options={'maxiter': maxiter, 'disp': True})
RESULTS[r'$\nu = %i$ bounds' % NU] = res.x
print loss_obj.ineq_constraint(res.x)
In [ ]:
dir_ = './results'
if not os.path.exists(dir_):
os.makedirs(dir_)
In [ ]:
RESULTS.to_csv(os.path.join(dir_, 'l1_nu_eq_%i.csv' % NU))
In [ ]:
RESULTS