add glop_proto_solver; split bazel targets for proto_solver

This commit is contained in:
Laurent Perron
2023-11-17 14:17:52 +01:00
parent 803e3d95a0
commit 0ccc07f288
17 changed files with 651 additions and 172 deletions

View File

@@ -109,39 +109,39 @@ def main():
# Group1
constraint_g1 = solver.Constraint(1, 1)
for i in range(len(group1)):
for index, _ in enumerate(group1):
# a*b can be transformed into 0 <= a + b - 2*p <= 1 with p in [0,1]
# p is True if a AND b, False otherwise
constraint = solver.Constraint(0, 1)
constraint.SetCoefficient(work[group1[i][0]], 1)
constraint.SetCoefficient(work[group1[i][1]], 1)
p = solver.BoolVar(f"g1_p{i}")
constraint.SetCoefficient(work[group1[index][0]], 1)
constraint.SetCoefficient(work[group1[index][1]], 1)
p = solver.BoolVar(f"g1_p{index}")
constraint.SetCoefficient(p, -2)
constraint_g1.SetCoefficient(p, 1)
# Group2
constraint_g2 = solver.Constraint(1, 1)
for i in range(len(group2)):
for index, _ in enumerate(group2):
# a*b can be transformed into 0 <= a + b - 2*p <= 1 with p in [0,1]
# p is True if a AND b, False otherwise
constraint = solver.Constraint(0, 1)
constraint.SetCoefficient(work[group2[i][0]], 1)
constraint.SetCoefficient(work[group2[i][1]], 1)
p = solver.BoolVar(f"g2_p{i}")
constraint.SetCoefficient(work[group2[index][0]], 1)
constraint.SetCoefficient(work[group2[index][1]], 1)
p = solver.BoolVar(f"g2_p{index}")
constraint.SetCoefficient(p, -2)
constraint_g2.SetCoefficient(p, 1)
# Group3
constraint_g3 = solver.Constraint(1, 1)
for i in range(len(group3)):
for index, _ in enumerate(group3):
# a*b can be transformed into 0 <= a + b - 2*p <= 1 with p in [0,1]
# p is True if a AND b, False otherwise
constraint = solver.Constraint(0, 1)
constraint.SetCoefficient(work[group3[i][0]], 1)
constraint.SetCoefficient(work[group3[i][1]], 1)
p = solver.BoolVar(f"g3_p{i}")
constraint.SetCoefficient(work[group3[index][0]], 1)
constraint.SetCoefficient(work[group3[index][1]], 1)
p = solver.BoolVar(f"g3_p{index}")
constraint.SetCoefficient(p, -2)
constraint_g3.SetCoefficient(p, 1)

View File

@@ -25,7 +25,7 @@ from ortools.linear_solver.python import model_builder
# [START program_part1]
# [START data_model]
def create_data_model():
def create_data_model() -> tuple[pd.DataFrame, pd.DataFrame]:
"""Create the data for the example."""
items_str = """

View File

@@ -13,6 +13,7 @@
# limitations under the License.
"""MIP example that uses a variable array."""
# [START program]
# [START import]
from ortools.linear_solver import pywraplp

View File

@@ -90,7 +90,8 @@ def main():
for i in data["all_items"]:
if x[i, b].solution_value() > 0:
print(
f"Item {i} weight: {data['weights'][i]} value: {data['values'][i]}"
f"Item {i} weight: {data['weights'][i]} value:"
f" {data['values'][i]}"
)
bin_weight += data["weights"][i]
bin_value += data["values"][i]