21#include "absl/random/random.h"
29 double proportion_of_constraints) {
33 for (
int i = 0;
i < num_variables; ++
i) {
38 const int num_constraints = proportion_of_constraints * num_variables;
39 for (
int i = 0;
i < num_constraints; ++
i) {
41 std::vector<int> clause;
42 while (ct->literals_size() != 3) {
44 absl::Uniform(random,
NegatedRef(num_variables - 1), num_variables);
45 bool is_already_present =
false;
46 for (
const int lit : ct->literals()) {
47 if (lit != literal)
continue;
48 is_already_present =
true;
51 if (!is_already_present) ct->add_literals(literal);
60 result.
set_name(
"Random 0-1 linear problem");
61 for (
int i = 0;
i < num_variables; ++
i) {
66 for (
int i = 0;
i < num_constraints; ++
i) {
69 const int min_value = num_variables / 10;
71 ct->add_domain(std::numeric_limits<int64_t>::max());
72 for (
int v = 0; v < num_variables; ++v) {
73 if (absl::Bernoulli(random, 0.5) ||
77 num_variables - v <= min_value - ct->vars_size()) {
99 for (
int v = 0; v < num_variables; ++v) {
103 ct->add_vars(objective_var_index);
::operations_research::sat::BoolArgumentProto *PROTOBUF_NONNULL mutable_bool_or()
::operations_research::sat::LinearConstraintProto *PROTOBUF_NONNULL mutable_linear()
void set_name(Arg_ &&arg, Args_... args)
::operations_research::sat::IntegerVariableProto *PROTOBUF_NONNULL add_variables()
::operations_research::sat::ConstraintProto *PROTOBUF_NONNULL add_constraints()
int variables_size() const
repeated .operations_research.sat.IntegerVariableProto variables = 2;
::operations_research::sat::CpObjectiveProto *PROTOBUF_NONNULL mutable_objective()
void add_coeffs(::int64_t value)
void add_vars(::int32_t value)
void add_domain(::int64_t value)
void add_domain(::int64_t value)
CpModelProto Random3SatProblem(int num_variables, double proportion_of_constraints)
CpModelProto RandomLinearProblem(int num_variables, int num_constraints)
int NegatedRef(int ref)
Small utility functions to deal with negative variable/literal references.
In SWIG mode, we don't want anything besides these top-level includes.