Skip to content

Instantly share code, notes, and snippets.

@mvw
Last active October 31, 2015 02:52
Show Gist options
  • Select an option

  • Save mvw/d7e0cbbc4caead292c96 to your computer and use it in GitHub Desktop.

Select an option

Save mvw/d7e0cbbc4caead292c96 to your computer and use it in GitHub Desktop.
# lp-alloc2.R
#
# Allocate 3 employes to 4 departments
# Using flexible quota
#
# usage:
# source('lp-alloc2.R')
# help:
# http://lpsolve.r-forge.r-project.org/
# ?make.lp
# ls("package:lpSolveAPI")
# installation:
# install.packages("lpSolveAPI")
library(lpSolveAPI)
#lprec <- make.lp(0,30, "full")
lprec <- make.lp(0,42)
lp.control(lprec,sense="max")
# objective function "R"
R = c(
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0,
550, 1000, 300, 1200,
900, 1250, 200, 900,
1000, 1250, 325, 450
)
set.objfn(lprec,R)
# A
add.constraint(lprec,
c(
1,1,1,1,1, 1,1,1,1,1,
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
"=", 1)
add.constraint(lprec,
c(
0,0,0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1,1,1,
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
"=", 1)
add.constraint(lprec,
c(
0,0,0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1,1,1,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
"=", 1)
# B
add.constraint(lprec,
c(
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
">=", 1)
add.constraint(lprec,
c(
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
">=", 1)
add.constraint(lprec,
c(
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
">=", 1)
add.constraint(lprec,
c(
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0,0,0,0,
0,0,0,0,
0,0,0,0
),
">=", 1)
# C
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
1,1,1,1,
0,0,0,0,
0,0,0,0
),
"<=", 1)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
1,1,1,1,
0,0,0,0
),
"<=", 1)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
0,0,0,0,
1,1,1,1
),
"<=", 1)
# D1
add.constraint(lprec,
c(
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
-1,0,0,0,
0,0,0,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,-1,0,0,
0,0,0,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,-1,0,
0,0,0,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,-1,
0,0,0,0,
0,0,0,0
),
">=", 0)
# D2
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
-1,0,0,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
0,-1,0,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
0,0,-1,0,
0,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0,0,0,0,
0,0,0,-1,
0,0,0,0
),
">=", 0)
# D3
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
1, 0, 0, 0,
1, 1, 1,
0, 0,
0,
0,0,0,0,
0,0,0,0,
-1,0,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 1, 0, 0,
1, 0, 0,
1, 1,
0,
0,0,0,0,
0,0,0,0,
0,-1,0,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 1, 0,
0, 1, 0,
1, 0,
1,
0,0,0,0,
0,0,0,0,
0,0,-1,0
),
">=", 0)
add.constraint(lprec,
c(
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0,
0, 0, 0, 1,
0, 0, 1,
0, 1,
1,
0,0,0,0,
0,0,0,0,
0,0,0,-1
),
">=", 0)
RowNames <-
c(
"A1", "A2", "A3",
"B1", "B2", "B3", "B4",
"C1", "C2", "C3",
"D1A", "D1B", "D1C", "D1D",
"D2A", "D2B", "D2C", "D2D",
"D3A", "D3B", "D3C", "D3D"
)
ColNames <-
c(
"X1A", "X1B", "X1C", "X1D",
"X1AB", "X1AC", "X1AD",
"X1BC", "X1BD",
"X1CD",
"X2A", "X2B", "X2C", "X2D",
"X2AB", "X2AC", "X2AD",
"X2BC", "X2BD",
"X2CD",
"X3A", "X3B", "X3C", "X3D",
"X3AB", "X3AC", "X3AD",
"X3BC", "X3BD",
"X3CD",
"Q1A", "Q1B", "Q1C", "Q1D",
"Q2A", "Q2B", "Q2C", "Q2D",
"Q3A", "Q3B", "Q3C", "Q3D"
)
dimnames(lprec) <- list(RowNames, ColNames)
set.type(lprec,
c(
1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30
),
"binary"
)
set.type(lprec,
c(
31,32,33,34,
35,36,37,38,
39,40,41,42
),
"real"
)
print("saving model as model2.txt ..")
write.lp(lprec, "model2.txt")
solve(lprec)
print("Objective Function:")
print(R)
print("Objective:")
print(get.objective(lprec))
print(ColNames)
print(get.variables(lprec))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment