29 double proportion_of_constraints) {
32 result.set_name(
"Random 3-SAT");
33 for (
int i = 0;
i < num_variables; ++
i) {
34 sat::IntegerVariableProto* var = result.add_variables();
38 const int num_constraints = proportion_of_constraints * num_variables;
39 for (
int i = 0;
i < num_constraints; ++
i) {
40 auto* ct = result.add_constraints()->mutable_bool_or();
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) {
62 sat::IntegerVariableProto* var = result.add_variables();
66 for (
int i = 0;
i < num_constraints; ++
i) {
68 auto* ct = result.add_constraints()->mutable_linear();
69 const int min_value = num_variables / 10;
70 ct->add_domain(min_value);
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()) {
86 const int objective_var_index = result.variables_size();
88 sat::IntegerVariableProto* var = result.add_variables();
90 var->add_domain(num_variables);
92 result.mutable_objective()->add_vars(objective_var_index);
93 result.mutable_objective()->add_coeffs(1);
96 auto* ct = result.add_constraints()->mutable_linear();
99 for (
int v = 0; v < num_variables; ++v) {
103 ct->add_vars(objective_var_index);