【发布时间】:2017-03-16 15:09:30
【问题描述】:
我希望这封邮件能帮助您。
我正在尝试使用 lpSolveAPI R 包解决以混合整数程序形式表示的优化问题。但是,在目标函数和一些约束中都有指示函数。更具体地说,考虑以下优化问题:
min{ 2.8 * x1 + 3.2 * x2 + 3.5 * x3 +
17.5 * delta(x1) + 2.3 * delta(x2) + 5.5 * delta(x3) }
受制于:
0.4 * x1 + 8.7 * x2 + 4.5 * x3 <=
387 - 3 * delta(x1) - 1 * delta(x2) - 3 * delta(x3)
x1 <= 93 * delta(x1)
x2 <= 94 * delta(x2),
x3 <= 100 * delta(x3), and
x1, x2, and x3 are non-negative integers.
在这个问题中,对于 {1, 2, 3} 中的所有 i,如果 xi > 0,delta(xi) = 1,否则 delta(xi) = 0。
我目前的 R 代码是:
install.packages("lpSolveAPI")
library(lpSolveAPI)
a <- c(3, 1, 3)
b <- c(0.4, 8.7, 4.5)
q <- 387
M <- c(93, 94, 100)
A <- c(17.5, 2.3, 5.5)
h <- c(2.8, 3.2, 3.5)
Fn <- function(u1, u2, u3, u4){
lprec <- make.lp(0, 3)
lp.control(lprec, "min")
set.objfn(lprec, u1)
add.constraint(lprec, u2, "<=", u3)
set.bounds(lprec, lower = rep(0, 3), upper = u4)
set.type(lprec, columns = 1:3, type = "integer")
solve(lprec)
return(list(Soln = get.variables(lprec), MinObj = get.objective(lprec)))
}
TheTest <- Fn(u1 = h, u2 = b, u3 = q, u4 = M)
拜托,我想知道是否有人可以告诉我如何将 delta 函数放入此 R 代码中以解决上述优化问题。
罗德里戈。
【问题讨论】:
-
这是狄拉克“三角函数”?
-
或者它的整体。
-
它是一个指示函数 I(.),定义为:如果 x 在 A 中,则 I(x) = 1,否则 I(x) = 0,其中 A = (0, +infinity)。
-
Dirac delta 函数(又名 Heaviside 函数)支持 (-Inf, Inf) 但在其他方面具有相同的定义。在 R 中编写这样的结构通常很容易。这看起来不像 R 代码。它缺少任务。看起来更像是一个伪代码规范。
-
查看问题后(为了重新格式化为 SO 标准),我对 x1、x2、x3 是非负整数的联合要求以及您使用具有0 处的值为 1。
标签: r optimization mathematical-optimization linear-programming