当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R simplex 线性规划问题的单纯形法


R语言 simplex 位于 boot 包(package)。

说明

此函数将在 A1%*%x <= b1A2%*%x >= b2A3%*%x = b3x >= 0 约束下优化线性函数 a%*%x 。最大化或最小化都是可能的,但默认为最小化。

用法

simplex(a, A1 = NULL, b1 = NULL, A2 = NULL, b2 = NULL, A3 = NULL,
        b3 = NULL, maxi = FALSE, n.iter = n + 2 * m, eps = 1e-10)

参数

a

长度为 n 的向量,给出目标函数的系数。

A1

类型约束的 m1 by n 系数矩阵。

b1

长度为 m1 的向量,给出 约束的右侧。如果给出了A1,则需要此参数,否则将被忽略。 b1 中的所有值都必须为非负数。

A2

类型约束的 m2 by n 系数矩阵。

b2

长度为 m2 的向量,给出 约束的右侧。如果给出了A2,则需要此参数,否则将被忽略。 b2 中的所有值都必须为非负数。请注意,约束x >= 0 是自动包含的,因此不应在此处重复。

A3

用于等式约束的系数矩阵 m3 by n

b3

长度为 m3 的向量给出等式约束的右侧。如果给出了A3,则需要此参数,否则将被忽略。 b3 中的所有值都必须为非负数。

maxi

一个逻辑标志,如果FALSE(默认)则指定最小化,否则指定最大化。如果maxiTRUE,则通过将目标函数系数更改为其负数,将最大化问题重新转换为最小化问题。

n.iter

单纯形法每个阶段要进行的最大迭代次数。默认为 n+2*(m1+m2+m3)

eps

用于相等测试的浮点容差。

细节

该函数采用的方法是两阶段单纯形法。如果存在 或等式约束,则不容易找到初始可行解。为了找到可行的解决方案,在每个 或等式约束中引入人工变量,并将辅助目标函数定义为这些人工变量的总和。如果存在一组约束的可行解,则当所有人工变量均为 0 时,辅助目标将被最小化。然后将这些变量丢弃,并从辅助问题的解开始解决原始问题。如果唯一的约束是 形式,则原点是可行解,因此可以省略第一阶段。

"simplex" 的对象:参见 simplex.object

注意

这里采用的方法仅适用于相对较小的系统。此外,如果可能的话,约束的数量应该减少到最少,以加快执行时间,该时间大约与约束数量的立方成正比。特别是,如果存在 x[i] >= b2[i] 形式的任何约束,则应通过设置 x[i] = x[i]-b2[i] 来省略它们,相应地更改所有约束和目标函数,然后在找到解决方案后转换返回。

例子

# This example is taken from Exercise 7.5 of Gill, Murray and Wright (1991).
enj <- c(200, 6000, 3000, -200)
fat <- c(800, 6000, 1000, 400)
vitx <- c(50, 3, 150, 100)
vity <- c(10, 10, 75, 100)
vitz <- c(150, 35, 75, 5)
simplex(a = enj, A1 = fat, b1 = 13800, A2 = rbind(vitx, vity, vitz),
        b2 = c(600, 300, 550), maxi = TRUE)

参考

Gill, P.E., Murray, W. and Wright, M.H. (1991) Numerical Linear Algebra and Optimization Vol. 1. Addison-Wesley.

Press, W.H., Teukolsky, S.A., Vetterling, W.T. and Flannery, B.P. (1992) Numerical Recipes: The Art of Scientific Computing (Second Edition). Cambridge University Press.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Simplex Method for Linear Programming Problems。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。