我想进行线性优化。我的问题表述不是100%正确的,因此,我将尝试在本文中进行解释。 我的输入数据集是DS,具有六个t槽和两行,如下所示。
t1 t2 t3 t4 t5 t6
451 432 470 450 530 420
0 0 0 50 50 50
目标函数是查找列总和值的最大值的最小值。例如,上述数据集的最大列总和为580,因此,目标函数将基于约束最小化此最大值。有两个约束,第一个约束,优化数据集的第一行等于原始数据集451 432 470 450 530 420;第二约束,新优化数据集的第二行总和等于原始数据集的第二行总和。约束条件简短地意味着第一行应该是相同的,第二行的值可以从一个插槽移到另一个插槽以实现最小目标函数。
我试图用数学方法将上述问题写成如下:
min z = max(colsum(DS))
受制于:
DS_new [1,] == DS [1,]
Sum(DS_new [2,])== Sum(DS [2,])
R中的代码为:
DS <- mydataset
DS_new <- c()
P <- max(colSums(DS))
library(lpSolve)
objective.in <- c(P)
const.mat <- matrix(c(DS_new[1,],sum(DS_new[2,])), nrow=2,
byrow=TRUE)
const.rhs <- c(DS[1,],sum(DS[2,]))
const.dir <- c("==", "==")
optimum <- lp(direction="min", objective.in, const.mat,
const.dir, const.rhs)
输出为:
> optimum
错误:找不到可行的解决方案
但是,我想要的输出是:
DS
t1 t2 t3 t4 t5 t6
1 451 432 470 450 530 420
2 50 50 50 0 0 0
上述输出数据集的最大列总和为530。