トップ > 製品概要 > Numerical Optimizer FAQ

Numerical Optimizer FAQ

INDEX
一般的な質問
数理計画法って?
Numerical Optimizerは何をするの?
どこで作られたソフト?
導入実績と適用事例は?
価格とライセンス形態は?
どのようなプラットフォームで動作するの?
(株)NTT データ数理システムはパッケージ販売のみ?
モデル記述とデータについて
モデルとデータって何?
SIMPLEの記述はどんなもの?
新しい言語を覚えるのはちょっと...?
モデルは自分で書くの?(数式はちょっと...)
データはどうやって受け渡しするの?
Numerical Optimizerを使ってアプリケーションを作成することは可能?
数理計画法アルゴリズムについて
Numerical Optimizerが解ける数理計画問題の範囲は?
大域的最適解は求まるの?
アルゴリズムについてはよく知らないのだけど...
どの程度の規模の問題がどのくらいの速度で解けるの?
非線形関数の微係数は与える必要があるの?
扱っている問題には折れ線関数や条件判定が含まれるのだけど...
扱っている問題は式で表現できないのだけど...
その他
Numerical Optimizerの持っているGUI(Ver5以降)の機能は?
SNUOPTとは?

その他

Numerical Optimizerの持っているGUI(Ver5以降)の機能は?

Numerical Optimizerの Windows 版にはGUIが付属しており、Ver5 以降では数理計画モデルやデータに対応するアイコンを線でつなぐという操作で直観的に最適化の実行を表現できます。 V14 からは Visual Analytics Platform 上で動作するようになり、操作性が向上しております。

Numerical Optimizer (Windows 版) の GUI の操作例

Numerical Optimizer (Windows 版) の GUI での解の表示例 上の図の例を実行すると、解は左の図のような形式で表示されます。

解として得られる表に関して、
  • 選別(フィルタリング)
  • 連結(マージ)
  • 並べ替え(ソート)

をはじめとして、様々な方法で加工が可能です。

Numerical Optimizer (Windows 版) の GUI でのフィルタリング


SNUOPTとは?

Numerical Optimizerの全機能をS-PLUSのインタプリタ環境から利用できるようにしたものです。Splusのアドインソフトの一つとしてNumerical Optimizerとは別個に販売しております。アルゴリズムやモデリングの記述機能についてはNumerical Optimizer本体と同一です。ただし、モデル記述はSplusと整合させるために、若干文法が違います。例えばマルコビッツモデルによるポートフォリオ選択問題:

最小化 (収益率の分散)
制約
(最低期待収益率の確保)
      (空売りの禁止)
:銘柄の集合  :銘柄jへの投資比率
:銘柄jの収益率の平均  :銘柄の利益率の分散・共分散行列要素

をNumerical Optimizerの通常のモデル記述では

Set Asset;
Element j(set=Asset),i(set=Asset);
Parameter Q(index=(i,j);
Variable x(index=j);
Objective risk(type=minimize);
risk = sum(Q[i,j]*x[j]*x[i],(i,j));
VariableParameter rmin;
Parameter rbar(index=j);
sum(rbar[j]*x[j],j)>= rmin;
x[j] >= 0;

と書きますが、SNUOPTでは次のようにSplus関数の形で記述します。

markowitz <- function(Q,rbar,rmin)
{
  Asset <- Set()
  j <- Element(set=Asset)
  i <- Element(set=Asset)
  Q <- Parameter(Q,index=dprod(i,j))
  x <- Variable(index=j)
  risk <- Objective(type="minimize")
  risk ‾ Sum(Q[i,j]*x[j]*x[i],i,j)
  rmin <- Parameter(changeable=T)
        rbar <- Parameter(rbar,index=j)
  Sum(rbar[j]*x[j],j) >= rmin
  Sum(x[j],j) == 1
  x[j] >= 0
}

SNUOPTのメリットはSplusのデータオブジェクトが直接扱えることです。Splusの豊富な統計解析機能やデータ解析機能を数理計画法と組み合わせて使うことができます。例えば、Splus環境にオブジェクトとしてポートフォリオのユニバースとなる銘柄の価格の時系列データ(data.mx)があれば、

> returns.log <- function(x) diff(log(x))
> returns.mx <- apply(data.mx, 2, returns.log)

という手順によって、収益率データに変換することができます。
ここからモデルに入力する必要のある収益率の平均ベクトルを

> returns.mean  <- apply(returns.mx,2,mean)

として、さらに、組み込みの統計関数 varを利用して収益率の分散・共分散行列を

> covQ <- var(returns.mx)

として計算することができます。ここで、最適化を実行するには

> s <- System(markowitz,covQ,as.array(returns.mean),0.0)

とすることにより、モデルとデータを結合させたのち、

> sol <- solve(s)

とすれば、Numerical Optimizerの数理計画法アルゴリズムが起動して解が求まります。解の表示もSplusのデータ図示化機能を使って容易に可能で、次のような関数(入力ベクトルで0.01以上を持つもののみを選別して図示)を定義してから

display <- function(xopt,name="markowitz")
{
    w <- xopt[xopt>0.01]
    sl <- sort.list(w)
    w <- w[sl]
    graphsheet()
    ypos <- barplot(100.0*w, names=NULL, horiz=T,xlab="Percent weight",ylab="", axes=F,main=name)
    text(100.0*w,ypos,paste(" ",as.character(names(w)),sep=""),adj=0)
}

次のようにして解ベクトルを取り出し、
> xopt <- sol$variables$x$current

次のようにコールすると
> display(xopt)

下 のようなグラフが得られます。

S+NUOPT でのグラフの表示

このようにSNUOPTはSplusのデータハンドリング機能とNumerical Optimizerの最適化機能を組み合わせて利用する場合に利便性を発揮します。

SNUOPTに関するさらなる情報はこちらのページをご参照ください。

他の