simplify this to the core level so we can easily reference it
This commit is contained in:
parent
d6e1cb37ce
commit
d8b4675f44
@ -61,8 +61,7 @@ class SolverSandbox:
|
|||||||
print(v.name, "=", v.varValue)
|
print(v.name, "=", v.varValue)
|
||||||
break
|
break
|
||||||
|
|
||||||
def yas_elastic(tif_targets = [50.0], tcc_targets = [50.0]):
|
def yas_elastic(tif_target = 50.0):
|
||||||
Bundles = [1,2,3,4,5]
|
|
||||||
Items = [1,2,3,4,5]
|
Items = [1,2,3,4,5]
|
||||||
|
|
||||||
# For TIF target
|
# For TIF target
|
||||||
@ -83,28 +82,9 @@ class SolverSandbox:
|
|||||||
}
|
}
|
||||||
# ---
|
# ---
|
||||||
|
|
||||||
# For TCC target
|
|
||||||
trf = {
|
|
||||||
1: 100,
|
|
||||||
2: 200,
|
|
||||||
3: 400,
|
|
||||||
4: 600,
|
|
||||||
5: 800
|
|
||||||
}
|
|
||||||
|
|
||||||
irf = {
|
|
||||||
1: 100,
|
|
||||||
2: 200,
|
|
||||||
3: 300,
|
|
||||||
4: 500,
|
|
||||||
5: 700
|
|
||||||
}
|
|
||||||
# ---
|
|
||||||
|
|
||||||
total_forms = 2
|
total_forms = 2
|
||||||
|
|
||||||
items = LpVariable.dicts('Item', Items, cat='Binary')
|
items = LpVariable.dicts('Item', Items, cat='Binary')
|
||||||
bundles = LpVariable.dicts('Bundle', Bundles, cat='Binary')
|
|
||||||
|
|
||||||
for form in range(total_forms):
|
for form in range(total_forms):
|
||||||
drift = 0
|
drift = 0
|
||||||
@ -115,69 +95,21 @@ class SolverSandbox:
|
|||||||
problem = LpProblem('TIF_TCC', LpMinimize)
|
problem = LpProblem('TIF_TCC', LpMinimize)
|
||||||
|
|
||||||
# objective function
|
# objective function
|
||||||
problem += lpSum(
|
problem += lpSum([(tif[i] + iif[i]) * items[i] for i in Items])
|
||||||
[
|
|
||||||
(iif[i] + irf[i]) * items[i] for i in Items
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
(tif[b] + trf[b]) * bundles[b] for b in Bundles
|
|
||||||
]
|
|
||||||
), 'TIF_TCC_Sum'
|
|
||||||
|
|
||||||
# Constraint 1
|
# Constraint 1
|
||||||
problem += lpSum(
|
problem += lpSum([items[i] for i in Items]) == 3, 'TotalItems'
|
||||||
[
|
|
||||||
items[i] for i in Items
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
bundles[b] for b in Bundles
|
|
||||||
]
|
|
||||||
) == 3, 'TotalItems'
|
|
||||||
|
|
||||||
for tif_target in tif_targets:
|
|
||||||
print(f"Calculating TIF target of {tif_target} with drift of {drift} for Form {form + 1}")
|
print(f"Calculating TIF target of {tif_target} with drift of {drift} for Form {form + 1}")
|
||||||
|
|
||||||
# Our own "Elastic Constraints"
|
# Our own "Elastic Constraints"
|
||||||
problem += lpSum(
|
problem += lpSum(
|
||||||
[
|
[(tif[i] + iif[i]) * items[i] for i in Items]
|
||||||
tif[b] * bundles[b] for b in Bundles
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
iif[i] * items[i] for i in Items
|
|
||||||
]
|
|
||||||
) >= tif_target - (tif_target * drift_percent), 'TifIifMin'
|
) >= tif_target - (tif_target * drift_percent), 'TifIifMin'
|
||||||
|
|
||||||
problem += lpSum(
|
problem += lpSum(
|
||||||
[
|
[(tif[i] + iif[i]) * items[i] for i in Items]
|
||||||
tif[b] * bundles[b] for b in Bundles
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
iif[i] * items[i] for i in Items
|
|
||||||
]
|
|
||||||
) <= tif_target + (tif_target * drift_percent), 'TifIifMax'
|
) <= tif_target + (tif_target * drift_percent), 'TifIifMax'
|
||||||
|
|
||||||
for tcc_target in tcc_targets:
|
|
||||||
print(f"Calculating TCC target of {tcc_target} with drift of {drift} for Form {form + 1}")
|
|
||||||
|
|
||||||
# Our own "Elastic Constraints"
|
|
||||||
problem += lpSum(
|
|
||||||
[
|
|
||||||
trf[b] * bundles[b] for b in Bundles
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
irf[i] * items[i] for i in Items
|
|
||||||
]
|
|
||||||
) >= tcc_target - (tcc_target * drift_percent), 'TrfIrffMin'
|
|
||||||
|
|
||||||
problem += lpSum(
|
|
||||||
[
|
|
||||||
trf[b] * bundles[b] for b in Bundles
|
|
||||||
] +
|
|
||||||
[
|
|
||||||
irf[i] * items[i] for i in Items
|
|
||||||
]
|
|
||||||
) <= tcc_target + (tcc_target * drift_percent), 'TrfIrfMax'
|
|
||||||
|
|
||||||
problem.solve()
|
problem.solve()
|
||||||
|
|
||||||
if LpStatus[problem.status] == 'Infeasible':
|
if LpStatus[problem.status] == 'Infeasible':
|
||||||
@ -191,8 +123,6 @@ class SolverSandbox:
|
|||||||
|
|
||||||
drift += 1
|
drift += 1
|
||||||
|
|
||||||
# breakpoint() if drift == 10:
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print(f"solution found with drift of {drift}!")
|
print(f"solution found with drift of {drift}!")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user