Google OR-Tools v9.12
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 <functional>
29#include <map>
30#include <memory>
31#include <optional>
32#include <string>
33#include <vector>
34
35#include "absl/status/status.h"
36#include "absl/status/statusor.h"
37#include "absl/types/span.h"
39
41
42class Xpress {
43 public:
44 Xpress() = delete;
45
46 // Creates a new Xpress
47 static absl::StatusOr<std::unique_ptr<Xpress>> New(
48 const std::string& model_name);
49 absl::Status SetProbName(const std::string& name);
50
51 ~Xpress();
52
53 absl::StatusOr<int> GetIntControl(int control) const;
54 absl::Status SetIntControl(int control, int value);
55 absl::Status ResetIntControl(int control); // reset to default value
56
57 absl::StatusOr<int> GetIntAttr(int attribute) const;
58
59 absl::StatusOr<double> GetDoubleAttr(int attribute) const;
60
61 absl::Status AddVars(absl::Span<const double> obj,
62 absl::Span<const double> lb, absl::Span<const double> ub,
63 absl::Span<const char> vtype);
64
65 absl::Status AddVars(absl::Span<const int> vbegin, absl::Span<const int> vind,
66 absl::Span<const double> vval,
67 absl::Span<const double> obj,
68 absl::Span<const double> lb, absl::Span<const double> ub,
69 absl::Span<const char> vtype);
70
71 absl::Status AddConstrs(absl::Span<const char> sense,
72 absl::Span<const double> rhs,
73 absl::Span<const double> rng);
74 absl::Status AddConstrs(absl::Span<const char> rowtype,
75 absl::Span<const double> rhs,
76 absl::Span<const double> rng,
77 absl::Span<const int> start,
78 absl::Span<const int> colind,
79 absl::Span<const double> rowcoef);
80
81 absl::Status SetObjectiveSense(bool maximize);
82 absl::Status SetLinearObjective(double offset, absl::Span<const int> colind,
83 absl::Span<const double> values);
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> cind, absl::Span<const int> vind,
89 absl::Span<const double> val);
90
91 absl::Status LpOptimize(std::string flags);
92 // Fetch LP solution (primals, duals, and reduced costs)
93 // The user is responsible for ensuring that the three vectors are of correct
94 // size (nVars, nCons, and nVars respectively)
95 absl::Status GetLpSol(absl::Span<double> primals, absl::Span<double> duals,
96 absl::Span<double> reducedCosts);
97 absl::Status MipOptimize();
98 absl::Status PostSolve();
99
100 void Terminate();
101
102 absl::StatusOr<int> GetDualStatus() const;
103 absl::Status GetBasis(std::vector<int>& rowBasis,
104 std::vector<int>& colBasis) const;
105 absl::Status SetStartingBasis(std::vector<int>& rowBasis,
106 std::vector<int>& colBasis) const;
107
108 static void XPRS_CC printXpressMessage(XPRSprob prob, void* data,
109 const char* sMsg, int nLen,
110 int nMsgLvl);
111
112 int GetNumberOfConstraints() const;
113 int GetNumberOfVariables() const;
114
115 absl::StatusOr<std::vector<double>> GetVarLb() const;
116 absl::StatusOr<std::vector<double>> GetVarUb() const;
117
118 private:
119 XPRSprob xpress_model_;
120
121 explicit Xpress(XPRSprob& model);
122
123 absl::Status ToStatus(
124 int xprs_err,
125 absl::StatusCode code = absl::StatusCode::kInvalidArgument) const;
126
127 std::map<int, int> int_control_defaults_;
128 void initIntControlDefaults();
129};
130
131} // namespace operations_research::math_opt
132
133#endif // OR_TOOLS_MATH_OPT_SOLVERS_XPRESS_G_XPRESS_H_
static absl::StatusOr< std::unique_ptr< Xpress > > New(const std::string &model_name)
Creates a new Xpress.
Definition g_xpress.cc:62
absl::StatusOr< std::vector< double > > GetVarUb() const
Definition g_xpress.cc:310
absl::Status SetLinearObjective(double offset, absl::Span< const int > colind, absl::Span< const double > values)
Definition g_xpress.cc:176
absl::Status SetIntControl(int control, int value)
Definition g_xpress.cc:233
absl::Status SetStartingBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
Definition g_xpress.cc:291
absl::StatusOr< int > GetDualStatus() const
Definition g_xpress.cc:273
absl::StatusOr< int > GetIntAttr(int attribute) const
Definition g_xpress.cc:247
absl::Status GetLpSol(absl::Span< double > primals, absl::Span< double > duals, absl::Span< double > reducedCosts)
Definition g_xpress.cc:209
absl::Status AddConstrs(absl::Span< const char > sense, absl::Span< const double > rhs, absl::Span< const double > rng)
Definition g_xpress.cc:135
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:101
absl::Status ResetIntControl(int control)
Definition g_xpress.cc:237
absl::Status LpOptimize(std::string flags)
Definition g_xpress.cc:205
absl::Status SetQuadraticObjective(absl::Span< const int > colind1, absl::Span< const int > colind2, absl::Span< const double > coefficients)
Definition g_xpress.cc:189
absl::StatusOr< int > GetIntControl(int control) const
Definition g_xpress.cc:226
absl::StatusOr< double > GetDoubleAttr(int attribute) const
Definition g_xpress.cc:254
static void XPRS_CC printXpressMessage(XPRSprob prob, void *data, const char *sMsg, int nLen, int nMsgLvl)
Definition g_xpress.cc:81
absl::Status SetProbName(const std::string &name)
Definition g_xpress.cc:72
absl::Status GetBasis(std::vector< int > &rowBasis, std::vector< int > &colBasis) const
Definition g_xpress.cc:283
absl::Status SetObjectiveSense(bool maximize)
Definition g_xpress.cc:171
absl::StatusOr< std::vector< double > > GetVarLb() const
Definition g_xpress.cc:301
absl::Status ChgCoeffs(absl::Span< const int > cind, absl::Span< const int > vind, absl::Span< const double > val)
Definition g_xpress.cc:197
An object oriented wrapper for quadratic constraints in ModelStorage.
Definition gurobi_isv.cc:28
struct xo_prob_struct * XPRSprob
Initial version of this code was provided by RTE.
Definition environment.h:26
#define XPRS_CC
Definition environment.h:60