16#ifndef ORTOOLS_SAT_LP_UTILS_H_
17#define ORTOOLS_SAT_LP_UTILS_H_
25#include "absl/status/status.h"
26#include "absl/strings/string_view.h"
27#include "absl/types/span.h"
48 double tolerance = 1e-6);
71 absl::Span<const double> coefficients,
72 absl::Span<const double> lower_bounds,
73 absl::Span<const double> upper_bounds, int64_t max_absolute_activity,
74 double wanted_absolute_activity_precision,
double* relative_coeff_error,
75 double* scaled_sum_error);
97 absl::Span<const int> vars, absl::Span<const double> coeffs,
98 double lower_bound,
double upper_bound, absl::string_view name,
99 absl::Span<const IntegerVariableProto* const> var_domains,
217 absl::Span<
const std::pair<int, double>> objective,
218 double objective_offset,
bool maximize,
231 const CpModelProto& model_proto_with_floating_point_objective,
233 int64_t inner_integer_objective_lower_bound);
double FindBestScalingAndComputeErrors(absl::Span< const double > coefficients, absl::Span< const double > lower_bounds, absl::Span< const double > upper_bounds, int64_t max_absolute_activity, double wanted_absolute_activity_precision, double *relative_coeff_error, double *scaled_sum_error)
bool ConvertMPModelProtoToCpModelProto(const SatParameters ¶ms, const MPModelProto &mp_model, CpModelProto *cp_model, SolverLogger *logger)
int64_t FindRationalFactor(double x, int64_t limit, double tolerance)
void ConvertBooleanProblemToLinearProgram(const LinearBooleanProblem &problem, glop::LinearProgram *lp)
bool MakeBoundsOfIntegerVariablesInteger(const SatParameters ¶ms, MPModelProto *mp_model, SolverLogger *logger)
void ChangeLargeBoundsToInfinity(double max_magnitude, MPModelProto *mp_model, SolverLogger *logger)
bool ScaleAndSetObjective(const SatParameters ¶ms, absl::Span< const std::pair< int, double > > objective, double objective_offset, bool maximize, CpModelProto *cp_model, SolverLogger *logger)
std::vector< double > DetectImpliedIntegers(MPModelProto *mp_model, SolverLogger *logger)
void RemoveNearZeroTerms(const SatParameters ¶ms, MPModelProto *mp_model, SolverLogger *logger)
bool ConvertBinaryMPModelProtoToBooleanProblem(const MPModelProto &mp_model, LinearBooleanProblem *problem)
double ComputeTrueObjectiveLowerBound(const CpModelProto &model_proto_with_floating_point_objective, const CpObjectiveProto &integer_objective, const int64_t inner_integer_objective_lower_bound)
bool ConvertCpModelProtoToMPModelProto(const CpModelProto &input, MPModelProto *output)
std::vector< double > ScaleContinuousVariables(double scaling, double max_bound, MPModelProto *mp_model)
bool MPModelProtoValidationBeforeConversion(const SatParameters ¶ms, const MPModelProto &mp_model, SolverLogger *logger)
static int input(yyscan_t yyscanner)
std::vector< int > var_indices
double max_absolute_rhs_error
std::vector< double > coefficients
absl::Status ScaleAndAddConstraint(absl::Span< const int > vars, absl::Span< const double > coeffs, double lower_bound, double upper_bound, absl::string_view name, absl::Span< const IntegerVariableProto *const > var_domains, ConstraintProto *constraint)
double max_relative_coeff_error
double max_scaling_factor
std::vector< double > lower_bounds
double min_scaling_factor
std::vector< double > upper_bounds