tif, tcc tweaks
This commit is contained in:
parent
bdc67111b5
commit
2232b3342c
@ -79,8 +79,7 @@ class LoftService(Base):
|
|||||||
problem = None
|
problem = None
|
||||||
|
|
||||||
if bundle_constraint:
|
if bundle_constraint:
|
||||||
bundles_amount = random.randint(int(bundle_constraint.minimum), int(bundle_constraint.maximum))
|
problem = self.recursive_solve(items, int(bundle_constraint.minimum), int(bundle_constraint.maximum))
|
||||||
problem = self.recursive_solve(items, bundles_amount)
|
|
||||||
else: # no bundles
|
else: # no bundles
|
||||||
problem = self.solve(items)
|
problem = self.solve(items)
|
||||||
|
|
||||||
@ -95,7 +94,9 @@ class LoftService(Base):
|
|||||||
|
|
||||||
return solution
|
return solution
|
||||||
|
|
||||||
def recursive_solve(self, items, bundles_amount, attempts = 1000) -> LpProblem:
|
def recursive_solve(self, items, min, max, attempts = 800) -> LpProblem:
|
||||||
|
bundles_amount = random.randint(min, max)
|
||||||
|
logging.info(f'min: {min}, max: {max}, bundles amount: {bundles_amount}')
|
||||||
selected_bundles = solver_helper.get_random_bundles(
|
selected_bundles = solver_helper.get_random_bundles(
|
||||||
self.solver_run.total_form_items,
|
self.solver_run.total_form_items,
|
||||||
bundles_amount,
|
bundles_amount,
|
||||||
@ -109,7 +110,7 @@ class LoftService(Base):
|
|||||||
else:
|
else:
|
||||||
logging.info('recursing...')
|
logging.info('recursing...')
|
||||||
logging.info(attempts)
|
logging.info(attempts)
|
||||||
return self.recursive_solve(items, bundles_amount, attempts - 1)
|
return self.recursive_solve(items, min, max, attempts - 1)
|
||||||
|
|
||||||
def solve(self, items: list[Item], bundles: list[Bundle] or None = None) -> LpProblem:
|
def solve(self, items: list[Item], bundles: list[Bundle] or None = None) -> LpProblem:
|
||||||
# create problem
|
# create problem
|
||||||
@ -129,15 +130,15 @@ class LoftService(Base):
|
|||||||
# multi-objective constraints
|
# multi-objective constraints
|
||||||
for target in self.solver_run.objective_function.tif_targets:
|
for target in self.solver_run.objective_function.tif_targets:
|
||||||
problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id]
|
problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id]
|
||||||
for item in self.solver_run.items]) >= target.value - target.value * 0.2, f'max tif theta ({target.theta}) target value {target.value}'
|
for item in self.solver_run.items]) >= target.value - 4, f'max tif theta ({target.theta}) target value {target.value}'
|
||||||
problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id]
|
problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id]
|
||||||
for item in self.solver_run.items]) <= target.value + target.value * 0.2, f'min tif theta ({target.theta}) target value {target.value}'
|
for item in self.solver_run.items]) <= target.value + 4, f'min tif theta ({target.theta}) target value {target.value}'
|
||||||
|
|
||||||
for target in self.solver_run.objective_function.tcc_targets:
|
for target in self.solver_run.objective_function.tcc_targets:
|
||||||
problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id]
|
problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id]
|
||||||
for item in self.solver_run.items]) >= target.value - target.value * 0.1, f'max tcc theta ({target.theta}) target value {target.value}'
|
for item in self.solver_run.items]) >= target.value - 18, f'max tcc theta ({target.theta}) target value {target.value}'
|
||||||
problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id]
|
problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id]
|
||||||
for item in self.solver_run.items]) <= target.value + target.value * 0.1, f'min tcc theta ({target.theta}) target value {target.value}'
|
for item in self.solver_run.items]) <= target.value + 18, f'min tcc theta ({target.theta}) target value {target.value}'
|
||||||
|
|
||||||
# solve problem
|
# solve problem
|
||||||
problem.solve()
|
problem.solve()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user