Drop hier links of afbeeldingen om ze aan de editor toe te voegen.
In deze oefening moet je een voorraadbeheersysteem implementeren met behulp van stacks. Het doel is om realistische voorraadoperaties te simuleren, waarbij producten in batches worden beheerd en het Last-In-First-Out (LIFO)-principe wordt toegepast. Deze aanpak weerspiegelt scenario’s waarin de meest recent toegevoegde voorraad als eerste wordt gebruikt, zoals bij duurzame goederen.

Implementeer de Batch-klasse (1 punt)
Maak de Batch-klasse die een batch van de voorraad van een product vertegenwoordigt. Elk Batch-object moet bevatten:
- quantity: de hoeveelheid van het product in de batch
- cost_per_unit: de kosten voor het inkopen van het product in deze batch. Deze kosten worden niet op productniveau opgeslagen omdat ze per batch kunnen verschillen.
De klasse bevat ook een tostring-methode str die de batch als volgt weergeeft:
Batch(quantity=[quantity], cost_per_unit=[cost_per_unit])
Implementeer de Product-klasse (6 punten):
Maak de Product-klasse (1 punt) die een product vertegenwoordigt met een stack van voorraadbatches.
Elk Product-object moet bevatten:
- product_name: naam van het product
- batches: stack van batches voor het product
- holding_cost: kosten voor het aanhouden van een eenheid van het product in de voorraad
- stockout_penalty: kosten voor het niet kunnen leveren van een eenheid van het product
Deze klasse moet de volgende methoden bevatten:
- add_batch(quantity, cost_per_unit): voegt een nieuwe batch toe aan de stack (1 punt).
- fulfill_demand(demand): vervult de vraag met behulp van de bovenste batch van de voorraad (2 punten). Als de bovenste batch niet voldoende is, wordt de volgende batch gebruikt. De functie retourneert 0 als de vraag door een of meer batches kan worden vervuld. Als de vraag niet kan worden vervuld, retourneert de functie stockout_penalty voor het product vermenigvuldigd met het aantal producten dat niet kan worden geleverd.
- calculate_holding_cost(): deze functie retourneert de totale aanhoudingskosten voor dit product door de aanhoudingskosten voor elke batch op te tellen (1 punt).
De klasse bevat ook een tostring-methode str (1 punt) die het product als volgt weergeeft:
Product [product_name]:
Batch(quantity=[quantity_batch1 from batch_1], cost_per_unit=[cost_per_unit from batch_1])
Batch(quantity=[quantity_batch1 from batch_2], cost_per_unit=[cost_per_unit from batch_2])
....
Batch(quantity=[quantity_batch1 from batch_n], cost_per_unit=[cost_per_unit from batch_n])