當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。