diff --git a/ortools/sat/go/cpmodel/BUILD.bazel b/ortools/sat/go/cpmodel/BUILD.bazel index 25b32f8db7..7a7e86aaff 100644 --- a/ortools/sat/go/cpmodel/BUILD.bazel +++ b/ortools/sat/go/cpmodel/BUILD.bazel @@ -18,8 +18,6 @@ go_library( srcs = [ "cp_model.go", "cp_solver.go", - #"cp_solver_c.cc", - #"cp_solver_c.h", "domain.go", ], cdeps = [":cp_solver_c"], diff --git a/ortools/sat/samples/BUILD.bazel b/ortools/sat/samples/BUILD.bazel index 47f1ef0c75..14fed40823 100644 --- a/ortools/sat/samples/BUILD.bazel +++ b/ortools/sat/samples/BUILD.bazel @@ -11,7 +11,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -load(":code_samples.bzl", "code_sample_cc_py", "code_sample_java", "code_sample_py") +load(":code_samples.bzl", + "code_sample_cc_go_py", "code_sample_cc_py", + "code_sample_go", "code_sample_java", "code_sample_py") code_sample_py(name = "all_different_except_zero_sample_sat") @@ -23,19 +25,20 @@ code_sample_cc_py(name = "assignment_task_sizes_sat") code_sample_cc_py(name = "assignment_teams_sat") -code_sample_cc_py(name = "assumptions_sample_sat") +code_sample_cc_go_py(name = "assumptions_sample_sat") -code_sample_cc_py(name = "binpacking_problem_sat") +code_sample_cc_go_py(name = "binpacking_problem_sat") code_sample_py(name = "bin_packing_sat") code_sample_py(name = "bool_and_int_var_product_sample_sat") -code_sample_cc_py(name = "bool_or_sample_sat") +code_sample_cc_go_py(name = "bool_or_sample_sat") +code_sample_go(name = "boolean_product_sample_sat") code_sample_py(name = "boolean_product_sample_sat") -code_sample_cc_py(name = "channeling_sample_sat") +code_sample_cc_go_py(name = "channeling_sample_sat") code_sample_cc_py(name = "clone_model_sample_sat") @@ -45,55 +48,55 @@ code_sample_cc_py(name = "cp_sat_example") code_sample_py(name = "cumulative_variable_profile_sample_sat") -code_sample_cc_py(name = "earliness_tardiness_cost_sample_sat") +code_sample_cc_go_py(name = "earliness_tardiness_cost_sample_sat") code_sample_py(name = "index_first_boolvar_true_sample_sat") code_sample_py(name = "interval_relations_sample_sat") -code_sample_cc_py(name = "interval_sample_sat") +code_sample_cc_go_py(name = "interval_sample_sat") code_sample_cc_py(name = "minimal_jobshop_sat") -code_sample_cc_py(name = "literal_sample_sat") +code_sample_cc_go_py(name = "literal_sample_sat") code_sample_cc_py(name = "multiple_knapsack_sat") code_sample_cc_py(name = "non_linear_sat") -code_sample_cc_py(name = "nqueens_sat") +code_sample_cc_go_py(name = "no_overlap_sample_sat") -code_sample_cc_py(name = "nurses_sat") +code_sample_cc_go_py(name = "nqueens_sat") -code_sample_cc_py(name = "optional_interval_sample_sat") +code_sample_cc_go_py(name = "nurses_sat") -code_sample_cc_py(name = "no_overlap_sample_sat") +code_sample_cc_go_py(name = "optional_interval_sample_sat") code_sample_py(name = "overlapping_intervals_sample_sat") -code_sample_cc_py(name = "rabbits_and_pheasants_sat") +code_sample_cc_go_py(name = "rabbits_and_pheasants_sat") code_sample_py(name = "ranking_circuit_sample_sat") -code_sample_cc_py(name = "ranking_sample_sat") +code_sample_cc_go_py(name = "ranking_sample_sat") -code_sample_cc_py(name = "reified_sample_sat") +code_sample_cc_go_py(name = "reified_sample_sat") code_sample_cc_py(name = "schedule_requests_sat") code_sample_py(name = "scheduling_with_calendar_sample_sat") -code_sample_cc_py(name = "simple_sat_program") +code_sample_cc_go_py(name = "search_for_all_solutions_sample_sat") -code_sample_cc_py(name = "search_for_all_solutions_sample_sat") +code_sample_cc_go_py(name = "simple_sat_program") -code_sample_cc_py(name = "solution_hinting_sample_sat") +code_sample_cc_go_py(name = "solution_hinting_sample_sat") -code_sample_cc_py(name = "solve_and_print_intermediate_solutions_sample_sat") +code_sample_cc_go_py(name = "solve_and_print_intermediate_solutions_sample_sat") -code_sample_cc_py(name = "step_function_sample_sat") +code_sample_cc_go_py(name = "solve_with_time_limit_sample_sat") -code_sample_cc_py(name = "solve_with_time_limit_sample_sat") +code_sample_cc_go_py(name = "step_function_sample_sat") code_sample_cc_py(name = "stop_after_n_solutions_sample_sat") diff --git a/ortools/sat/samples/assumptions_sample_sat.go b/ortools/sat/samples/assumptions_sample_sat.go index c46d994a91..c8b291b688 100644 --- a/ortools/sat/samples/assumptions_sample_sat.go +++ b/ortools/sat/samples/assumptions_sample_sat.go @@ -18,8 +18,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) func assumptionsSampleSat() error { diff --git a/ortools/sat/samples/binpacking_problem_sat.go b/ortools/sat/samples/binpacking_problem_sat.go index 96c1251cd4..972d7a6d6c 100644 --- a/ortools/sat/samples/binpacking_problem_sat.go +++ b/ortools/sat/samples/binpacking_problem_sat.go @@ -19,7 +19,7 @@ import ( "fmt" log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) const ( diff --git a/ortools/sat/samples/bool_or_sample_sat.go b/ortools/sat/samples/bool_or_sample_sat.go index 0af18fde13..14ef894e98 100644 --- a/ortools/sat/samples/bool_or_sample_sat.go +++ b/ortools/sat/samples/bool_or_sample_sat.go @@ -15,7 +15,7 @@ package main import ( - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) func boolOrSampleSat() { diff --git a/ortools/sat/samples/boolean_product_sample_sat.go b/ortools/sat/samples/boolean_product_sample_sat.go index 8d724195c7..d79ae52d8b 100644 --- a/ortools/sat/samples/boolean_product_sample_sat.go +++ b/ortools/sat/samples/boolean_product_sample_sat.go @@ -18,9 +18,9 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func booleanProductSample() error { @@ -44,11 +44,11 @@ func booleanProductSample() error { } // Set `fill_additional_solutions_in_response` and `enumerate_all_solutions` to true so // the solver returns all solutions found. - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ FillAdditionalSolutionsInResponse: proto.Bool(true), EnumerateAllSolutions: proto.Bool(true), SolutionPoolSize: proto.Int32(4), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err) diff --git a/ortools/sat/samples/channeling_sample_sat.go b/ortools/sat/samples/channeling_sample_sat.go index dab99823e6..33d3d52df2 100644 --- a/ortools/sat/samples/channeling_sample_sat.go +++ b/ortools/sat/samples/channeling_sample_sat.go @@ -18,10 +18,10 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func channelingSampleSat() error { @@ -53,12 +53,12 @@ func channelingSampleSat() error { if err != nil { return fmt.Errorf("failed to instantiate the CP model: %w", err) } - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ FillAdditionalSolutionsInResponse: proto.Bool(true), EnumerateAllSolutions: proto.Bool(true), SolutionPoolSize: proto.Int32(11), SearchBranching: sppb.SatParameters_FIXED_SEARCH.Enum(), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err) diff --git a/ortools/sat/samples/code_samples.bzl b/ortools/sat/samples/code_samples.bzl index 92f9ebde9d..7f7f0ece59 100644 --- a/ortools/sat/samples/code_samples.bzl +++ b/ortools/sat/samples/code_samples.bzl @@ -13,11 +13,13 @@ """Helper macro to compile and test code samples.""" +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_test") load("@pip_deps//:requirements.bzl", "requirement") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_python//python:defs.bzl", "py_binary", "py_test") def code_sample_cc(name): - native.cc_binary( + cc_binary( name = name + "_cc", srcs = [name + ".cc"], deps = [ @@ -28,7 +30,7 @@ def code_sample_cc(name): ], ) - native.cc_test( + cc_test( name = name + "_cc_test", size = "small", srcs = [name + ".cc"], @@ -41,6 +43,20 @@ def code_sample_cc(name): ], ) +def code_sample_go(name): + go_test( + name = name + "_go_test", + size = "small", + srcs = [name + ".go"], + deps = [ + "//ortools/sat:cp_model_go_proto", + "//ortools/sat:sat_parameters_go_proto", + "//ortools/sat/go/cpmodel", + "@com_github_golang_glog//:glog", + "@org_golang_google_protobuf//proto", + ], + ) + def code_sample_py(name): py_binary( name = name + "_py3", @@ -74,6 +90,11 @@ def code_sample_py(name): srcs_version = "PY3", ) +def code_sample_cc_go_py(name): + code_sample_cc(name = name) + code_sample_go(name = name) + code_sample_py(name = name) + def code_sample_cc_py(name): code_sample_cc(name = name) code_sample_py(name = name) diff --git a/ortools/sat/samples/earliness_tardiness_cost_sample_sat.go b/ortools/sat/samples/earliness_tardiness_cost_sample_sat.go index ce4135506c..c8bdab2b25 100644 --- a/ortools/sat/samples/earliness_tardiness_cost_sample_sat.go +++ b/ortools/sat/samples/earliness_tardiness_cost_sample_sat.go @@ -19,10 +19,10 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) const ( @@ -62,12 +62,12 @@ func earlinessTardinessCostSampleSat() error { if err != nil { return fmt.Errorf("failed to instantiate the CP model: %w", err) } - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ FillAdditionalSolutionsInResponse: proto.Bool(true), EnumerateAllSolutions: proto.Bool(true), SolutionPoolSize: proto.Int32(21), SearchBranching: sppb.SatParameters_FIXED_SEARCH.Enum(), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err) diff --git a/ortools/sat/samples/interval_sample_sat.go b/ortools/sat/samples/interval_sample_sat.go index 5a3a254591..24d89f677b 100644 --- a/ortools/sat/samples/interval_sample_sat.go +++ b/ortools/sat/samples/interval_sample_sat.go @@ -18,7 +18,7 @@ import ( "fmt" log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) const horizon = 100 diff --git a/ortools/sat/samples/literal_sample_sat.go b/ortools/sat/samples/literal_sample_sat.go index 7cfec06ccb..6018b1911e 100644 --- a/ortools/sat/samples/literal_sample_sat.go +++ b/ortools/sat/samples/literal_sample_sat.go @@ -16,7 +16,7 @@ package main import ( log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) func literalSampleSat() { diff --git a/ortools/sat/samples/no_overlap_sample_sat.go b/ortools/sat/samples/no_overlap_sample_sat.go index e69fc2a0cc..cbe175f404 100644 --- a/ortools/sat/samples/no_overlap_sample_sat.go +++ b/ortools/sat/samples/no_overlap_sample_sat.go @@ -18,8 +18,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) const horizon = 21 // 3 weeks diff --git a/ortools/sat/samples/nqueens_sat.go b/ortools/sat/samples/nqueens_sat.go index 198237f6bd..5694bfd7ea 100644 --- a/ortools/sat/samples/nqueens_sat.go +++ b/ortools/sat/samples/nqueens_sat.go @@ -18,7 +18,7 @@ import ( "fmt" log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) const boardSize = 8 diff --git a/ortools/sat/samples/nurses_sat.go b/ortools/sat/samples/nurses_sat.go index c8fbb49284..8b1df4aa33 100644 --- a/ortools/sat/samples/nurses_sat.go +++ b/ortools/sat/samples/nurses_sat.go @@ -18,7 +18,7 @@ import ( "fmt" log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) const ( diff --git a/ortools/sat/samples/optional_interval_sample_sat.go b/ortools/sat/samples/optional_interval_sample_sat.go index 2f50f8a411..1dffb2d88e 100644 --- a/ortools/sat/samples/optional_interval_sample_sat.go +++ b/ortools/sat/samples/optional_interval_sample_sat.go @@ -19,7 +19,7 @@ import ( "fmt" log "github.com/golang/glog" - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) const horizon = 100 diff --git a/ortools/sat/samples/rabbits_and_pheasants_sat.go b/ortools/sat/samples/rabbits_and_pheasants_sat.go index c828874a16..a49d688e10 100644 --- a/ortools/sat/samples/rabbits_and_pheasants_sat.go +++ b/ortools/sat/samples/rabbits_and_pheasants_sat.go @@ -19,8 +19,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) const numAnimals = 20 diff --git a/ortools/sat/samples/ranking_sample_sat.go b/ortools/sat/samples/ranking_sample_sat.go index d81c01e1fd..a4bf692340 100644 --- a/ortools/sat/samples/ranking_sample_sat.go +++ b/ortools/sat/samples/ranking_sample_sat.go @@ -18,8 +18,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) const ( diff --git a/ortools/sat/samples/reified_sample_sat.go b/ortools/sat/samples/reified_sample_sat.go index 63a77dba72..00ecb4313e 100644 --- a/ortools/sat/samples/reified_sample_sat.go +++ b/ortools/sat/samples/reified_sample_sat.go @@ -15,7 +15,7 @@ package main import ( - "ortools/sat/go/cpmodel" + "github.com/google/or-tools/ortools/sat/go/cpmodel" ) func reifiedSampleSat() { diff --git a/ortools/sat/samples/search_for_all_solutions_sample_sat.go b/ortools/sat/samples/search_for_all_solutions_sample_sat.go index 2324f031de..6e43abbe65 100644 --- a/ortools/sat/samples/search_for_all_solutions_sample_sat.go +++ b/ortools/sat/samples/search_for_all_solutions_sample_sat.go @@ -19,9 +19,9 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func searchForAllSolutionsSampleSat() error { @@ -41,11 +41,11 @@ func searchForAllSolutionsSampleSat() error { // Currently, the CpModelBuilder does not allow for callbacks, so each feasible solution cannot // be printed while solving. However, the CP Solver can return all of the enumerated solutions // in the response by setting the following parameters. - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ EnumerateAllSolutions: proto.Bool(true), FillAdditionalSolutionsInResponse: proto.Bool(true), SolutionPoolSize: proto.Int32(27), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err) diff --git a/ortools/sat/samples/simple_sat_program.go b/ortools/sat/samples/simple_sat_program.go index cf48a94284..8cddcb7efe 100644 --- a/ortools/sat/samples/simple_sat_program.go +++ b/ortools/sat/samples/simple_sat_program.go @@ -18,8 +18,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) func simpleSatProgram() error { diff --git a/ortools/sat/samples/solution_hinting_sample_sat.go b/ortools/sat/samples/solution_hinting_sample_sat.go index 70f15710c9..d0d4379fe8 100644 --- a/ortools/sat/samples/solution_hinting_sample_sat.go +++ b/ortools/sat/samples/solution_hinting_sample_sat.go @@ -18,8 +18,8 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" - "ortools/sat/go/cpmodel" ) func solutionHintingSampleSat() error { diff --git a/ortools/sat/samples/solve_and_print_intermediate_solutions_sample_sat.go b/ortools/sat/samples/solve_and_print_intermediate_solutions_sample_sat.go index 7885073bac..5ed02d38bc 100644 --- a/ortools/sat/samples/solve_and_print_intermediate_solutions_sample_sat.go +++ b/ortools/sat/samples/solve_and_print_intermediate_solutions_sample_sat.go @@ -18,9 +18,9 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func solveAndPrintIntermediateSolutionsSampleSat() error { @@ -44,10 +44,10 @@ func solveAndPrintIntermediateSolutionsSampleSat() error { // Currently, the CpModelBuilder does not allow for callbacks, so intermediate solutions // cannot be printed while solving. However, the CP-SAT solver does allow for returning // the intermediate solutions found while solving in the response. - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ FillAdditionalSolutionsInResponse: proto.Bool(true), SolutionPoolSize: proto.Int32(10), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err) diff --git a/ortools/sat/samples/solve_with_time_limit_sample_sat.go b/ortools/sat/samples/solve_with_time_limit_sample_sat.go index b7f968b336..5a5bd6cb1b 100644 --- a/ortools/sat/samples/solve_with_time_limit_sample_sat.go +++ b/ortools/sat/samples/solve_with_time_limit_sample_sat.go @@ -18,10 +18,10 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func solveWithTimeLimitSampleSat() error { @@ -40,9 +40,9 @@ func solveWithTimeLimitSampleSat() error { } // Sets a time limit of 10 seconds. - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ MaxTimeInSeconds: proto.Float64(10.0), - }.Build() + } // Solve. response, err := cpmodel.SolveCpModelWithParameters(m, params) diff --git a/ortools/sat/samples/step_function_sample_sat.go b/ortools/sat/samples/step_function_sample_sat.go index b04a04d9ac..8c927f1e75 100644 --- a/ortools/sat/samples/step_function_sample_sat.go +++ b/ortools/sat/samples/step_function_sample_sat.go @@ -18,10 +18,10 @@ import ( "fmt" log "github.com/golang/glog" + "github.com/google/or-tools/ortools/sat/go/cpmodel" cmpb "github.com/google/or-tools/ortools/sat/proto/cpmodel" sppb "github.com/google/or-tools/ortools/sat/proto/satparameters" "google.golang.org/protobuf/proto" - "ortools/sat/go/cpmodel" ) func stepFunctionSampleSat() error { @@ -71,12 +71,12 @@ func stepFunctionSampleSat() error { if err != nil { return fmt.Errorf("failed to instantiate the CP model: %w", err) } - params := sppb.SatParameters_builder{ + params := &sppb.SatParameters{ FillAdditionalSolutionsInResponse: proto.Bool(true), EnumerateAllSolutions: proto.Bool(true), SolutionPoolSize: proto.Int32(21), SearchBranching: sppb.SatParameters_FIXED_SEARCH.Enum(), - }.Build() + } response, err := cpmodel.SolveCpModelWithParameters(m, params) if err != nil { return fmt.Errorf("failed to solve the model: %w", err)