トップ > 製品概要 > 派生製品 > 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!
Expanding objective  (1/1 name="mle")
> sol <- solve(sys) # 求解
NUOPT 12.?.?, Copyright (C) 1991-2010 Mathematical Systems Inc.
NUMBER_OF_VARIABLES                                         5
NUMBER_OF_FUNCTIONS                                         1
PROBLEM_TYPE                                     MAXIMIZATION
METHOD                                       TRUST_REGION_IPM
<preprocess begin>..........<preprocess end>
<iteration begin>
    res=3.6e-002 .... 1.9e-004 .... 1.5e-006 .... 1.1e-008  3.9e-009 
<iteration end>
STATUS                                                OPTIMAL
VALUE_OF_OBJECTIVE                          -5.643633028e-006
ITERATION_COUNT                                            16
FUNC_EVAL_COUNT                                            20
FACTORIZATION_COUNT                                        21
RESIDUAL                                     3.871076808e-009
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!
Expanding constraint (1/2)
Expanding objective  (2/2 name="v")
> sol <- solve(s) # 解く
NUOPT 12.?.?, Copyright (C) 1991-2010 Mathematical Systems Inc.
NUMBER_OF_VARIABLES                                         6
(#INTEGER/DISCRETE)                                         6
NUMBER_OF_FUNCTIONS                                         2
PROBLEM_TYPE                                     MAXIMIZATION
METHOD                                                SIMPLEX
<preprocess begin>..........<preprocess end>
<iteration begin>
        1.2B
    up:       48 lo:  -1e+050
                   time:  0.0s:mem(Mb)=56/34:avail(Mb)=1566/289
                                            llen:0 #prob:0 #piv:14
#1  up:       48 lo:       36 gap:
       12 time:  0.0s:mem(Mb)=56/34:avail(Mb)=1566/289
                                            llen:0 #prob:0 #piv:16
#2  up:       48 lo:       46 gap:
        2 time:  0.0s:mem(Mb)=56/34:avail(Mb)=1566/289
                                            llen:0 #prob:0 #piv:27
#3  up:       46 lo:       46 gap:
        0 time:  0.0s:mem(Mb)=56/34:avail(Mb)=1566/289
                                            llen:0 #prob:3 #piv:42

----- breakdown -----
BB        :     0.0(sec), call=2, succ=0
root/solve:     0.0(sec), call=1, succ=1, i=3
rounding  :     0.0(sec), call=1, succ=1, i=2
N.search  :     0.0(sec), call=1, succ=0
_____ breakdown _____

<iteration end>
STATUS                                                OPTIMAL
VALUE_OF_OBJECTIVE                                         46
SIMPLEX_PIVOT_COUNT                                        42
PARTIAL_PROBLEM_COUNT                                       3
ELAPSED_TIME(sec.)                                       0.02
> 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.15.3 for Microsoft Windows(32 bit build・64 bit build) や R 3.0.3 for Microsoft Windows(32 bit build・64 bit build)に対応しております。
詳細についてはお問い合わせください。

What's New

お問い合わせ

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