RSIMPLE は統計解析ソフトウェア R をインターフェースとする汎用数理計画法パッケージです。内部の計算エンジンには汎用数理計画法パッケージ Nuorium Optimizer と同等のものを用いています。
RSIMPLE は 株式会社りそな銀行様 等多くのユーザー様にご活用頂いております。
RSIMPLE は R のインタプリタ環境から、モデリング言語 C++SIMPLE による最適化モデルの記述と実行が可能です。
RSIMPLE による問題の記述例
ロジスティック回帰モデルの記述と実行例
> LogReg
function(X.d, t.d)
{
M <- Set()
i <- Element(set=M)
L <- Set()
l <- Element(set=L)
X <- Parameter(index=dprod(l,i), X.d)
t <- Parameter(index=l, t.d)
a <- Variable(index=i)
a0 <- Variable()
y <- Expression(index=l)
y[l] ~ exp(Sum(a[i]*X[l,i], i)+a0) / (1+exp(Sum(a[i]*X[l,i], i)+a0))
mle <- Objective(type="maximize")
mle ~ Sum(t[l]*log(y[l]) + (1-t[l])*log(1-y[l]), l)
}
> sys <- System(LogReg, LogReg.X, LogReg.t) # 展開
Evaluating LogReg(LogReg.X,LogReg.t) ... ok!
[Expand Constraints and Objectives]
objective (1/1) name="mle"
> sol <- solve(sys) # 求解
[About Nuorium Optimizer]
MSI Nuorium Optimizer xx.x.x (NLP/LP/IP/SDP module)
<with META-HEURISTICS engine "wcsp"/"rcpsp">
<with Netlib BLAS>
, Copyright (C) 1991 NTT DATA Mathematical Systems Inc.
[Problem and Algorithm]
NUMBER_OF_VARIABLES 5
NUMBER_OF_FUNCTIONS 1
PROBLEM_TYPE MAXIMIZATION
METHOD TRUST_REGION_IPM
[Progress]
<preprocess begin>.........<preprocess end>
<iteration begin>
res=3.6e-02 .... 1.9e-04 .... 1.5e-06 .... 1.1e-08 3.9e-09
<iteration end>
[Result]
STATUS OPTIMAL
VALUE_OF_OBJECTIVE -5.643633028e-06
ITERATION_COUNT 16
FUNC_EVAL_COUNT 20
FACTORIZATION_COUNT 20
RESIDUAL 3.871076808e-09
ELAPSED_TIME(sec.) 0.03
最も基本的な vector、array、matrix のデータセットはそのまま Nuorium Optimizer に受け渡して最適化の入力データとして用いることができます。
R 上の vector を Nuorium Optimizer に渡す例
> weight <- c(3, 7, 10, 15, 20, 30)
> weight
[1] 3 7 10 15 20 30
> S <- Set() # インデックス集合の定義
> weight.simple <- Parameter(index=S, weight)
> weight.simple
1 2 3 4 5 6
3 7 10 15 20 30
attr(,"indexes")
[1] "*"
> S
{ 1 2 3 4 5 6 }
R 上の matrix を Nuorium Optimizer に渡す例
> m <- matrix(1:12, 3, 4)
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> I <- Set()
> J <- Set()
> q <- Parameter(index=dprod(I,J), m)
> q
1 2 3 4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
attr(,"indexes")
[1] "*" "*"
> I
{ 1 2 3 }
> J
{ 1 2 3 4 }
また、RSIMPLE で得られた答えは R のデータセットとして取り出すことができます。
最適化の結果を R 上のデータとして取り出す例
> knapex <- function(weight, price)
{
S <- Set()
price <- Parameter(index=S, as.array(price))
weight <- Parameter(index=S, as.array(weight))
x <- IntegerVariable(index=S, type=binary)
j <- Element(set=S)
Sum(weight[j]*x[j], j) <= 50
v <- Objective(type="maximize")
v ~ Sum(price[j]*x[j], j)
} # ナップサック問題
> weight <- c(3, 7, 10, 15, 20, 30)
> price <- c(4, 7, 12, 13, 17, 15)
> s <- System(model=knapex, weight, price) # 展開
Evaluating knapex(weight,price) ... ok!
[Expand Constraints and Objectives]
constraint (1/2) name=""
objective (2/2) name="v"
> sol <- solve(s) # 解く
[About Nuorium Optimizer]
MSI Nuorium Optimizer xx.x.x
<with META-HEURISTICS engine "wcsp"/"rcpsp">
<with Netlib BLAS>
, Copyright (C) 1991 NTT DATA Mathematical Systems Inc.
[Problem and Algorithm]
NUMBER_OF_VARIABLES 6
(#INTEGER/DISCRETE) 6
NUMBER_OF_FUNCTIONS 2
PROBLEM_TYPE MAXIMIZATION
METHOD SIMPLEX
[Progress]
<preprocess begin>.........<preprocess end>
<iteration begin>
Coefficient Statistics (after scaling)
Coefficient range [min,max] : [2.70e-01,2.70e+00]
RHS and bounds [min,max] : [1.00e+00,4.50e+00]
Objective [min,max] : [3.53e-01,1.50e+00]
#1 +inf -0 +inf 0.0 0 80 sol: init
<<wcsp tabu search begin>>
number of column singleton : 0
number of column selection : 0
Modify coefficients
<preprocess begin>..<preprocess end>
preprocessing time: 0(s)
<iteration begin>
--- TryCount = 1 ---
# random seed = 1
(hard/soft) penalty= 0/26, time= 0.00(s)
<greedyupdate begin>......<greedyupdate end>
greedyupdate time= 0(s)
--- End Phase-I iteration ---
# (hard/soft) penalty= 0/22
# cpu time = 0.00/0.00(s)
# iteration = 0/1000
<iteration end>
# (hard/soft) = 0/22
# iteration = 1000
# time = 0.00 (s), succ = 1
<<wcsp tabu search end>>
#2 +inf 46 +inf 0.0 0 80 sol: wcsp
<iteration end>
[Result]
STATUS OPTIMAL
VALUE_OF_OBJECTIVE 46
SIMPLEX_PIVOT_COUNT 0
PARTIAL_PROBLEM_COUNT 1
ELAPSED_TIME(sec.) 0.01
> xopt <- as.array(current(s, x)) # 解を array として取りだす
> xopt
1 2 3 4 5 6
1 0 1 1 1 0
attr(,"indexes")
[1] "*"
> sum(weight*xopt) # 総重量
[1] 48
> sum(price*xopt) # 総コスト
[1] 46
RSIMPLE は R が本来持っているデータ処理、統計解析機能、優れたグラフィックスなどを駆使して最適化と連係した分析が可能です。より詳細な機能については 資料請求・お問い合わせ よりお問い合わせください。
対応 R バージョン
対応機種/OS のページをご覧ください。
マニュアル
RSIMPLE マニュアル をご覧ください。