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

global

Numerical Optimizer/Globalとは

Numerical Optimizerには既に非線形最適化機能が備わっておりますが、解析的な性質が明らかでない非線形最適化問題に適用した場合、その出力は局所的最適解ではあっても大域的最適解であるという保証はありません。従って、例えば初期値を変更すると異なる解が出力されるなどの現象が起きます。また、フルセットに標準で搭載されている解法では、整数変数を含む非線形最適化は行うことができません。

Numerical Optimizer/Globalは非線形計画問題を大域的に(厳密に)解きたいという要請に応えます。Numerical Optimizer/Globalを利用することで非線形計画問題が整数変数を含んでいても大丈夫。モデリング言語によって記述された式を解釈し、自動的に凸緩和法を適用するので、最適解の上下限を知ることも可能です。

※大域的最適化アルゴリズムは LP/IP モジュール並びに V17 までの LP/IP Lite モジュールには対応しておりません。実行に際しては有償アドオン Numerical Optimizer/Global の別途購入が必要となります。
価格についてはこちらをご覧ください。

大域的最適化の計算例

大域的最適化の計算例を紹介します。次の例は4 変数の非線形計画問題です。 このような凸でない非線形計画問題であってもNumerical Optimizer/Global を利用すれば 大域的最適解(x,y,z,w)=(1,1,1,1)を得ることができます。

<<Numerical Optimizer/SIMPLEによるモデル記述例>>
options.noDefaultSolve = 1;
options.method = "global";
Variable x, y, z, w;

Objective f(type = minimize);
f = 100 * ( y - x * x ) * ( y - x * x ) + ( 1 - x ) * ( 1 - x ) + 
  90 * ( z - w * w ) * ( z - w * w ) + ( 1 - w ) * ( 1 - w ) + 
  10.1 * ( y - 1 ) * ( y - 1 ) + 10.1 * ( z - 1 ) * ( z - 1 ) + 
  19.8 * ( y - 1 ) * ( z - 1 );

-10 <= x <= 10;
-10 <= y <= 10;
-10 <= z <= 10;
-10 <= w <= 10;

solve();

x.val.print();
y.val.print();
z.val.print();
w.val.print();

モデル 3Dグラフ

(z,w)を固定したときの(x,y)グラフ

<<Numerical Optimizerによる計算実行例>>
展開中 目的関数 (1/5 global.smp:9 name="f")
展開中 制約式   (2/5 global.smp:11 name="global.smp:11")
展開中 制約式   (3/5 global.smp:12 name="global.smp:12")
展開中 制約式   (4/5 global.smp:13 name="global.smp:13")
展開中 制約式   (5/5 global.smp:14 name="global.smp:14")
NUOPT 12.1.5 (NLP/LP/IP/SDP module)
 <with META-HEURISTICS engine "wcsp"/"rcpsp">
    <with GLOBAL-OPTIMIZATION add-on "global">
      , Copyright (C) 1991-2010 Mathematical Systems Inc.
PROBLEM_NAME                                           global
NUMBER_OF_VARIABLES                                         4
NUMBER_OF_FUNCTIONS                                         1
PROBLEM_TYPE                                     MINIMIZATION
METHOD                                                 GLOBAL
<preprocess begin>..........<preprocess end>
<iteration begin>
IPM_maxtime/total = 3600, IPM_maxtime/call = 360
        ipm(#callCount=1,itntot=11,obj=3.60684e-017,time(IPM)=0.005/0)

#1  up:3.6068397e-017                                  time:  0.0s:
                                          mem(Mb)=30/5:avail(Mb)=4095/1697
                                                     llen:0 #prob:0 #piv:0
B
ipm(#callCount=5,itntot=10,obj=2.33273e-017,time(IPM)=0.00399999/0.018)
ipm(#callCount=19,itntot=10,obj=9.50053e-018,time(IPM)=0.00399999/0.075)
ipm(#callCount=21,itntot=12,obj=2.58892e-018,time(IPM)=0.00400001/0.083)
ipm(#callCount=27,itntot=11,obj=1.59216e-018,time(IPM)=0.00400001/0.107)
ipm(#callCount=39,itntot=10,obj=2.36197e-019,time(IPM)=0.00399998/0.156)
ipm(#callCount=41,itntot=8,obj=1.19962e-019,time(IPM)=0.00299999/0.164)
IPM total succCount/totalCount = 47/47, totaltime(IPM) = 0.191

<iteration end>
STATUS                                                OPTIMAL
VALUE_OF_OBJECTIVE                            4.57539325e-029
SIMPLEX_PIVOT_COUNT                                      1863
PARTIAL_PROBLEM_COUNT                                     191
BOUND_INFEASIBILITY                                         0
CONSTRAINT_INFEASIBILITY                                    0
ELAPSED_TIME(sec.)                                       0.26
SOLUTION_FILE                                      global.sol
x=1
y=1
z=1
w=1
サンプルはこちらにもあります。