在R

时间:2019-03-19 13:06:20

标签: r optimization constraints nonlinear-optimization

我正在尝试在R中进行优化,以便在20天内在3台不同的机器上生产产品。有15个产品。目的是使总产量最大化。

数据具有所需的产量,并且使用每天要生产的PC乘以每台PC的重量和不同机器上所有产品在所有天中的总产量相乘得出的总产量,即20天考虑到所有机器,产品1的产量是7倍,那么其总产量将为(745 * 0.1 * 7),其中740是要生产的PC数量,0.1是MT的重量。

这将针对所有15种产品完成,因此我们将获得所有15种产品的总产量的目标函数。

现在有某些限制,例如机器1可以生产1到4的产品,机器2可以生产5到12的产品,3可以生产7到15的产品。每天每台机器的产品顺序必须越来越多,每个产品的总产量应大于所需的产量。另外,机器3-机器2应该大于0。

现在,当我尝试在R中使用任何优化算法时,它将初始值作为向量,而我有一个矩阵,并且在尝试定义约束时:

const_m1 <- function(x){
f <- NULL
f[1] <- x[,1]
f[2] <- -(x[,1]-5)
f[3] <- x[,2]-6
f[4] <- -(x[,2]-13)
f[5] <- (x[,3]-8)
f
 }

然后,因为它是向量,所以只存储一个值,但是实际上,由于我们有20天的时间,每个约束将具有20个值(代码仅给出了一些约束)。我试图使用auglag,因此定义了这样的约束。我不想为每台机器重复20次约束。 我应该如何去做。 另外,我尝试将约束写为

const_m11 <- function(x){
f <- NULL
f <- rbind(f,-(x[,1]-1))
f <- rbind(f,x[,1]-4)
f <- rbind(f,-(x[,2]-5))
f <- rbind(f,x[,2]-12)
f <- rbind(f,-(x[,3]-7))
return(f)
 }

同样,这只是约束的一部分,此处未提及所有约束。我尝试使用软件包solnl()中的函数NlcOptim,但这给出了一个错误:$运算符对于我无法理解的原子向量无效。请建议我应该如何定义约束,以及哪个函数适合解决我的问题。

0 个答案:

没有答案