Escolar Documentos
Profissional Documentos
Cultura Documentos
std::vector<std::vector<double>> retorno_risco(retornos.size(),
std::vector<double>(2));
for(auto i = 0; i < retornos.size(); i++) { //de ação em ação
double soma = 0;
for(auto j = 0; j < meses; j++) { // de mes em mes
soma = soma + retornos[i][j];
}
retorno_risco[i][0] = soma/meses; // guardando retorno medio na primeira coluna
std::cout <<"Ação = "<< simbolos[i] << " retorno medio = " << retorno_risco[i]
[0] << std::endl;
}
auto net_upper_long_bound=1.0;
auto net_lower_long_bound=0.5;
auto n = simbolos[0].size();
MPModelRequest model_request;
model_request.set_solver_type(MPModelRequest::SCIP_MIXED_INTEGER_PROGRAMMING);
model_proto->set_name("Otimização de Portifólio");
model_proto->set_maximize(true);
std::vector<MPVariableProto*> x(n);
for(auto i = 0; i < n; i++) {
x[i] = model_proto->add_variable();
x[i]->set_name(simbolos[0][i]);
x[i]->set_upper_bound(1.0);
x[i]->set_lower_bound(0);//long only
x[i]->set_objective_coefficient(retornos[0][i]); //FO: sum(return[i] *
allocation[i])
x[i]->set_is_integer(false);
}
//FO: - rho * sum(sigma[i][j] * x[i] * x[j])
auto quad_obj = model_proto->mutable_quadratic_objective();
for(auto i = 0; i < n; i++) {
for(auto j = 0; j < n; j++) {
quad_obj->add_qvar1_index(i);
quad_obj->add_qvar2_index(j);
quad_obj->add_coefficient(-rho*covariance[i][j]);
}
}
MPSolutionResponse solution_response;
MPSolver::SolveWithProto(model_request, &solution_response);
if (solution_response.status() == MPSOLVER_OPTIMAL)
std::cout << "Solução Ótima!" << std::endl;
std::vector<double> solution(n);
for (int i = 0; i < n; i++)
solution[i] = solution_response.variable_value(i);
std::cout << "Retorno = " << std::fixed << std::setprecision(4) << rs*100 << "%
(a.d.) "
<< std::fixed << std::setprecision(2) << rs * 252 * 100 << "% (a.a.)"<<
std::endl;