Project Assignment
Title: Maximizing Capital Investiment by using Large Variables in Linear Programming
Sergio Vicente Simioni
June, 27, 2015

Report Content

  1. Executive Summary
  2. Conclusions/Questions addressing
  3. Data Analysis

Content Description

Executive Summary

The project will utilize an approach for large scale variables in Linear Programming to analyse the rationing of the capital investments from a big company. The capital rationing takes place whenever the total cash outlays for all projects that meet some acceptable standard exceed the constraint on total capital investment.

For this example the company is faced with the set of eight investments projects shown in table X, requiring the outlay of funds in each of the next two years. Furthermore suppose that the company has decided to limit the total capital expenditure to U$40M and U$20M in each of the next two years, respectively. The problem is to select the combination of investments that provides the largest possible return( NPV ) without violating either of the two constraints on total capital expenditures.

The general maximization formula for this problem is:

\(\beta_1Proj_1+\beta_2Proj_2+\beta_3Proj_3+beta_4Proj_4+\beta_5Proj_5+\beta_6Proj_6+\beta_7Proj_7+\beta_8Proj_8 = Max\),

Conclusions

Due to the amount of variables of this problem was utilized the lpSolveAPI R package, the results showed that to obtain the maximum return ( NPV ) without violating either of the two constraints on total capital expenditures, we should limit the funds for the projects 1,3,4,6, partially for 5 and 7 and hold projects 2 and 8, doing that we are going to obtain NPV = U$63M

see the final equation

1 x Proj_1+0 x Proj_2+1 x Proj_3+1 x Proj_4+0.066 x Proj_5+1 x Proj_6+0.166 x Proj_7+0 x Proj_8$ = U$ 63M

Data Analysis

library(lpSolveAPI)
library(knitr)
Capital <- read.csv("C:/Users/Sergio Simioni/Desktop/Capital.csv", sep=";")
kable(Capital, align="c")
Project Investiment_Year_1 Investiment_Year_2 NPV
1 12 3 14
2 54 7 17
3 6 6 17
4 6 2 15
5 30 35 40
6 6 6 12
7 48 4 14
8 36 3 10
Limited 40 20 Max
model<- make.lp(0,8)
name.lp(model, "Capital Rationing")
lp.control(model, sense="max")
## $anti.degen
## [1] "fixedvars" "stalling" 
## 
## $basis.crash
## [1] "none"
## 
## $bb.depthlimit
## [1] -50
## 
## $bb.floorfirst
## [1] "automatic"
## 
## $bb.rule
## [1] "pseudononint" "greedy"       "dynamic"      "rcostfixing" 
## 
## $break.at.first
## [1] FALSE
## 
## $break.at.value
## [1] 1e+30
## 
## $epsilon
##       epsb       epsd      epsel     epsint epsperturb   epspivot 
##      1e-10      1e-09      1e-12      1e-07      1e-05      2e-07 
## 
## $improve
## [1] "dualfeas" "thetagap"
## 
## $infinite
## [1] 1e+30
## 
## $maxpivot
## [1] 250
## 
## $mip.gap
## absolute relative 
##    1e-11    1e-11 
## 
## $negrange
## [1] -1e+06
## 
## $obj.in.basis
## [1] TRUE
## 
## $pivoting
## [1] "devex"    "adaptive"
## 
## $presolve
## [1] "none"
## 
## $scalelimit
## [1] 5
## 
## $scaling
## [1] "geometric"   "equilibrate" "integers"   
## 
## $sense
## [1] "maximize"
## 
## $simplextype
## NULL
## 
## $timeout
## [1] 0
## 
## $verbose
## [1] "neutral"
set.objfn(model, c(14,17,17,15,40,12,14,10))
set.bounds( model, lower = c(0,0,0,0,0,0,0,0), upper = c(1,1,1,1,1,1,1,1 ))
set.type(model, c(1,2,3,4,5,6,7,8), type=c("real"))
coef1<- c(12,54,6,6,30,6,48,36)
add.constraint(model, coef1, "<=", 40)
coef2<- c(3,7,6,2,35,6,4,3)
add.constraint(model, coef2, "<=", 20)
print(model)
## Model name: Capital Rationing
##             C1    C2    C3    C4    C5    C6    C7    C8        
## Maximize    14    17    17    15    40    12    14    10        
## R1          12    54     6     6    30     6    48    36  <=  40
## R2           3     7     6     2    35     6     4     3  <=  20
## Kind       Std   Std   Std   Std   Std   Std   Std   Std        
## Type      Real  Real  Real  Real  Real  Real  Real  Real        
## Upper        1     1     1     1     1     1     1     1        
## Lower        0     0     0     0     0     0     0     0
solve(model)
## [1] 0
get.objective(model)
## [1] 63
get.variables(model)
## [1] 1.00000000 0.00000000 1.00000000 1.00000000 0.06666667 1.00000000
## [7] 0.16666667 0.00000000
get.constraints(model)
## [1] 40 20
solution<- as.data.frame(get.primal.solution(model))

names(solution) <- c(" Results")
rownames(solution)<- c("Maximized Result", "Constraint1","Constraint2", "Proj1","Proj2","Proj3",
                       "Proj4","Proj5","Proj6","Proj7","Proj8")

kable(solution, format = "markdown", digits = 4, align = "c")
Results
Maximized Result 63.0000
Constraint1 40.0000
Constraint2 20.0000
Proj1 1.0000
Proj2 0.0000
Proj3 1.0000
Proj4 1.0000
Proj5 0.0667
Proj6 1.0000
Proj7 0.1667
Proj8 0.0000

source: http://www.swlearning.com/economics/mcguigan/mcguigan9e/web_chapter_b.pd