Skip to content

Commit 6806a40

Browse files
ENVY271204ENVY271204
authored andcommitted
idk
1 parent fa9e0f2 commit 6806a40

File tree

2 files changed

+64
-62
lines changed

2 files changed

+64
-62
lines changed

src/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
if len(sys.argv) == 2:
1313
test_file = sys.argv[1]
1414
else:
15-
test_file = "test/testcases/tc2.txt"
15+
test_file = "test/testcases/tc3.txt"
1616

1717
parser = parser.Parser(test_file)
1818
K = parser.get_K()

src/solvers/MIP_ortools.py

Lines changed: 63 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -115,58 +115,58 @@ def solve(self, environment):
115115
for wj, hj, dj in permutations(self.box_dimensions[j]):
116116
l += 1
117117
solver.Add(
118-
x[i, k] - x[j, l] + W * lij[(i, k), (j, l)] <= W - wi + self.M * (2 - si[(i, k)] - si[(j, l)]),
118+
x[(i, k)] - x[(j, l)] + W * lij[(i, k), (j, l)] <= W - wi,
119119
)
120120
solver.Add(
121-
x[j, l] - x[i, k] + W * rij[(i, k), (j, l)] <= W - wj + self.M * (2 - si[(i, k)] - si[(j, l)]),
121+
x[(j, l)] - x[(i, k)] + W * rij[(i, k), (j, l)] <= W - wj,
122122
)
123123
solver.Add(
124-
y[i, k] - y[j, l] + H * uij[(i, k), (j, l)] <= H - hi + self.M * (2 - si[(i, k)] - si[(j, l)]),
124+
y[(i, k)] - y[(j, l)] + H * uij[(i, k), (j, l)] <= H - hi,
125125
)
126126
solver.Add(
127-
y[j, l] - y[i, k] + H * fij[(i, k), (j, l)] <= H - hj + self.M * (2 - si[(i, k)] - si[(j, l)]),
127+
y[(j, l)] - y[(i, k)] + H * fij[(i, k), (j, l)] <= H - hj,
128128
)
129129
solver.Add(
130-
z[i, k] - z[j, l] + D * oij[(i, k), (j, l)] <= D - di + self.M * (2 - si[(i, k)] - si[(j, l)]),
130+
z[(i, k)] - z[(j, l)] + D * oij[(i, k), (j, l)] <= D - di,
131131
)
132132
solver.Add(
133-
z[j, l] - z[i, k] + D * bij[(i, k), (j, l)] <= D - dj + self.M * (2 - si[(i, k)] - si[(j, l)]),
133+
z[(j, l)] - z[(i, k)] + D * bij[(i, k), (j, l)] <= D - dj,
134134
)
135-
solver.Add(x[i, k] >= 0)
136-
solver.Add(y[i, k] >= 0)
137-
solver.Add(z[i, k] >= 0)
138-
solver.Add(x[i, k] + wi <= W)
139-
solver.Add(y[i, k] + hi <= H)
140-
solver.Add(z[i, k] + di <= D)
141-
142-
# Set 18: Binary constraints for rij,lij,bij,fij,uij
143-
for j in range(n):
144-
if i != j:
145-
for k in range(6):
146-
for l in range(6):
147-
for var, name in [
148-
(rij[(i, k), (j, l)], "rij"),
149-
(lij[(i, k), (j, l)], "lij"),
150-
(bij[(i, k), (j, l)], "bij"),
151-
(fij[(i, k), (j, l)], "fij"),
152-
(uij[(i, k), (j, l)], "uij"),
153-
(oij[(i, k), (j, l)], "oij"),
154-
]:
155-
solver.Add(var >= 0, f"binary_{name}_lower_{i}_{j}")
156-
solver.Add(var <= 1, f"binary_{name}_upper_{i}_{j}")
157-
158-
for k in range(6):
159-
160-
# Set 21: Binary constraints for si and Cs variables
161-
solver.Add(si[(i, k)] >= 0, f"binary_si_lower_{i}")
162-
solver.Add(si[(i, k)] <= 1, f"binary_si_upper_{i}")
163-
164-
# Set 22: Non-negativity constraints for coordinates
165-
solver.Add(x[(i, k)] >= 0, f"nonnegative_x_{i}")
166-
solver.Add(y[(i, k)] >= 0, f"nonnegative_y_{i}")
167-
solver.Add(z[(i, k)] >= 0, f"nonnegative_z_{i}")
168-
169-
solver.Add(sum(si[(i, k)] for k in range(6)) <= 1, f"single_box_{i}")
135+
solver.Add(x[(i, k)] >= 0)
136+
solver.Add(y[(i, k)] >= 0)
137+
solver.Add(z[(i, k)] >= 0)
138+
solver.Add(x[(i, k)] + wi <= W)
139+
solver.Add(y[(i, k)] + hi <= H)
140+
solver.Add(z[(i, k)] + di <= D)
141+
142+
# Set 18: Binary constraints for rij,lij,bij,fij,uij
143+
for j in range(n):
144+
if i != j:
145+
for k in range(6):
146+
for l in range(6):
147+
for var, name in [
148+
(rij[(i, k), (j, l)], "rij"),
149+
(lij[(i, k), (j, l)], "lij"),
150+
(bij[(i, k), (j, l)], "bij"),
151+
(fij[(i, k), (j, l)], "fij"),
152+
(uij[(i, k), (j, l)], "uij"),
153+
(oij[(i, k), (j, l)], "oij"),
154+
]:
155+
solver.Add(var >= 0, f"binary_{name}_lower_{i}_{j}")
156+
solver.Add(var <= 1, f"binary_{name}_upper_{i}_{j}")
157+
158+
for k in range(6):
159+
160+
# Set 21: Binary constraints for si and Cs variables
161+
solver.Add(si[(i, k)] >= 0, f"binary_si_lower_{i}")
162+
solver.Add(si[(i, k)] <= 1, f"binary_si_upper_{i}")
163+
164+
# Set 22: Non-negativity constraints for coordinates
165+
solver.Add(x[(i, k)] >= 0, f"nonnegative_x_{i}")
166+
solver.Add(y[(i, k)] >= 0, f"nonnegative_y_{i}")
167+
solver.Add(z[(i, k)] >= 0, f"nonnegative_z_{i}")
168+
169+
solver.Add(si[(i, 0)] + si[(i, 1)] + si[(i, 2)] + si[(i, 3)] + si[(i, 4)] + si[(i, 5)] <= 1, f"one_orientation_{i}")
170170

171171
print("All constraints added")
172172
print("Number of variables =", solver.NumVariables())
@@ -178,32 +178,34 @@ def solve(self, environment):
178178
print("Solution:")
179179
print("Objective value =", solver.Objective().Value())
180180
for i in range(n):
181-
print(f"Box {i}: {si[i].solution_value()}")
182-
if si[i].solution_value() > 0.5:
183-
pkg = environment.packages[i]
184-
coords = (
185-
Point(
186-
x[i].solution_value(),
187-
y[i].solution_value(),
188-
z[i].solution_value(),
189-
),
190-
Point(
191-
x[i].solution_value() + self.box_dimensions[i][0],
192-
y[i].solution_value() + self.box_dimensions[i][1],
193-
z[i].solution_value() + self.box_dimensions[i][2],
194-
),
195-
)
196-
environment.add_package(pkg, container, coords)
197-
print(f"Box {i} packed at {coords}")
181+
for k in range(6):
182+
if si[(i, k)].solution_value() > 0.5:
183+
print(si[(i, k)].solution_value())
184+
print(f"Box {i} orientation {k} at ({x[(i, k)].solution_value()}, {y[(i, k)].solution_value()}, {z[(i, k)].solution_value()})")
185+
pkg = environment.packages[i]
186+
coords = (
187+
Point(
188+
x[(i, k)].solution_value(),
189+
y[(i, k)].solution_value(),
190+
z[(i, k)].solution_value(),
191+
),
192+
Point(
193+
x[(i, k)].solution_value() + self.box_dimensions[i][0],
194+
y[(i, k)].solution_value() + self.box_dimensions[i][1],
195+
z[(i, k)].solution_value() + self.box_dimensions[i][2],
196+
),
197+
)
198+
environment.add_package(pkg, container, coords)
199+
print(f"Box {(i, k)} packed at {coords}")
198200
packed_value = sum(
199-
self.box_values[i] for i in range(n) if si[i].solution_value() > 0.5
200-
)
201+
self.box_values[i] for i in range(n) for k in range(6) if si[(i, k)].solution_value() > 0.5
202+
)
201203
used_volume = sum(
202204
self.box_dimensions[i][0]
203205
* self.box_dimensions[i][1]
204206
* self.box_dimensions[i][2]
205207
for i in range(n)
206-
if si[i].solution_value() > 0.5
208+
for k in range(6) if si[(i, k)].solution_value() > 0.5
207209
)
208210
total_volume = W * H * D
209211
print(f"Total packed value: {packed_value}")

0 commit comments

Comments
 (0)