[CP-SAT] remove the use of python protobufs; use proxies to C++ protobufs instead; this changes slightly the API of these proto for parameters
This commit is contained in:
@@ -27,7 +27,6 @@ import numpy as np
|
||||
|
||||
from absl import app
|
||||
from absl import flags
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_PARAMS = flags.DEFINE_string(
|
||||
@@ -149,7 +148,7 @@ def permutation_flow_shop(
|
||||
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
solver.parameters.log_search_progress = log
|
||||
solver.parameters.max_time_in_seconds = time_limit
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import argparse
|
||||
import collections
|
||||
|
||||
from ortools.sat.python import cp_model
|
||||
from google.protobuf import text_format
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Command line arguments.
|
||||
@@ -295,7 +294,7 @@ def main(args):
|
||||
solver = cp_model.CpSolver()
|
||||
solver.parameters.max_time_in_seconds = 60 * 60 * 2
|
||||
if parameters:
|
||||
text_format.Merge(parameters, solver.parameters)
|
||||
solver.parameters.merge_text_format(parameters)
|
||||
solution_printer = SolutionPrinter(makespan)
|
||||
status = solver.Solve(model, solution_printer)
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ from absl import app
|
||||
from absl import flags
|
||||
import numpy as np
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.linear_solver.python import model_builder as mb
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
@@ -319,7 +318,7 @@ def solve_cutting_stock_with_arc_flow_and_sat(output_proto_file: str, params: st
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
solver.parameters.log_search_progress = True
|
||||
solver.Solve(model)
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import math
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_OUTPUT_PROTO = flags.DEFINE_string(
|
||||
@@ -1982,7 +1981,7 @@ def bus_driver_scheduling(minimize_drivers: bool, max_num_drivers: int) -> int:
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
|
||||
status = solver.solve(model)
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ from typing import Sequence
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_ORDER = flags.DEFINE_integer("order", 8, "Order of the ruler.")
|
||||
@@ -71,7 +70,7 @@ def solve_golomb_ruler(order: int, params: str) -> None:
|
||||
# Solve the model.
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solution_printer = cp_model.ObjectiveSolutionPrinter()
|
||||
print(f"Golomb ruler(order={order})")
|
||||
status = solver.solve(model, solution_printer)
|
||||
|
||||
@@ -25,7 +25,6 @@ from absl import flags
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
@@ -158,7 +157,7 @@ def solve_with_duplicate_items(
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
|
||||
status = solver.solve(model)
|
||||
|
||||
@@ -260,7 +259,7 @@ def solve_with_duplicate_optional_items(
|
||||
# solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
|
||||
status = solver.solve(model)
|
||||
|
||||
@@ -381,7 +380,7 @@ def solve_with_rotations(data: pd.Series, max_height: int, max_width: int):
|
||||
# solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
|
||||
status = solver.solve(model)
|
||||
|
||||
|
||||
@@ -34,10 +34,9 @@ from typing import Dict, Sequence
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
_INPUT = flags.DEFINE_string("input", "", "Input file to parse and solve.")
|
||||
_PARAMS = flags.DEFINE_string("params", "", "Sat solver parameters.")
|
||||
_OUTPUT_PROTO = flags.DEFINE_string(
|
||||
@@ -273,7 +272,7 @@ def solve_problem_with_boolean_model(
|
||||
# solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solver.parameters.log_search_progress = True
|
||||
solver.solve(model)
|
||||
|
||||
@@ -340,7 +339,7 @@ def solve_problem_with_scheduling_model(
|
||||
# solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solver.parameters.log_search_progress = True
|
||||
solver.solve(model)
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ from typing import Dict, Sequence, Tuple
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_OUTPUT_PROTO = flags.DEFINE_string(
|
||||
@@ -141,7 +140,7 @@ def escape_the_maze(params: str, output_proto: str) -> None:
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
solver.parameters.log_search_progress = True
|
||||
result = solver.solve(model)
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ from typing import List
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
@@ -72,7 +71,7 @@ def solve_hard_model(output_proto: str, params: str) -> bool:
|
||||
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
status = solver.solve(model)
|
||||
print(solver.response_stats())
|
||||
|
||||
@@ -158,7 +157,7 @@ def solve_soft_model_with_maximization(params: str) -> None:
|
||||
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
status = solver.solve(model)
|
||||
print(solver.response_stats())
|
||||
if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE:
|
||||
|
||||
@@ -26,7 +26,6 @@ from typing import List, Sequence, Tuple
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_PARAMS = flags.DEFINE_string(
|
||||
@@ -287,7 +286,7 @@ def solve_with_cp_sat(
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solver.parameters.log_search_progress = True
|
||||
status = solver.solve(model)
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ from typing import Dict, List
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
@@ -144,7 +143,7 @@ def generate_and_solve_problem(pieces: Dict[str, List[List[int]]]) -> None:
|
||||
# Solve the model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
status = solver.solve(model)
|
||||
|
||||
print(
|
||||
|
||||
@@ -26,10 +26,9 @@ import collections
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
from ortools.scheduling import rcpsp_pb2
|
||||
from ortools.scheduling.python import rcpsp
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_INPUT = flags.DEFINE_string("input", "", "Input file to parse and solve.")
|
||||
_OUTPUT_PROTO = flags.DEFINE_string(
|
||||
@@ -361,7 +360,7 @@ def solve_rcpsp(
|
||||
|
||||
# Parse user specified parameters.
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
|
||||
# Favor objective_shaving over objective_lb_search.
|
||||
if solver.parameters.num_workers >= 16 and solver.parameters.num_workers < 24:
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_OUTPUT_PROTO = flags.DEFINE_string(
|
||||
@@ -410,7 +409,7 @@ def solve_shift_scheduling(params: str, output_proto: str):
|
||||
# Solve the model.
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
solution_printer = cp_model.ObjectiveSolutionPrinter()
|
||||
status = solver.solve(model, solution_printer)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
from typing import Sequence
|
||||
from absl import app
|
||||
from absl import flags
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
@@ -498,7 +497,7 @@ def single_machine_scheduling():
|
||||
# Solve.
|
||||
solver = cp_model.CpSolver()
|
||||
if parameters:
|
||||
text_format.Parse(parameters, solver.parameters)
|
||||
solver.parameters.parse_text_format(parameters)
|
||||
solution_printer = SolutionPrinter()
|
||||
solver.best_bound_callback = lambda a: print(f"New objective lower bound: {a}")
|
||||
solver.solve(model, solution_printer)
|
||||
|
||||
@@ -18,7 +18,6 @@ import math
|
||||
from typing import Sequence
|
||||
from absl import app
|
||||
from absl import flags
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_NUM_ROBOTS = flags.DEFINE_integer("num_robots", 8, "Number of robots to place.")
|
||||
@@ -93,7 +92,7 @@ def spread_robots(num_robots: int, room_size: int, params: str) -> None:
|
||||
# Creates a solver and solves the model.
|
||||
solver = cp_model.CpSolver()
|
||||
if params:
|
||||
text_format.Parse(params, solver.parameters)
|
||||
solver.parameters.parse_text_format(params)
|
||||
solver.parameters.log_search_progress = True
|
||||
status = solver.solve(model)
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import time
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
@@ -294,7 +293,7 @@ def steel_mill_slab(problem_id: int, break_symmetries: bool) -> None:
|
||||
### Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
objective_printer = cp_model.ObjectiveSolutionPrinter()
|
||||
status = solver.solve(model, objective_printer)
|
||||
|
||||
@@ -478,7 +477,7 @@ def steel_mill_slab_with_valid_slabs(problem_id: int, break_symmetries: bool) ->
|
||||
### Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
|
||||
solution_printer = SteelMillSlabSolutionPrinter(orders, assign, loads, losses)
|
||||
status = solver.solve(model, solution_printer)
|
||||
@@ -548,7 +547,7 @@ def steel_mill_slab_with_column_generation(problem_id: int) -> None:
|
||||
### Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solution_printer = cp_model.ObjectiveSolutionPrinter()
|
||||
status = solver.solve(model, solution_printer)
|
||||
|
||||
|
||||
@@ -68,8 +68,12 @@ def solve_sudoku() -> None:
|
||||
if initial_grid[i][j]:
|
||||
model.add(grid[(i, j)] == initial_grid[i][j])
|
||||
|
||||
model.export_to_file('/tmp/sudoku_sat.pb.txt')
|
||||
|
||||
# Solves and prints out the solution.
|
||||
solver = cp_model.CpSolver()
|
||||
solver.parameters.num_workers = 1
|
||||
solver.parameters.log_search_progress = True
|
||||
status = solver.solve(model)
|
||||
if status == cp_model.OPTIMAL:
|
||||
for i in line:
|
||||
|
||||
@@ -33,7 +33,6 @@ from absl import app
|
||||
from absl import flags
|
||||
import pandas as pd
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
|
||||
@@ -141,7 +140,7 @@ def solve(
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
status = solver.solve(model)
|
||||
|
||||
# Report solution.
|
||||
|
||||
@@ -20,7 +20,6 @@ from typing import Sequence
|
||||
from absl import app
|
||||
from absl import flags
|
||||
|
||||
from google.protobuf import text_format
|
||||
from ortools.sat.python import cp_model
|
||||
|
||||
_NUM_NODES = flags.DEFINE_integer("num_nodes", 12, "Number of nodes to visit.")
|
||||
@@ -99,7 +98,7 @@ def solve_with_cp_sat(x, y, profits) -> None:
|
||||
# Solve model.
|
||||
solver = cp_model.CpSolver()
|
||||
if _PARAMS.value:
|
||||
text_format.Parse(_PARAMS.value, solver.parameters)
|
||||
solver.parameters.parse_text_format(_PARAMS.value)
|
||||
solver.parameters.log_search_progress = True
|
||||
solver.solve(model)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user