summaryrefslogtreecommitdiff
path: root/code/linprog/MoulderProblem_RHSchange.sce
diff options
context:
space:
mode:
Diffstat (limited to 'code/linprog/MoulderProblem_RHSchange.sce')
-rw-r--r--code/linprog/MoulderProblem_RHSchange.sce78
1 files changed, 78 insertions, 0 deletions
diff --git a/code/linprog/MoulderProblem_RHSchange.sce b/code/linprog/MoulderProblem_RHSchange.sce
new file mode 100644
index 0000000..95721c5
--- /dev/null
+++ b/code/linprog/MoulderProblem_RHSchange.sce
@@ -0,0 +1,78 @@
+// Example problem of sensitivity analysis - changes in RHS
+
+//Reference : Bradley, Hax, and Magnanti,"Applied Mathematical Programming", Addison-Wesley, 1977, chapter 3
+
+//A custom molder has one injection-molding machine and two different dies to fit the machine. Due to differences in number of cavities and cycle times, withthe first die he can produce 100 cases of six-ounce juice glasses in six hours,while with the second die he can produce 100 cases of ten-ounce fancy cocktail glasses in five hours. The molder is approached by a new customer to produce a champagne glass. The production time for the champagne glass is 8 hours per hundred cases. He prefers to operate only on a schedule of 60 hours of production per week. He stores the week’s production in his own stockroom where he has an effective capacity of 15,000 cubic feet. A case of six-ounce juice glasses requires 10 cubic feet of storage space, while a case of ten-ounce cocktail glasses requires 20 cubic feet due to special packaging.The storage space required for the champagne glasses is 10 cubic feet per one case. The contribution of the six-ounce juice glasses is $5.00 per case; however, the only customer available will not accept more than 800 cases per week. The contribution of the ten-ounce cocktail glasses is $4.50 per case and there is no limit on the amount that can be sold where as the contribution of champagne glasses is $6.00 per case with no limit on the bound. How many cases of each type of glass should be produced each week in order to maximize the total contribution?
+//=============================================================================
+// Copyright (C) 2018 - IIT Bombay - FOSSEE
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+// Author: Remya Kommadath
+// Organization: FOSSEE, IIT Bombay
+// Email: toolbox@scilab.in
+//============================================================================
+
+clc;
+
+nProducts = 3;
+TotalProcessingTime = 60;
+RequiredTime = [6 5 8];
+StokeRoomCapacity = 15000;
+RequiredSpace = [10 20 10]*100;
+Demand = 8;
+Revenue = [5 4.5 6];
+nVar = nProducts // Each variable indicates number of hundreds of units of each product
+
+// Linear constraints
+// Processing time constraint
+A1 = RequiredTime;
+b1 = TotalProcessingTime;
+// Space constraint
+A2 = RequiredSpace;
+b2 = StokeRoomCapacity;
+// Demand constraint
+nDemand = length(Demand);
+A3 = eye(nDemand,nVar);
+b3 = Demand';
+
+A = [A1;A2;A3]; b = [b1;b2;b3];
+
+//Addition of slack variables
+nInEqConstraints = length(b);
+Aeq = eye(nInEqConstraints,nInEqConstraints);
+Aeq = [A Aeq];
+beq = b;
+
+Cost = -[Revenue zeros(1,nInEqConstraints)]';
+lb = zeros(1,size(Aeq,2));
+
+[xopt,fopt,exitflag,output,lambda]=linprog(Cost, [],[], Aeq, beq, lb,[]);
+clc;
+select exitflag
+case 0
+ mprintf('The optimum solution has been found \n')
+ disp(xopt(1:nVar)', "The optimum number of six-ounce juice glasses,ten-ounce fancy cocktail glasses and champagne glass")
+ SlackVariables = xopt(nVar+1:length(xopt));
+ disp(SlackVariables',"The surplus resource available")
+ Index = find(SlackVariables>0);
+ newbeq = beq(Index) - SlackVariables(Index);
+ changedbeq = beq;
+ changedbeq(Index) = newbeq;
+ mprintf(' The value beyond %f of the RHS value of constraint number %d will not change the optima. \n ',newbeq,Index)
+ mprintf('\n The optimal cost is %f',fopt)
+case 1
+ disp("Primal Infeasible")
+case 2
+ disp("Dual Infeasible")
+case 3
+ disp("Maximum Number of Iterations Exceeded. Output may not be optimal")
+case 4
+ disp("Solution Abandoned")
+case 5
+ disp("Primal objective limit reached")
+case 6
+ disp("Dual objective limit reached")
+end