simopt.models.sscont
Simulate sales for a (s,S) inventory problem with continuous inventory.
Module Contents
- class simopt.models.sscont.SSContConfig
Bases:
pydantic.BaseModelConfiguration for the (s, S) continuous inventory model.
- demand_mean: Annotated[float, Field(default=100.0, description='mean of exponentially distributed demand in each period', gt=0)]
- lead_mean: Annotated[float, Field(default=6.0, description='mean of Poisson distributed order lead time', gt=0)]
- backorder_cost: Annotated[float, Field(default=4.0, description='cost per unit of demand not met with in-stock inventory', gt=0)]
- holding_cost: Annotated[float, Field(default=1.0, description='holding cost per unit per period', gt=0)]
- fixed_cost: Annotated[float, Field(default=36.0, description='order fixed cost', gt=0)]
- variable_cost: Annotated[float, Field(default=2.0, description='order variable cost per unit', gt=0)]
- s: Annotated[float, Field(default=1000.0, description='inventory threshold for placing order', gt=0)]
- S: Annotated[float, Field(default=2000.0, description='max inventory', gt=0)]
- n_days: Annotated[int, Field(default=100, description='number of periods to simulate', ge=1, json_schema_extra={'isDatafarmable': False})]
- warmup: Annotated[int, Field(default=20, description='number of periods as warmup before collecting statistics', ge=0, json_schema_extra={'isDatafarmable': False})]
- class simopt.models.sscont.SSContMinCostConfig
Bases:
pydantic.BaseModelConfiguration model for SSCont Min Cost Problem.
Min Total Cost for (s, S) Inventory simulation-optimization problem.
- initial_solution: Annotated[tuple[float, Ellipsis], Field(default=600, 600, description='initial solution from which solvers start')]
- budget: Annotated[int, Field(default=1000, description='max # of replications for a solver to take', gt=0, json_schema_extra={'isDatafarmable': False})]
- class simopt.models.sscont.SSCont(fixed_factors: dict | None = None)
Bases:
simopt.base.Model(s,S) Inventory Simulation Model.
A model that simulates multiple periods’ worth of sales for a (s,S) inventory problem with continuous inventory, exponentially distributed demand, and poisson distributed lead time. Returns the various types of average costs per period, order rate, stockout rate, fraction of demand met with inventory on hand, average amount backordered given a stockout occured, and average amount ordered given an order occured.
Initialize the (s,S) inventory simulation model.
- Parameters:
fixed_factors (dict, optional) – Fixed factors of the simulation model. Defaults to None.
- class_name_abbr: ClassVar[str] = 'SSCONT'
Short name of the model class.
- class_name: ClassVar[str] = '(s, S) Inventory'
Long name of the model class.
- config_class: ClassVar[type[pydantic.BaseModel]]
Configuration class for the model.
- n_rngs: ClassVar[int] = 2
Number of RNGs used to run a simulation replication.
- n_responses: ClassVar[int] = 7
Number of responses (performance measures).
- demand_model
- lead_model
- before_replicate(rng_list: list[mrg32k3a.mrg32k3a.MRG32k3a]) None
Prepare the model just before generating a replication.
- Parameters:
rng_list (list[MRG32k3a]) – RNGs used to drive the simulation.
- Raises:
NotImplementedError – If the subclass does not implement this hook.
- replicate() tuple[dict, dict]
Simulate a single replication for the current model factors.
- Parameters:
rng_list (list[MRG32k3a]) – Random number generators used to simulate the replication.
- Returns:
- A tuple containing:
- responses (dict): Performance measures of interest, including:
”avg_backorder_costs”: Average backorder costs per period.
”avg_order_costs”: Average order costs per period.
”avg_holding_costs”: Average holding costs per period.
- ”on_time_rate”: Fraction of demand met with stock on hand
in store.
”order_rate”: Fraction of periods in which an order was made.
”stockout_rate”: Fraction of periods with a stockout.
- ”avg_stockout”: Mean amount of product backordered given a
stockout occurred.
- ”avg_order”: Mean amount of product ordered given an
order occurred.
- gradients (dict): A dictionary of gradient estimates for
each response.
- Return type:
tuple[dict, dict]
- class simopt.models.sscont.SSContMinCost(name: str = '', fixed_factors: dict | None = None, model_fixed_factors: dict | None = None)
Bases:
simopt.base.ProblemClass to make (s,S) inventory simulation-optimization problems.
Initialize a problem object.
- Parameters:
name (str) – Name of the problem.
fixed_factors (dict | None) – Dictionary of user-specified problem factors.
model_fixed_factors (dict | None) – Subset of user-specified non-decision factors passed to the model.
- class_name_abbr: ClassVar[str] = 'SSCONT-1'
Short name of the problem class.
- class_name: ClassVar[str] = 'Min Total Cost for (s, S) Inventory'
Long name of the problem class.
- config_class: ClassVar[type[pydantic.BaseModel]]
Configuration class for problem.
- model_class: ClassVar[type[simopt.base.Model]]
Simulation model class for problem.
- n_objectives: ClassVar[int] = 1
Number of objectives.
- n_stochastic_constraints: ClassVar[int] = 0
Number of stochastic constraints.
- minmax: ClassVar[tuple[int, Ellipsis]]
Indicators of maximization (+1) or minimization (-1) for each objective.
- constraint_type: ClassVar[simopt.base.ConstraintType]
Description of constraints types.
- variable_type: ClassVar[simopt.base.VariableType]
Description of variable types.
- gradient_available: ClassVar[bool] = False
Indicates whether the solver provides direct gradient information.
- optimal_value: ClassVar[float | None] = None
Optimal objective function value (if known).
- optimal_solution: tuple | None = None
Optimal solution if known; defaults to None.
- model_default_factors: ClassVar[dict]
Default values for overriding model-level default factors.
- model_decision_factors: ClassVar[set[str]]
Set of keys for factors that are decision variables.
- property dim: int
Number of decision variables.
- property lower_bounds: tuple
Lower bound for each decision variable.
- property upper_bounds: tuple
Upper bound for each decision variable.
- vector_to_factor_dict(vector: tuple) dict
Convert a vector of variables to a dictionary with factor keys.
- Parameters:
vector (tuple) – A vector of values associated with decision variables.
- Returns:
Dictionary with factor keys and associated values.
- Return type:
dict
- factor_dict_to_vector(factor_dict: dict) tuple
Convert a dictionary with factor keys to a vector of variables.
- Parameters:
factor_dict (dict) – Dictionary with factor keys and associated values.
- Returns:
Vector of values associated with decision variables.
- Return type:
tuple
- replicate(_x: tuple) simopt.base.RepResult
Replicate the problem for a given solution.
- Parameters:
x (tuple) – The solution to evaluate.
- check_deterministic_constraints(x: tuple) bool
Check if a solution x satisfies the problem’s deterministic constraints.
- Parameters:
x (tuple) – A vector of decision variables.
- Returns:
- True if the solution satisfies all deterministic constraints;
False otherwise.
- Return type:
bool
- get_random_solution(rand_sol_rng: mrg32k3a.mrg32k3a.MRG32k3a) tuple
Generate a random solution for starting or restarting solvers.
- Parameters:
rand_sol_rng (MRG32k3a) – Random number generator used to sample the solution.
- Returns:
- A tuple representing a randomly generated vector of decision
variables.
- Return type:
tuple