Source code for moptipyapps.prodsched.objectives.worst_and_mean_fill_rate
"""Maximize the worst and average immediate rates."""
from moptipy.api.objective import Objective
from moptipyapps.prodsched.multistatistics import MultiStatistics
[docs]
class WorstAndMeanFillRate(Objective):
"""Compute the worst immediate rate and return `1 -` of it."""
[docs]
def evaluate(self, x: MultiStatistics) -> int | float:
"""
Get the negated worst immediate rate.
:param x: the multi-statistics
:return: the worst stock level
"""
min_imm: int | float = 1
avg_imm: int | float = 1
for stat in x.per_instance:
for sl in stat.immediate_rates:
min_imm = 0 if sl is None else min(min_imm, sl)
avg_imm = 0 if stat.immediate_rate is None else min(
avg_imm, stat.immediate_rate)
return (1 - min_imm) * 100 + (1 - avg_imm)
[docs]
def lower_bound(self) -> int:
"""
Get the lower bound of the inverted minimum immediate rate.
:retval 0: always
"""
return 0
[docs]
def upper_bound(self) -> int:
"""
Get the upper bound of the inverted minimum immediate rate.
:retval 1: always
"""
return 101
def __str__(self) -> str:
"""
Get the name of the objective function.
:return: `worstMinAndMeanFillRate`
:retval "worstMinAndMeanFillRate": always
"""
return "worstAndMeanFillRate"