【发布时间】:2020-02-18 21:24:28
【问题描述】:
我正在尝试使用 R 中的 constrOptim() 函数进行优化:
2x + 2y + 3z
受制于:
-2x + y + z <= 1
4x - y + 3z <= 3
x, y, z >= 0
到目前为止,我所拥有的是:
ui = matrix(c(2,-1,-1,-4, 1,-3, 1, 0, 0, 0, 1, 0, 0, 0, 1),
nrow = 5,
byrow = T)
ci = c(-1, -3, 0, 0, 0)
theta = c(0, 1, 0)
constrOptim(
theta = theta,
f = func,
ui = ui,
ci = ci)
这给了我“初始值不在可行区域内部”的错误。但是,如果我运行以下作为测试:
ui = matrix(c(2,-1,-1,-4, 1,-3, 1, 0, 0, 0, 1, 0, 0, 0, 1),
nrow = 5,
byrow = T)
ci = c(-1, -3, 0, 0, 0)
theta = c(0, 1, 0)
ui %*% theta - ci
我得到(0 4 0 1 0),这绝对是>=0。
我的问题是为什么我得到一个错误,告诉我ui %*% theta - ci 不是 >= 0,而它显然是?我错过了什么?
编辑:感谢Stéphane Laurent。
任何想法如何最好地在 R 中绘制可行区域?有什么好用的包吗?
【问题讨论】:
-
这是一个线性问题。使用 LP 求解器可以更好地解决此类问题。
标签: r optimization constraints linear-programming