linear objective sucks returning to multiplication

This commit is contained in:
Pagwin 2026-06-05 14:14:01 -04:00
parent 2db8ff63c7
commit d88b7c0319
No known key found for this signature in database
GPG key ID: 81137023740CA260

17
main.py
View file

@ -485,11 +485,14 @@ def solve(
# below. (finalE/finalB/finalS are the pools after step 5's gains.) # below. (finalE/finalB/finalS are the pools after step 5's gains.)
# ====================================================================== # ======================================================================
## NOTE: product can be changed here ## NOTE: product can be changed here
prodEB = m.NewIntVar(0, capE * capB, "prodEB") # prodEB = m.NewIntVar(0, capE * capB, "prodEB")
m.AddMultiplicationEquality(prodEB, [finalE, finalB]) # m.AddMultiplicationEquality(prodEB, [finalE, finalB])
obj = m.NewIntVar(0, capE * capB * capS, "obj") # obj = m.NewIntVar(0, capE * capB * capS, "obj")
m.AddMultiplicationEquality(obj, [prodEB, finalS]) # m.AddMultiplicationEquality(obj, [prodEB, finalS])
m.Maximize(obj) # m.Maximize(obj)
# Linear objective instead
m.Maximize(finalE + finalB + finalS)
# ---- Phase 2: solve the product to optimality ---- # ---- Phase 2: solve the product to optimality ----
solver = cp_model.CpSolver() solver = cp_model.CpSolver()
@ -691,7 +694,9 @@ def _report(
) )
fe, fb, fs = solver.Value(finalE), solver.Value(finalB), solver.Value(finalS) fe, fb, fs = solver.Value(finalE), solver.Value(finalB), solver.Value(finalS)
print(f"\nFINAL E={fe} B={fb} S={fs} product = {fe * fb * fs}") print(
f"\nFINAL E={fe} B={fb} S={fs} product = {fe * fb * fs} sum = {fe + fb + fs}"
)
if __name__ == "__main__": if __name__ == "__main__":