数理システム 最適化メールマガジン

バックナンバー ( 2023 Vol.2 ) 2023 年 3 月 3 日 発行

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  数理システム 最適化メールマガジン
                     https://www.msi.co.jp/solution/nuopt/top.html
                           2023 Vol.2 ( 2023 年  3 月  3 日 発行 )   
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

数理システム 最適化メールマガジンでは,数理計画法パッケージ
Nuorium Optimizer をはじめとして,最適化に関する様々な情報や
ご案内を提供していきます.

++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ■ <トピック> Nuorium Optimizer V25 3 月リリース予定
 ■ <トピック> 日本オペレーションズ・リサーチ学会での展示のご案内
 ■ <セミナー> オンラインセミナーのご案内
 ■ <  tips  > 使ってみよう PySIMPLE(第 23 回)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

******************************************************************
■ <トピック> Nuorium Optimizer V25 3 月リリース予定
******************************************************************

Nuorium Optimizer V25 を 3 月中にリリースする予定です.
V25 では以下の機能が強化されています.

  - ソルバ
     - スパース 双対 QP 単体法
     - 分枝限定法の修復機能(repair)強化

  - モデリング言語 PySIMPLE を強化
      - 分枝限定法の終了条件をコールバック関数で判定
      - wcsp の一般整数変数対応

  - ドキュメント
      - 求解オプションの刷新

V24 にて導入されたスパース QP 単体法(hsimplex)を V25 で改良し,
凸二次計画問題に対して双対単体法が実行できるようになりました.
本手法により,特に最適解においてアクティブな制約が少ない問題
(最適解が制約から離れている問題)に対して,より高速に求解できる
ようになりました.
凸二次計画問題を解く際には,解法の一つとして是非ご検討ください.
解法 hsimplex は PySIMPLE からのみ利用することができますので
ご注意ください.

分枝限定法における解の修復(repair)において,積極的に修復を
おこなうオプション(aggressive)が追加されました.
実行可能解の発見が難しい整数計画問題があれば,本機能を是非
ご検討ください.

PySIMPLE の新機能の内,「分枝限定法の終了条件をコールバック
関数で判定」については「使ってみよう PySIMPLE」で紹介しています.
制約充足問題に対するメタヒューリスティクスアルゴリズム wcsp に
おいて,0-1 整数変数だけではなく一般整数変数(上下限が 0, 1 
とは限らない変数)も扱えるようになりました(PySIMPLE のみ).

Nuorium Optimizer マニュアルの「求解オプション」の説明が刷新され,
各モデリング言語(PySIMPLE, C++SIMPLE, RSIMPLE)での設定方法が
統一的に記述されるようになりました.

Nuorium Optimizer V25 の 3 月リリースに向けて鋭意作業中です.
是非ご期待ください!

                                                (藤井 浩一)

******************************************************************
■ <トピック> 日本オペレーションズ・リサーチ学会での展示のご案内
******************************************************************

「日本オペレーションズ・リサーチ学会 2023 年春季研究発表会」にて
企業展示を行います.
展示ブースでは最適化読本をお配りしておりますので,
学会に参加される方は是非弊社展示ブースにもお立ち寄りください.

[ 日時 ]
2023 年 03 月 07 日(火)~ 03 月 08 日(水)

[ 場所 ]
中央大学 後楽園キャンパス

[ 詳細 ]
学会 HP  https://orsj.org/nc2023s/

                                                (保科 拓紀)

******************************************************************
■ <セミナー> オンラインセミナーのご案内
******************************************************************

5 月までに開催する無料のオンラインセミナーをご紹介します.

4 月には Nuorium Optimizer 金融工学セミナーを開催します.
金融工学に特化した内容で,デモを通して「金融工学におけるリスク
最小化の考え方」,「イールドカーブと非線形計画法,判別分析と
半正定値計画法」,「実務的なポートフォリオ最適化の実際」などに
ついて紹介いたします.
次回開催は未定ですので,ご興味のある方は是非この機会にご参加
ください.

定例の紹介セミナーとハンズオンセミナーも開催予定です.
ハンズオンセミナーは実際に製品を動かしながら受講いただける
セミナーになっています.こちらもぜひお気軽にご参加ください.

[ Nuorium Optimizer 金融工学セミナー ]
  2023 年 04 月 12 日 (水) 13:30~15:30
  詳細とお申込み:https://www.msiism.jp/event/nuopt-financial-engineering.html

[ Nuorium Optimizer 紹介セミナー ]
  2023 年 03 月 15 日 (水) 13:30~15:30
  2023 年 04 月 21 日 (金) 13:30~15:30
  2023 年 05 月 09 日 (火) 13:30~15:30
  詳細とお申込み:https://www.msiism.jp/event/nuopt-introduction.html

[ Nuorium Optimizer ハンズオンセミナー ]
  2023 年 05 月 18 日 (木) 13:30~16:00
  詳細とお申込み:https://www.msiism.jp/event/nuopt-hands-on.html

                                                (保科 拓紀)

******************************************************************
■ <  tips  > 使ってみよう PySIMPLE(第 23 回)
******************************************************************

このコーナーでは,Nuorium Optimizer の Python インターフェースである
PySIMPLE のエッセンスを紹介していきます.

今回は 3 月にリリースされる V25 で追加された,分枝限定法の終了条件を
コールバック関数で判定させる機能について紹介します.

コールバックとは最適化計算が定期的に呼び出すユーザ定義関数のことです.
Nuorium Optimizer V25 に付属する PySIMPLE ではコールバック関数を設定
することでユーザが最適化計算の状態を問い合わせ,挙動を制御することが
できるようになります.

コールバック関数は Problem インスタンスのメソッド setCallback の引数
mip_terminate に渡すことで分枝限定法の計算内で呼び出されます.
例えば「実行可能解の個数が 1 以上になったら分枝限定法を停止する」と
いうコールバック関数は次のように記述することができます.

------------------------------------------------------------------
def func(solver):
    if solver['SolutionCount'] >= 1:  # 実行可能解の個数が 1 以上
        return True  # 分枝限定法を停止する
    return False     # 分枝限定法を継続する

problem = Problem()
problem.setCallback(mip_terminate=func)
------------------------------------------------------------------

ここでコールバック関数は一つの引数をとり,bool 型を返す関数を想定
します.True を返すと分枝限定法を停止し,False を返すと継続して実行
されます.

コールバック関数の引数には,本関数が呼び出された時点の最適化計算の
情報が辞書型に格納されています.
今回使用した実行可能解の数(SolutionCount)の他にも以下の情報を取得
することができます.

- ElapsedTime:         経過時間
- RelativeGap:         相対ギャップ
- AbsoluteGap:         絶対ギャップ
- Objective:           目的関数値
- SolutionCount:       実行可能解の数
- TotalMemory:         メモリ消費量(MiB) 
- MemoryAvailable:     利用可能メモリ量(MiB)
- PartialProblemCount: 部分問題の数(ノード数)

また,コールバック関数では停止条件の制御の他に,最適化計算の経過
情報をカスタマイズして出力する使い方もできます.

------------------------------------------------------------------
def func(solver):
    print(solver['Objective'], solver['RelativeGap'], solver['AbsoluteGap'])
    return False
------------------------------------------------------------------

いかがでしたでしょうか.V25 では他にも新機能が加わったり,動作環境の
追加も行われていますので確認してみてください.

PySIMPLE の更新履歴はこちら:
    https://www.msi.co.jp/solution/nuopt/docs/pysimple/changelog.html

                                                (池田 悠)

==================================================================