Google OR-Tools v9.14
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
g_xpress.h
Go to the documentation of this file.
1// Copyright 2010-2025 Google LLC
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14// Google C++ bindings for Xpress C API.
15//
16// Attempts to be as close to the Xpress C API as possible, with the following
17// differences:
18// * Use destructors to automatically clean up the environment and model.
19// * Use absl::Status to propagate errors.
20// * Use absl::StatusOr instead of output arguments.
21// * Use absl::Span<T> instead of T* and size for array args.
22// * Use std::string instead of null terminated char* for string values (note
23// that attribute names are still char*).
24// * When setting array data, accept const data (absl::Span<const T>).
25#ifndef OR_TOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
26#define OR_TOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
27
28#include <map>
29#include <memory>
30#include <string>
31#include <vector>
32
33#include "absl/status/status.h"
34#include "absl/status/statusor.h"
35#include "absl/strings/string_view.h"
36#include "absl/types/span.h"
38
40
41class Xpress {
42 public:
43 Xpress() = delete;
44
45 // Creates a new Xpress
46 static absl::StatusOr<std::unique_ptr<Xpress>> New(
47 absl::string_view model_name);
48 absl::Status SetProbName(absl::string_view name);
49
50 ~Xpress();
51
52 absl::StatusOr<int> GetIntControl(int control) const;
53 absl::Status SetIntControl(int control, int value);
54 absl::Status ResetIntControl(int control); // reset to default value
55
56 absl::StatusOr<int> GetIntAttr(int attribute) const;
57
58 absl::StatusOr<double> GetDoubleAttr(int attribute) const;
59
60 absl::Status AddVars(absl::Span<const double> obj,
61 absl::Span<const double> lb, absl::Span<const double> ub,
62 absl::Span<const char> vtype);
63
64 absl::Status AddVars(absl::Span<const int> vbegin, absl::Span<const int> vind,
65 absl::Span<const double> vval,
66 absl::Span<const double> obj,
67 absl::Span<const double> lb, absl::Span<const double> ub,
68 absl::Span<const char> vtype);
69
70 absl::Status AddConstrs(absl::Span<const char> sense,
71 absl::Span<const double> rhs,
72 absl::Span<const double> rng);
73 absl::Status AddConstrs(absl::Span<const char> rowtype,
74 absl::Span<const double> rhs,
75 absl::Span<const double> rng,
76 absl::Span<const int> start,
77 absl::Span<const int> colind,
78 absl::Span<const double> rowcoef);
79
80 absl::Status SetObjectiveSense(bool maximize);
81 absl::Status SetLinearObjective(double constant,
82 absl::Span<const int> col_index,
83 absl::Span<const double> obj_coeffs);
84 absl::Status SetQuadraticObjective(absl::Span<const int> colind1,
85 absl::Span<const int> colind2,
86 absl::Span<const double> coefficients);
87
88 absl::Status ChgCoeffs(absl::Span<const int> rowind,
89 absl::Span<const int> colind,
90 absl::Span<const double> values);
91
92 absl::Status LpOptimize(std::string flags);
93 // Fetch LP solution (primals, duals, and reduced costs)
94 // The user is responsible for ensuring that the three vectors are of correct
95 // size (nVars, nCons, and nVars respectively)
96 absl::Status GetLpSol(absl::Span<double> primals, absl::Span<double> duals,
97 absl::Span<double> reducedCosts);
98 absl::Status MipOptimize();
99 absl::Status PostSolve();
100
101 void Terminate();
102
103 absl::StatusOr<int> GetDualStatus() const;
104 absl::Status GetBasis(std::vector<int>& rowBasis,
105 std::vector<int>& colBasis) const;
106 absl::Status SetStartingBasis(std::vector<int>& rowBasis,
107 std::vector<int>& colBasis) const;
108
109 static void XPRS_CC printXpressMessage(XPRSprob prob, void* data,
110 const char* sMsg, int nLen,
111 int nMsgLvl);
112
113 int GetNumberOfConstraints() const;
114 int GetNumberOfVariables() const;
115
116 absl::StatusOr<std::vector<double>> GetVarLb() const;
117 absl::StatusOr<std::vector<double>> GetVarUb() const;
118
119 private:
120 XPRSprob xpress_model_;
121
122 explicit Xpress(XPRSprob& model);
123
124 absl::Status ToStatus(
125 int xprs_err,
126 absl::StatusCode code = absl::StatusCode::kInvalidArgument) const;
127
128 std::map<int, int> int_control_defaults_;
129 void initIntControlDefaults();
130};
131
132} // namespace operations_research::math_opt
133
134#endif // OR_TOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
absl::Status ChgCoeffs(absl::Span< const int > rowind, absl::Span< const int > colind, absl::Span< const double > values)
Definition g_xpress.cc:196
absl::StatusOr< std::vector< double > > GetVarUb() const
Definition g_xpress.cc:309
absl::Status SetIntControl(int control, int value)
Definition g_xpress.cc:232
absl::Status SetStartingBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
Definition g_xpress.cc:290
absl::StatusOr< int > GetDualStatus() const
Definition g_xpress.cc:272
absl::StatusOr< int > GetIntAttr(int attribute) const
Definition g_xpress.cc:246
absl::Status SetProbName(absl::string_view name)
Definition g_xpress.cc:71
absl::Status GetLpSol(absl::Span< double > primals, absl::Span< double > duals, absl::Span< double > reducedCosts)
Definition g_xpress.cc:208
absl::Status AddConstrs(absl::Span< const char > sense, absl::Span< const double > rhs, absl::Span< const double > rng)
Definition g_xpress.cc:133
absl::Status AddVars(absl::Span< const double > obj, absl::Span< const double > lb, absl::Span< const double > ub, absl::Span< const char > vtype)
Definition g_xpress.cc:99
absl::Status SetLinearObjective(double constant, absl::Span< const int > col_index, absl::Span< const double > obj_coeffs)
Definition g_xpress.cc:175
static absl::StatusOr< std::unique_ptr< Xpress > > New(absl::string_view model_name)
Creates a new Xpress.
Definition g_xpress.cc:62
absl::Status ResetIntControl(int control)
Definition g_xpress.cc:236
absl::Status LpOptimize(std::string flags)
Definition g_xpress.cc:204
absl::Status SetQuadraticObjective(absl::Span< const int > colind1, absl::Span< const int > colind2, absl::Span< const double > coefficients)
Definition g_xpress.cc:188
absl::StatusOr< int > GetIntControl(int control) const
Definition g_xpress.cc:225
absl::StatusOr< double > GetDoubleAttr(int attribute) const
Definition g_xpress.cc:253
static void XPRS_CC printXpressMessage(XPRSprob prob, void *data, const char *sMsg, int nLen, int nMsgLvl)
Definition g_xpress.cc:80
absl::Status GetBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
Definition g_xpress.cc:282
absl::Status SetObjectiveSense(bool maximize)
Definition g_xpress.cc:170
absl::StatusOr< std::vector< double > > GetVarLb() const
Definition g_xpress.cc:300
An object oriented wrapper for quadratic constraints in ModelStorage.
Definition gurobi_isv.cc:28
struct xo_prob_struct * XPRSprob
Copyright 2019-2023 RTE.
Definition environment.h:27
#define XPRS_CC
NOLINTEND(runtime/int)
Definition environment.h:63