2017-10-14 8 views
1

패키지를 r과 함께 사용하고 있는데 목적 함수를 내 필요에 맞게 변경하는 방법을 알 수 없습니다. 첫 번째 모델은 실행 중이지만 목적은 실제로 필요한 것이 아닙니다.ompr objective : rowsums의 분산 최소화

library(ompr) 
library(magrittr) 
library(ROI.plugin.glpk) 
library(ompr.roi) 

anz_schulen <- 50 
anz_sfkz <- 10 


# This model works 
model <- MIPModel() %>% 
add_variable(x[i, j], i = 1:anz_schulen, j = 1:anz_sfkz, type = "binary") %>% 
set_objective(sum_expr(x[i, j], i = 1:anz_schulen, j = 1:anz_sfkz), sense="max") %>% 
add_constraint(sum_expr(x[i, j], i = 1:anz_schulen) <= 7, j = 1:anz_sfkz) %>% 
add_constraint(sum_expr(x[i, j], i = 1:anz_schulen) >= 1, j = 1:anz_sfkz) %>% 
add_constraint(sum_expr(x[i, j], j = 1:anz_sfkz) <= 10, i = 1:anz_schulen) %>% 
add_constraint(sum_expr(x[i, j], j = 1:anz_sfkz) >= 1, i = 1:anz_schulen) 

erg <- solve_model(model, solver=with_ROI(solver = "glpk")) 

최소 x의 행 수의 분산이 필요합니다. 어떻게하는지 압니까?

model <- MIPModel() %>% 
add_variable(x[i, j], i = 1:anz_schulen, j = 1:anz_sfkz, type = "binary") %>% 
# I NEED SOMETHING LIKE: substitute(var(rowSums(x[i,j])) ... THIS IS NOT WORKING 
set_objective(substitute(var(rowSums(x[i,j]))), sense="min") %>% 
add_constraint(sum_expr(x[i, j], i = 1:anz_schulen) <= 7, j = 1:anz_sfkz) %>% 
add_constraint(sum_expr(x[i, j], i = 1:anz_schulen) >= 1, j = 1:anz_sfkz) %>% 
add_constraint(sum_expr(x[i, j], j = 1:anz_sfkz) <= 10, i = 1:anz_schulen) %>% 
add_constraint(sum_expr(x[i, j], j = 1:anz_sfkz) >= 1, i = 1:anz_schulen) 

고마워요!

답변

0

ompr에서 선형 목표 기능 만 처리 할 수 ​​있기 때문에 분산 최소화는 효과가 없습니다. 당신은 2 차 목적 함수와 함께 패키지 ROI을 사용할 수 있습니다. (또한 2 차 목적 함수를 처리 할 수있는 솔버를 사용하십시오.)

또 다른 옵션은 제곱 대신 평균의 편차의 선형 합계를 absolute value으로 최소화하는 것입니다. 저는 이것이 모두 선형 (in) 평등으로 공식화 될 수 있다고 믿습니다. 그러나 귀하의 유스 케이스에 그것이 맞는지 확실하지 않습니다.