Suppose a company needs to have a machine over the next five year period. Each new machine costs Rs.100,000. The annual cost of operating a machine during its ith year of operation is given as follows: C1 = 6000, C2 = 8000 and C3 = 12,000. A machine may be kept up to three years before being traded in. This means that a machine can be either kept or traded with in the first two years and has to be traded when its age is three. The trade in value after i years is t1= 80,000, t2 = 60,000 and t3 = 50,000. How can the company minimize costs over the five year period (year 0 to year 5) if the company is going to buy a new machine in the year 0?
Devise an optimal solution based on dynamic programming. Illustrate appropriate stages/ states and the optimal-value function.
Devise an optimal solution based on dynamic programming. Illustrate appropriate stages/ states and the optimal-value function.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class test{ | |
public static int i=6; | |
public static int p=100000; | |
public static int[] get= new int[i]; | |
public static void main(String args[]){ | |
//get(t)=minimum net cost from time "t" to 5.given that a new vehicle is perchased at time t. | |
//getr(t) is also the same. | |
//cs[t][x]= net cost of buying a bycicle at "t" time and operating it until time "x". | |
//in this programme, we are trying to find get(0). | |
//value function -> get(t)=min{c[t][x]+g(x)}, t=0,1,2,3,4 | |
int[][] cs = { //0 1 2 3 4 5 | |
/*0*/{0,26000,54000,76000, 0, 0}, | |
/*1*/{0, 0,26000,54000,76000, 0}, | |
/*2*/{0, 0, 0,26000,54000,76000}, | |
/*3*/{0, 0, 0, 0,26000,54000}, | |
/*4*/{0, 0, 0, 0, 0,26000}, | |
/*5*/{0, 0, 0, 0, 0, 0} | |
}; | |
//initialising arrays | |
for(int j=0;j<5;j++){ | |
get[j]=-1; | |
} | |
get[5]=0; | |
System.out.println("# Using recursive method without DP "); | |
System.out.println("====================================="); | |
System.out.println("below shows the number of calles to getr()"); | |
System.out.println(""); | |
System.out.println("\n"+"Minimum cost is "+getr(0,cs)); | |
System.out.println(""); | |
System.out.println(""); | |
System.out.println("# Using recursive method with DP "); | |
System.out.println("====================================="); | |
System.out.println("below shows the number of calles to get()"); | |
System.out.println(""); | |
System.out.println("\n"+"Minimum cost is "+get(0,cs)); | |
System.out.println(""); | |
System.out.println("--------------------------------------------"); | |
System.out.println("# We can use DP to get an optimal solution #"); | |
System.out.println("--------------------------------------------"); | |
System.out.println(""); | |
findpath1(0,cs); | |
System.out.println("--------------------------------------------"); | |
} | |
////////////////////////////////////////////////////////////////////////// | |
// this method calculates the minimum cost without using DP // | |
///////////////////////////////////////////////////////////////////////// | |
public static int getr(int c,int[][] x){ | |
System.out.println("call getr["+(c)+"]"); | |
int min=-1; | |
int tp=0; | |
//base case | |
if(c==5) return 0; | |
//check all the possible values and get the minimum | |
for(int i=1;i<4;i++){ | |
if((c+i)<6){ | |
if(i==1){ | |
min=x[c][c+i]+getr(c+i,x); | |
} | |
else{ | |
tp=(x[c][c+i]+getr(c+i,x)); | |
if( min> tp ){ | |
min=tp; | |
} | |
} | |
} | |
} | |
//return the minimum value | |
return min; | |
} | |
////////////////////////////////////////////////////////////////////////// | |
// this method calculates the minimum cost using DP // | |
///////////////////////////////////////////////////////////////////////// | |
public static int get(int c,int[][] x){ | |
System.out.println("call get["+(c)+"]"); | |
int tmp=0; | |
int min=-1; | |
//base case | |
//if(c==5) return get[5]; | |
//check all the possible values and get the minimum | |
for(int i=1;i<4;i++){ | |
if((c+i)<6){ | |
if(i==1){ | |
//if the item is not in the table. then calculate | |
if(get[c+i]==-1){ | |
min=x[c][c+i]+get(c+i,x); | |
} | |
//if the item is in the table. then get it | |
else{ | |
min=x[c][c+i]+get[c+i]; | |
} | |
}else{ | |
//if the item is not in the table. then calculate | |
if(get[c+i]==-1){ | |
tmp=x[c][c+i]+get(c+i,x); | |
} | |
//if the item is in the table. then get it | |
else{ | |
tmp=x[c][c+i]+get[c+i]; | |
} | |
//finding the minumum | |
if( min> tmp ){ | |
min=tmp; | |
} | |
} | |
} | |
} | |
//put the minimum value in the table | |
get[c]=min; | |
//return the minimum value | |
return min; | |
} | |
////////////////////////////////////////////////////////////////////////// | |
// this method finds the minimum cost paths // | |
///////////////////////////////////////////////////////////////////////// | |
public static void findpath1(int c,int[][] x){ | |
System.out.println("Minimum cost paths if we buy at "+c); | |
System.out.println("==================================="); | |
//find the paths from time "t", where are the costs are minimum. | |
for(int i=1;i<4;i++){ | |
if((c+i)<6){ | |
if(x[c][c+i]+get[c+i]==get[c]){ | |
//call findpath method() | |
findpath(c+i,x); | |
} | |
} | |
} | |
} | |
////////////////////////////////////////////////////////////////////////// | |
// this method finds the minimum cost paths // | |
///////////////////////////////////////////////////////////////////////// | |
public static void findpath(int c,int[][] x){ | |
int j=c+1; | |
if(c>4){ | |
System.out.println(""); | |
} | |
else{ | |
for(int i=1;i<4;i++){ | |
if((c+i)<6){ | |
if( (x[c][c+i]+get[c+i])==get[c]){ | |
System.out.print("buy--> ["+c+"] sell at ["+(c+i)+"] /"); | |
findpath(c+i,x); | |
} | |
} | |
} | |
} | |
} | |
} |
Comments
Post a Comment