r - ompr 目标 : minimize variance of rowsums

标签 r glpk mixed-integer-programming

我正在将 ompr 包与 r 一起使用,但我不知道如何根据我的需要更改目标函数。第一个模型正在运行,但目标并不是我真正需要的。

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)

谢谢!

最佳答案

最小化方差在 ompr 中不起作用,因为它只能处理线性目标函数。您可以尝试将包 ROI 与二次目标函数一起使用(并使用可以处理二次目标函数的求解器)。

另一种选择是最小化 absolute value偏离均值的线性和,而不是平方和。我相信这都可以表述为线性(不)等式。但我不确定这对您的用例是否有意义。

关于r - ompr 目标 : minimize variance of rowsums,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748027/

相关文章:

C 数组被覆盖?

algorithm - 加权箱包装/背包优化

callback - Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定(bind)

linear-programming - LP/MILP (CPLEX) 困难

r - 如何从 R 中的线性模型在特定 X 处生成随机 Y?

Python cvxopt glpk ilp 返回第一个可行解

r - 如何在 dplyr 工作流中为 ggplot2 的比例编写函数?

c++ - 让 GLPK 在程序终止时清理的最干净的方法

根据引用矩阵中的列、行名称,用 0 替换值是对称矩阵

r - 如何在ggplot2中将线从实线转换为点线