Question
Objectives Prepare a suitable dynamic programming algorithm for the manufacturing firm. Define the stages/states of a dynamic programming problem. Write recursive functions for dynamic programming
Objectives
- Prepare a suitable dynamic programming algorithm for the manufacturing firm.
- Define the stages/states of a dynamic programming problem.
- Write recursive functions for dynamic programming algorithm steps.
- Find the optimal solutions/results and report them as decision steps for each planning stage to reach this optimal solution (which is minimal total production cost for the company).
- Develop readable and documented algorithms for business applications.
Scenario
Your team is working toward creating a decision support software for a firm that manufactures different types of products, each of which has a monthly manufacturing limit. Since the demand for some products changes from time to time, the firm produces a certain type of product, stocks it, and then changes the setup of their machine to manufacture another type of product. A setup cost is incurred during a month in which any units of a product type is produced. In addition, there is a variable cost for every unit produced. When the quantity of a manufactured product is greater than the demand for a particular month, the excess is stored in inventories, which have associated inventory limits and inventory costs. The firm does not want to exceed this limit because they will then need to find a warehouse to store their products, which will be time and money consuming.
The firm therefore wants a module that can optimize their inventory and production levels for the next couple of months, such that the overall cost is minimized. For this, you need a core API that will solve the inventory and manufacturing planning problem and will optimize. Your team has concluded that this problem can be solved by dynamic programming.
Grading
Develop the planProduction() method as the main method. Consider the 3 cases below:
- Last stage/month
- Intermediate stages/months
- First stage/month
Develop the productionCost(int amountOfProduction) method to find the costs incurred in the last month.
Develop the totalCost(int startingInventory, int planningPeriod) method to calculate the cost during the intermediate and first months.
Code
public class InventoryAndManufacturingPlan {
private int numberOfPeriods; // planning period
private double inventoryHoldingCostPerProduct;
private double manufacturingCostPerProduct;
private double setUpCostPerPeriodOfManufacture;
private int productionCapacity; // limit of production per period
private int inventoryCapacity; // limit of production per period capacity
private int[] productionPlan;
private int[] inventoryPlan;
private int[] demands;
/*
* row are starting inventory amounts columns are periods
* and values are costs
*/
private double[][] memoriseCostOfStates;
/*
* row are starting inventory amounts columns are periods and values are production amounts
*/
private int[][] memoriseProductionOfStates;
/**
* @param inventoryHoldingCostPerProduct
* @param manufacturingCostPerProduct
* @param setUpCostPerPeriodOfManufacture
* @param productionCapacity
* @param inventoryCapacity
* @param demands market demand per period and index 0 must be undefined (-1),
* values should start from index 1
*/
public InventoryAndManufacturingPlan(double inventoryHoldingCostPerProduct,
double manufacturingCostPerProduct, double setUpCostPerPeriodOfManufacture, int productionCapacity,
int inventoryCapacity, int[] demands) {
super();
}
public int[] getProductionPlan() {
return null;
}
public void setProductionPlan(int[] productionPlan) {
}
public int[] getInventoryPlan() {
return null;
}
public void setInventoryPlan(int[] inventoryPlan) {
}
public double[][] getMemoriseCostOfStates() {
return null;
}
public int[][] getMemoriseProductionOfStates() {
return null;
}
/**
*
*/
public void planProduction() {
//Case 1: last period
//Case 2 intermediate periods; periods except first and last
//for each period
//for each starting inventory level
//total cost will be production, production setup and inventory
//Case 3 first period (index 1); starting inventory is 0 so different
/*
* find and write optimal
*/
//get optimal for first period and calculate inventory
//for the remaining periods
//get previous excess inventory
}
public double productionCost(int amountOfProduction) {
return -1;
}
public double totalCost(int startingInventory, int planningPeriod) {
//check if it is already calculated
//find min production amount to max production amount
//are we manufacturing ?
//calculate cost
//assign if min cost
return -1;
}
public static void main(String[] args) {
/*
* This main method is a stub.
* It does nothing.
* Feel free to write your own code to test your implementation.
* In this case, we have nothing actionable in here, just this comment block, so the JVM should rapidly lose interest and move on to the rest of your code.
*/
}
}
Expert Answer: please in java
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started