25#ifndef ORTOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
26#define ORTOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
34#include "absl/status/status.h"
35#include "absl/status/statusor.h"
36#include "absl/strings/string_view.h"
37#include "absl/types/span.h"
47 static absl::StatusOr<std::unique_ptr<Xpress>>
New(
48 absl::string_view model_name);
53 absl::Status
GetControlInfo(
char const* name,
int* p_id,
int* p_type)
const;
66 absl::Status
SetStrControl(
int control, std::string
const& value);
68 absl::StatusOr<int>
GetIntAttr(
int attribute)
const;
74 absl::Status
AddVars(std::size_t count, absl::Span<const double> obj,
75 absl::Span<const double> lb, absl::Span<const double> ub,
76 absl::Span<const char> vtype);
77 absl::Status
AddNames(
int type, absl::Span<const char> names,
int first,
80 absl::Status
AddConstrs(absl::Span<const char> sense,
81 absl::Span<const double> rhs,
82 absl::Span<const double> rng);
83 absl::Status
AddConstrs(absl::Span<const char> rowtype,
84 absl::Span<const double> rhs,
85 absl::Span<const double> rng,
86 absl::Span<const int> start,
87 absl::Span<const int> colind,
88 absl::Span<const double> rowcoef);
92 absl::Span<const int> col_index,
93 absl::Span<const double> obj_coeffs);
95 absl::Span<const int> colind2,
96 absl::Span<const double> coefficients);
98 absl::Status
ChgCoeffs(absl::Span<const int> rowind,
99 absl::Span<const int> colind,
100 absl::Span<const double> values);
106 absl::Status
GetLpSol(absl::Span<double> primals, absl::Span<double> duals,
107 absl::Span<double> reducedCosts);
108 absl::Status
Optimize(std::string
const& flags =
"",
109 int* p_solvestatus =
nullptr,
110 int* p_solstatus =
nullptr);
113 absl::Status
GetLB(absl::Span<double> lb,
int first,
int last);
114 absl::Status
GetUB(absl::Span<double> ub,
int first,
int last);
115 absl::Status
GetColType(absl::Span<char> ctype,
int first,
int last);
117 absl::Status
ChgBounds(absl::Span<int const> colind,
118 absl::Span<char const> bndtype,
119 absl::Span<double const> bndval);
120 absl::Status
ChgColType(absl::Span<int const> colind,
121 absl::Span<char const> coltype);
126 absl::Status
GetBasis(std::vector<int>& rowBasis,
127 std::vector<int>& colBasis)
const;
129 std::vector<int>& colBasis)
const;
133 void* cbdata,
int prio = 0);
136 void* cbdata =
nullptr);
140 void* cbdata =
nullptr);
142 absl::StatusOr<std::vector<double>>
GetVarLb()
const;
143 absl::StatusOr<std::vector<double>>
GetVarUb()
const;
147 absl::StatusOr<bool>
IsMIP()
const;
148 absl::Status
GetDuals(
int* p_status,
149 std::optional<absl::Span<double>>
const& duals,
150 int first,
int last);
152 std::optional<absl::Span<double>>
const&
x,
153 int first,
int last);
155 std::optional<absl::Span<double>>
const& dj,
156 int first,
int last);
158 absl::Status
AddMIPSol(absl::Span<double const> vals,
159 absl::Span<int const> colind,
160 char const* name =
nullptr);
162 absl::Status
LoadDirs(absl::Span<int const> cols,
163 std::optional<absl::Span<int const>>
const& prio,
164 std::optional<absl::Span<char const>>
const& dir,
165 std::optional<absl::Span<double const>>
const& up,
166 std::optional<absl::Span<double const>>
const& down);
170 absl::StatusOr<int>
AddObjective(
double constant,
int ncols,
171 absl::Span<int const> colind,
172 absl::Span<double const> objcoef,
173 int priority,
double weight);
176 absl::Status
AddSets(absl::Span<char const> settype,
177 absl::Span<XPRSint64 const> start,
178 absl::Span<int const> colind,
179 absl::Span<double const> refval);
181 absl::Span<int const> colind,
182 absl::Span<int const> complement);
183 absl::Status
AddRows(absl::Span<char const> rowtype,
184 absl::Span<double const> rhs,
185 absl::Span<double const> rng,
186 absl::Span<XPRSint64 const> start,
187 absl::Span<int const> colind,
188 absl::Span<double const> rowcoef);
189 absl::Status
AddQRow(
char sense,
double rhs,
double rng,
190 absl::Span<int const> colind,
191 absl::Span<double const> rowcoef,
192 absl::Span<int const> qcol1, absl::Span<int const> qcol2,
193 absl::Span<double const> qcoef);
194 absl::Status
WriteProb(std::string
const& filename,
195 std::string
const& flags =
"");
196 absl::Status
SaveAs(std::string
const& filename);
203 absl::Status ToStatus(
205 absl::StatusCode code = absl::StatusCode::kInvalidArgument)
const;
207 std::map<int, int> int_control_defaults_;
208 void initIntControlDefaults();
absl::StatusOr< bool > IsMIP() const
absl::Status GetUB(absl::Span< double > ub, int first, int last)
absl::StatusOr< std::string > GetStrControl(int control) const
absl::Status AddCbChecktime(int(XPRS_CC *cb)(XPRSprob, void *), void *cbdata, int prio=0)
absl::Status ChgBounds(absl::Span< int const > colind, absl::Span< char const > bndtype, absl::Span< double const > bndval)
absl::Status RemoveCbChecktime(int(XPRS_CC *cb)(XPRSprob, void *), void *cbdata=nullptr)
absl::Status ChgCoeffs(absl::Span< const int > rowind, absl::Span< const int > colind, absl::Span< const double > values)
absl::Status ChgColType(absl::Span< int const > colind, absl::Span< char const > coltype)
absl::Status GetDuals(int *p_status, std::optional< absl::Span< double > > const &duals, int first, int last)
absl::StatusOr< std::vector< double > > GetVarUb() const
absl::Status GetColType(absl::Span< char > ctype, int first, int last)
absl::Status SetIntControl(int control, int value)
absl::Status Interrupt(int reason)
absl::Status SetStartingBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
absl::Status GetLB(absl::Span< double > lb, int first, int last)
absl::Status SetIndicators(absl::Span< int const > rowind, absl::Span< int const > colind, absl::Span< int const > complement)
absl::Status AddRows(absl::Span< char const > rowtype, absl::Span< double const > rhs, absl::Span< double const > rng, absl::Span< XPRSint64 const > start, absl::Span< int const > colind, absl::Span< double const > rowcoef)
absl::StatusOr< int > GetDualStatus() const
absl::StatusOr< int > GetIntAttr(int attribute) const
absl::Status RemoveCbMessage(void(XPRS_CC *cb)(XPRSprob, void *, char const *, int, int), void *cbdata=nullptr)
absl::Status SetProbName(absl::string_view name)
absl::Status GetLpSol(absl::Span< double > primals, absl::Span< double > duals, absl::Span< double > reducedCosts)
absl::Status AddConstrs(absl::Span< const char > sense, absl::Span< const double > rhs, absl::Span< const double > rng)
absl::Status AddVars(std::size_t count, absl::Span< const double > obj, absl::Span< const double > lb, absl::Span< const double > ub, absl::Span< const char > vtype)
absl::Status AddCbMessage(void(XPRS_CC *cb)(XPRSprob, void *, char const *, int, int), void *cbdata, int prio=0)
absl::Status SetLinearObjective(double constant, absl::Span< const int > col_index, absl::Span< const double > obj_coeffs)
absl::Status GetControlInfo(char const *name, int *p_id, int *p_type) const
absl::StatusOr< double > CalculateObjectiveN(int objidx, double const *solution)
static absl::StatusOr< std::unique_ptr< Xpress > > New(absl::string_view model_name)
absl::Status ResetIntControl(int control)
absl::Status LoadDirs(absl::Span< int const > cols, std::optional< absl::Span< int const > > const &prio, std::optional< absl::Span< char const > > const &dir, std::optional< absl::Span< double const > > const &up, std::optional< absl::Span< double const > > const &down)
absl::Status SetIntControl64(int control, int64_t value)
absl::StatusOr< int64_t > GetIntControl64(int control) const
absl::StatusOr< int > AddObjective(double constant, int ncols, absl::Span< int const > colind, absl::Span< double const > objcoef, int priority, double weight)
absl::Status SetStrControl(int control, std::string const &value)
absl::Status Optimize(std::string const &flags="", int *p_solvestatus=nullptr, int *p_solstatus=nullptr)
absl::Status LpOptimize(std::string flags)
absl::Status AddNames(int type, absl::Span< const char > names, int first, int last)
absl::Status SaveAs(std::string const &filename)
absl::Status SetQuadraticObjective(absl::Span< const int > colind1, absl::Span< const int > colind2, absl::Span< const double > coefficients)
absl::StatusOr< int > GetIntControl(int control) const
absl::Status GetSolution(int *p_status, std::optional< absl::Span< double > > const &x, int first, int last)
absl::StatusOr< double > GetDoubleAttr(int attribute) const
absl::Status SetObjectiveIntControl(int obj, int control, int value)
absl::Status LoadDelayedRows(absl::Span< int const > rows)
absl::Status SetDblControl(int control, double value)
absl::Status SetObjectiveDoubleControl(int obj, int control, double value)
absl::StatusOr< double > GetObjectiveDoubleAttr(int objidx, int attribute) const
absl::StatusOr< double > GetDblControl(int control) const
absl::Status GetRedCosts(int *p_status, std::optional< absl::Span< double > > const &dj, int first, int last)
absl::Status WriteProb(std::string const &filename, std::string const &flags="")
absl::Status AddMIPSol(absl::Span< double const > vals, absl::Span< int const > colind, char const *name=nullptr)
absl::Status GetBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
absl::Status AddQRow(char sense, double rhs, double rng, absl::Span< int const > colind, absl::Span< double const > rowcoef, absl::Span< int const > qcol1, absl::Span< int const > qcol2, absl::Span< double const > qcoef)
absl::Status SetObjectiveSense(bool maximize)
absl::StatusOr< std::vector< double > > GetVarLb() const
absl::Status AddSets(absl::Span< char const > settype, absl::Span< XPRSint64 const > start, absl::Span< int const > colind, absl::Span< double const > refval)
Select next search node to expand Select next item_i to add this new search node to the search Generate a new search node where item_i is not in the knapsack Check validity of this new partial solution(using propagators) - If valid
struct xo_prob_struct * XPRSprob