Price bundling using Genetic Algorithm in R

Bundling products is a way to get the customers more purchases than they would have without bundling. Deciding bundle prices to optimize revenue is the goal of business while making a price bundle. In this paper, a method of obtaining optimal bundle prices using Genetic Algorithm (GA) to maximize revenue is presented. In the model, it is assumed that consumers make their decision based on the concept of consumer surplus. An example of Cable Company bundling Internet, TV, and Cell phone services is taken into consideration to prepare a price bundle model and optimized by GA. The result indicates that GA can be used as an effective optimizer to get optimal price bundles.

Data set: Values that customers assigned for different products
Flow chart of GA
Result of experiment 1
Result of experiment 2
#Load Customer data
Customer <- read.csv(file.csv, sep = ",", header = T)
#Price <- c(35.0,75.0,64.0,75.0,82.0,92.0,100.0)
attach(Customer)
library(matrixStats)
Func <- function(x)
{
MarketSur <- cbind(Internet-x[1],TV-x[2],Cell.Phone-x[3],
Internet+TV-x[4], Internet+Cell.Phone-x[5],
TV+Cell.Phone-x[6], Internet+TV+Cell.Phone-x[7])
MaxSur <- rowMaxs(MarketSur)
Prod <- function(MarketSur)
{
s <- dim(MarketSur)
Mt <- vector("numeric", s[1])
for(i in 1:s[1]){
if(max(MarketSur[i,])<0)
{
Mt[i] <- 0
}
else
{
Mt[i] <- which.max(MarketSur[i,])
}

}
return(Mt)
}
Bt <- Prod(MarketSur)
Rev <- vector("numeric",77)
#Rev <- x[Bt]
for(i in 1:77){
if(Bt[i] == 0)
{
Rev[i] = 0
}
else{
Rev[i] = x[Bt[i]]
}
}
Pen <-vector("numeric",12)
Pen[1] <- x[1]-x[4]
Pen[2] <- x[1]-x[5]
Pen[3] <- x[1]-x[7]
Pen[4] <- x[2]-x[4]
Pen[5] <- x[2]-x[6]
Pen[6] <- x[2]-x[7]
Pen[7] <- x[3]-x[5]
Pen[8] <- x[3]-x[6]
Pen[9] <- x[3]-x[7]
Pen[10] <- x[4]-x[7]
Pen[11] <- x[5]-x[7]
Pen[12] <- x[6]-x[7]
for(i in 1:12)
{
if(Pen[i]>0)
{
Pen[i] <- Pen[i]
}
else
{
Pen[i] <- 0
}
}
TotalRev <- sum(Rev) - 500*sum(Pen,na.rm=F)
return(TotalRev)
}

#GAmodel <- rbga.bin(size = 7, popSize = 200, iters = 100, mutationChance = 0.01,
#elitism = T, evalFunc = EvalFunc)
## calculate the optimum solution using Genetic Algorithm
#numvar <- 7
#resultGA <- GA(EvalFunc, optimType="MAX", numVar, numPopulation=20,
#maxIter=100, rangeVar, Pm, Pc)
L <- c(30,30,30,30,30,30,30)
U <- c(100,100,100,100,100,100,100)
suggestedValue <-c(50,35,65,71,71,71,85)
GA <- ga(type = "real-valued", fitness = Func,
lower = L, upper = U,
popSize = 2000, maxiter = 500)
summary(GA)
plot(GA)

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store