-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGUROBISolver.cpp
More file actions
95 lines (78 loc) · 2.28 KB
/
Copy pathGUROBISolver.cpp
File metadata and controls
95 lines (78 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// This file is part of mpc.
// mpc is free software: you can redistribute it and/or
// modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// mpc is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with mpc. If not, see
// <http://www.gnu.org/licenses/>.
// header
#include "GUROBISolver.h"
// stl
#include <iostream>
namespace mpc {
/*
* GUROBI
*/
GUROBISolver::GUROBISolver()
: solver_(new Eigen::GurobiDense())
{
solver_->displayOutput(false);
solver_->feasibilityTolerance(1e-8);
}
int GUROBISolver::SI_fail() const
{
return solver_->fail();
}
int GUROBISolver::SI_iter() const
{
return solver_->iter();
}
void GUROBISolver::SI_printLevel(int pl)
{
solver_->displayOutput(pl != 0);
}
void GUROBISolver::SI_feasibilityTolerance(double tol)
{
solver_->feasibilityTolerance(tol); //primal feasible tolerance
solver_->optimalityTolerance(tol); //dual feasible tolerance
}
bool GUROBISolver::SI_warmStart() const
{
// 2 is for non-warmstart solver
return solver_->warmStart() != Eigen::GurobiCommon::WarmStatus::NONE;
}
void GUROBISolver::SI_warmStart(bool w)
{
// -1 is is for default warmstart
// 2 is for non-warmstart solver
using WS = Eigen::GurobiCommon::WarmStatus;
solver_->warmStart((w ? WS::DEFAULT : WS::NONE));
}
void GUROBISolver::SI_inform() const
{
solver_->inform();
}
const Eigen::VectorXd& GUROBISolver::SI_result() const
{
return solver_->result();
}
void GUROBISolver::SI_problem(int nrVar, int nrEq, int nrInEq)
{
solver_->problem(nrVar, nrEq, nrInEq);
}
bool GUROBISolver::SI_solve(const Eigen::MatrixXd& Q, const Eigen::VectorXd& c,
const Eigen::MatrixXd& Aeq, const Eigen::VectorXd& beq,
const Eigen::MatrixXd& Aineq, const Eigen::VectorXd& bineq,
const Eigen::VectorXd& XL, const Eigen::VectorXd& XU)
{
return solver_->solve(Q, c, Aeq, beq, Aineq, bineq, XL, XU);
}
} // namespace pc