2008-12-11 137 views
7

有沒有人知道R的優化包(類似於NU + +的S +)?R的優化軟件包

+8

downvote for'這個問題沒有顯示任何研究努力' – Spacedman 2013-01-06 09:51:22

+1

我「可能」已經提出了這個很長的問題,談論我所需要的細節,以及我是如何研究linprog,並發現它想要的。或者我可以問一個非常簡單的問題。我堅持這一決定。順便說一句,雖然我不同意你低估我的原因,但至少你有禮貌給出一個理由。謝謝你的禮貌。 – wcm 2013-01-09 21:02:12

回答

5

由Galwegian提及的Linprog專注於通過單純形算法進行線性編程。此外,如果您正在進行投資組合優化,您可能對fPortfolio感興趣。

4

嘗試lpSolve與R.

一個簡單的例子:

# Maximize 
# x1 + 9 x2 + x3 
# Subject to: 
# x1 + 2 x2 + 3 x3 <= 9 
# 3 x1 + 2 x2 + 2 x3 <= 15 
f.obj <- c(1, 9, 3) 
f.con <- matrix(c(1, 2, 3, 3, 2, 2), nrow = 2, byrow = TRUE) 
f.dir <- c("<=", "<=") 
f.rhs <- c(9, 15) 

lp("max", f.obj, f.con, f.dir, f.rhs) 
lp("max", f.obj, f.con, f.dir, f.rhs)$solution 
5

你也應該嘗試Rglpk包解決LP問題GLPK (GNU Linear Programming Kit)

一個例子:

## Simple linear program. 
## maximize: 2 x_1 + 4 x_2 + 3 x_3 
## subject to: 3 x_1 + 4 x_2 + 2 x_3 <= 60 
##    2 x_1 + x_2 + x_3 <= 40 
##    x_1 + 3 x_2 + 2 x_3 <= 80 
##    x_1, x_2, x_3 are non-negative real numbers 

obj <- c(2, 4, 3) 
mat <- matrix(c(3, 2, 1, 4, 1, 3, 2, 2, 2), nrow = 3) 
dir <- c("<=", "<=", "<=") 
rhs <- c(60, 40, 80) 
max <- TRUE 

Rglpk_solve_LP(obj, mat, dir, rhs, max = max) 

右輸出:
(注意$status與關於溶液狀態的信息的整數返回如果控制參數canonicalize_status被設定(缺省值),那麼它會爲返回0找到最佳解決方案,否則爲非零;如果控制參數設置爲FALSE,它將返回GLPK狀態碼)。

$optimum 
[1] 76.66667 

$solution 
[1] 0.000000 6.666667 16.666667 

$status 
[1] 0