2016-02-29 2 views
2

Я попытался использовать пакет R LPSolve и, в частности, функцию lp.transport для решения проблемы оптимизации. В моем фиктивном примере ниже у меня есть 5 офисных сайтов, которые мне нужны для работы с минимальным количеством сотрудников, и я создал матрицу затрат, которая определяет расстояние от каждого сотрудника до офиса. Я хочу свести к минимуму общее расстояние, пройденное на работу, при минимальном количестве сотрудников на офис.R Оптимизация - целочисленное программирование

Первоначально это работало, поскольку я рассматривал всех сотрудников как равные (1). однако проблемы начались, когда я оцениваю каждого сотрудника тем, насколько они эффективны. Например, теперь я хочу сказать, что officeX нуждается в эквиваленте 2 инженеров, которые могут состоять из 4 инженеров, которые на 50% эффективны или 1, что на 200% эффективнее. Когда я это сделаю, однако найденное решение разделит сотрудника на несколько офисов, мне нужно дополнительное ограничение, чтобы наложить на сотрудника только 1 офис. Во всяком случае, мы надеемся, что достаточно фон здесь мой пример:

Employee <- c("Jim","John","Jonah","James","Jeremy","Jorge") 
Office1 <- c(2.58321505105556, 5.13811249390279, 2.75943834864996, 
     6.73543614029559, 6.23080251653027, 9.00620341764497) 
Office2 <- c(24.1757667923894, 19.9990724784926, 24.3538456922105, 
     27.9532073293925, 26.3310994833106, 14.6856664813007) 
Office3 <- c(38.6957155251069, 37.9074293509861, 38.8271000719858, 
     40.3882569566947, 42.6658938732098, 34.2011184027657) 
Office4 <- c(28.8754359274453, 30.396841941228, 28.9595182970988, 
     29.2042274337124, 33.3933900645023, 28.6340025144932) 
Office5 <- c(49.8854888720157, 51.9164328512659, 49.948290261029, 
     49.4793138594302, 54.4908258333456, 50.1487397648236) 

#create CostMatrix 
costMat<-data.frame(Employee,Office1, Office2, Office3, Office4, Office5) 

#efficiency is the worth of employees, eg if 1 they are working at 100% 
#so if for example I wanted 5 Employees 
#working in a office then I could choose 5 at 100% or 10 working at 50% etc... 
efficiency<-c(0.8416298, 0.8207991, 0.7129663, 1.1406839, 1.3868177, 1.1989748) 

#Uncomment next line to see the working version based on headcount 
#efficiency<-c(1,1,1,1,1,1) 

#Minimum is the minimum number of Employees we want in each office 
minimum<-c(1, 1, 2, 1, 1) 

#solve problem 
opSol <-lp.transport(cost.mat = as.matrix(costMat[,-1]), 
       direction = "min", 
       col.signs = rep(">=",length(minimum)), 
       col.rhs = minimum, 
       row.signs = rep("==", length(efficiency)), 
       row.rhs = efficiency, 
       integers=NULL) 

#view solution 
opSol$solution 

# My issue is one employee is being spread across multiple areas, 
#what I really want is a extra constraint that says that in a row there 
# can only be 1 non 0 value. 

ответ

1

Я не думаю, что это больше не проблема транспортировки. Однако вы все еще можете решить эту проблему как модель MIP: enter image description here

+0

Привет, Эрвин, можете ли вы предложить пакет в R, на который я могу попытаться реализовать это? – Tom

+0

Вы можете использовать LpSolve. –

+0

Привет, Эрвин, я борюсь с синтаксисом. Можете ли вы привести пример? Спасибо Tom – Tom

 Смежные вопросы

  • Нет связанных вопросов^_^