トップ > 製品概要 > 派生製品 > RNUOPT

RNUOPT

RNUOPT カタログ

RNUOPT のカタログをダウンロードできます。

RNUOPT について

RNUOPT は統計解析ソフトウェア R をインターフェースとする汎用数理計画法パッケージです。内部の計算エンジンには汎用数理計画法パッケージ Numerical Optimizer と同等のものを用いています。

RNUOPT は株式会社りそな銀行様(インタビュー記事はこちら)等多くのユーザー様にご活用頂いております。

RNUOPT は R のインタプリタ環境から、モデリング言語 SIMPLE による最適化モデルの記述と実行が可能です。

<< SIMPLE によるロジスティック回帰モデルの記述と実行例 >>
> 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 Numerical Optimizer]
MSI Numerical 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 のデータセットはそのまま Numerical Optimizer に受け渡して最適化の入力データとして用いることができます。

<< R 上の vector を Numerical 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 を Numerical 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 }

また、RNUOPT で得られた答えは 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)
} # SIMPLE で記述したナップサックモデル
> 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 Numerical Optimizer]
MSI Numerical 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                                         6
(#INTEGER/DISCRETE)                                         6
NUMBER_OF_FUNCTIONS                                         2
PROBLEM_TYPE                                     MAXIMIZATION
METHOD                                                SIMPLEX

[Progress]
<preprocess begin>.........<preprocess end>
<iteration begin>

#1              lo:      -0
              time:  0.1s:mem(MB)=82/66:avail(MB)=14558/134217067
                                         llen:0 #prob:0 #piv:0

=== begin wcsp ===
# (hard/soft) = 0/22
# iteration = 1000
# time =  0.00 (s), succ = 1
=== end wcsp ===
#2              lo:      46
              time:  0.1s:mem(MB)=82/66:avail(MB)=14558/134217067
                                         llen:0 #prob:1 #piv:0

<iteration end>

[Result]
STATUS                                                OPTIMAL
VALUE_OF_OBJECTIVE                                         46
SIMPLEX_PIVOT_COUNT                                         0
PARTIAL_PROBLEM_COUNT                                       1
ELAPSED_TIME(sec.)                                       0.09
> 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

RNUOPT は R が本来持っているデータ処理、統計解析機能、優れたグラフィックスなどを駆使して最適化と連係した分析が可能です。より詳細な機能についてはこちらのページからお問い合わせください。

対応 R バージョン

R 2.12.0 - R 3.4.3 (32 bit build・64 bit build)に対応しております。
詳細についてはお問い合わせください。

What's New

お問い合わせ

RNUOPT に関しましてはこちらのページからお問い合わせください。