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

バックナンバー ( 2022 Vol.3 ) 2022 年 5 月 25 日 発行

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

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

++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ■ <トピック> 定式化技法集のご紹介
 ■ <トピック> Nuorium Optimizer 学生研究奨励賞
 ■ <セミナー> オンラインセミナーのご案内
 ■ <  tips  > 使ってみよう PySIMPLE(第 18 回)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

******************************************************************
■ <トピック> 定式化技法集のご紹介
******************************************************************

Nuorium Optimizer をご購入されたユーザ様がモデリングを独自に行う際
に,役立つ様々なテクニカルドキュメントとして定式化技法集を 
2022/03/28 に公開しました.

  定式化技法集:
    https://www.msi.co.jp/nuopt/docs/techniques/index.html

私たちは『特殊なケースでの定式化技法』という資料を公開しておりまし
たが,この機会に大幅に見直し,実践的な実務家となるために必要な
定式化の様々な技法の整理・充実を図りました.

[ 内容と特徴 ]

定式化技法集では次の観点で資料編纂を行いました.

  - 重要となる概念ごとに一つの独立な項目としてまとめること.
  - 取り上げる項目の関連性についても整理すること.
  - 現実問題に取り組む実務家が真に実際に役立つ定式化技法であること.

最後の「真に実際に役立つ定式化技法」というところがこの中でもとりわけ
重視した観点です.
今回はこの点について述べたいと思います.

[ 役立つ定式化技法とは? ]

数理最適化もしくは数理計画というアプローチは解決したい問題を「変数」
「制約条件」「目的関数」に分解して,問題の定式化を図ります.
この定式化はまた modeling ともいいますが,formulation という
意味合いも含まれています.
これらの違いを大まかに述べますと,modeling は複雑な事象の中から特徴を
つかみ取って主たる仕組みを捉えようとするものであり,対して 
formulation はある決まった形に当てはめようとするものです.

数理最適化による問題解決を図る場合には「変数」「制約条件」「目的関数」
などとよぶところの数理最適化で決まった形式に当て込んでいく必要が
あります.
更にその中でも線形最適化 (線形計画:LP) だとか混合整数最適化 (混合
整数計画:MIP) というような標準形という観点もあります.
今回重視したのはそれら標準形が意味するところの問題分類に関係する形式
ではなく,「変数」「制約条件」「目的関数」を <<効率的に記述する>> 
のに必要な様々な手続きです.

数理最適化というと,どうしても単体法のタブロー図や KKT 条件であるとか
というように,標準形を基礎とした理論寄りの話題が展開されがちですが,
定式化という観点では必ずしも重要とは限りません.
当社製品 Nuorium Optimizer のように汎用的なソルバーを用いる場合には,
実務家にとってはそれら内部事情よりも,現実的な計算資源で求解できる
定式化なのか,また求解できないにしても,どういった要件で求解できない
のかの説明責任というものが重要となりえます.
もう少し噛み砕いた言い方をすれば,汎用計算部分の理論的な事柄はブラック
ボックスとして扱えるという利点を享受している一方,「上手く解いてもらう」
ということが実務家には要求されます.

ではどのような点について注意すれば,Nuorium Optimizer に「上手く解いて
もらう」のでしょうか.
正にこの点についての言及を意識したのが定式化技法集であります.

[ 構成と線形定式化 ]

定式化技法集は以下の項目から構成されています.

  - Basic Terms: 
      定式化を述べる上で必要となる基本的な用語について説明します.
  - Binary Variable: 
      表現能力が高く応用の広いバイナリ変数に関連する事柄について
      説明します.
  - Debug: 
      実務的な問題の定式化ではモデル自体の修正を頻繁に行います.
      この際に役立つモデリング言語特有のデバッグ技法について
      説明します.
  - Formulations:
      定式化の部品となるような概念やテクニックについて説明します.
  - Problems: 
      典型的な問題の定式化について説明します.
  - System: 
      システム化に必要な tips を紹介します.

より良いものを目指す過程で,このような構成は将来的に変更されるかも
しれませんが,ここで注意したいのは <<線形定式化>> という定式化の
勘所です.

これは定式化技法集の中でも陰に陽に度々言及されていますが,それだけ
特に重要な定式化の勘所であり,このことを中心に今回の技法集が
書かれているといっても過言ではないくらいです.
線形定式化の重要性については「定式化の複雑さ」で重点的に述べて
います.

  定式化の複雑さ:
    https://www.msi.co.jp/nuopt/docs/techniques/articles/complexity-of-formulation.html

まずはこの項目から読み進めて見るとよいでしょう.

---

最後に数理最適化の理論的な習熟の他に,ナップサック問題や割当問題
など数理最適化の有名問題に触れて,その有用性を感じ取り,
いざ「自分で手を動かそう!」となったら,是非とも定式化技法集を
一助としていただければと思います.

                                                (伊藤 元治)

******************************************************************
■ <トピック> Nuorium Optimizer 学生研究奨励賞
******************************************************************

Nuorium Optimizer 学生研究奨励賞(昨年度は Numerical Optimizer 学生
研究奨励賞)は,Nuorium Optimizer を用いた学生の学術研究の支援・
啓蒙および発表の場の提供を目的とした制度です.

昨年度の結果を以下のページで公開しております.研究内容についての
pdf を掲載しておりますのでぜひご覧ください.
また,ご応募いただいた方々にはこの場を借りてお礼申し上げます.

  Nuorium Optimizer 学生研究奨励賞:
    https://www.msi.co.jp/nuopt/stuAward/index.html

Nuorium Optimizer 学生研究奨励賞は今年度も開催を予定しております
ので,学生の皆様のご参加をお待ちしております.

                                                (島田 直樹)

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

定期的に無料のオンラインセミナーを開催しています.
ハンズオンセミナーでは参加される方に Nuorium Optimizer をお渡しし,
モデリング言語 PySIMPLE ベースの教材に沿って数理最適化と当社製品を
体験することができます.
また,6 月 28 日には以前開催してご好評だった「数理最適化と DX」
セミナーを開催いたします.事例を交えつつ,数理最適化との付き合い方を
お伝えするセミナーとなっております.ご興味ある方はぜひご参加ください.

・7 月までに開催予定の無料オンラインセミナー一覧

[ Nuorium Optimizer 紹介セミナー ]
  2022 年 06 月 09 日 (木) 13:30~15:30
  2022 年 07 月 08 日 (金) 13:30~15:30
  詳細とお申込み:https://www.msi.co.jp/nuopt/seminar/introduction.html

[ Nuorium Optimizer ハンズオンセミナー ]
  2022 年 06 月 15 日 (水) 13:30~16:00
  2022 年 07 月 27 日 (水) 13:30~16:00
  詳細とお申込み:https://www.msi.co.jp/nuopt/seminar/hands-on.html

[ 数理最適化と DX ]
  2022 年 06 月 28 日 (火) 13:30~15:30
  詳細とお申込み:https://www.msi.co.jp/nuopt/seminar/dx.html

                                                (石橋 保身)

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

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

3 月にリリースされた Nuorium Optimizer V24 に同梱される PySIMPLE
1.3.0 では幾つもの機能拡張や機能追加がされました.今回はこのうち
PySIMPLE オブジェクトのシリアライズ機能について見ていきましょう.

Python には Python オブジェクトをバイナリストリームに直列化(シリア
ライズ)する pickle という標準モジュールが存在します.以下は Python
オブジェクト data を直列化し,ファイル data.pkl に書き出した後で
読み込み,復元をしています.

------------------------------------------------------------------
>>> import pickle
>>> data = {
...     'a': [1, 2.0, 3, 4+6j],
...     'b': ("character string", b"byte string"),
...     'c': {None, True, False}
... }
>>> with open('data.pkl', 'wb') as f:
...     pickle.dump(data, f)
... 
>>> with open('data.pkl', 'rb') as g:
...     data_ = pickle.load(g)
... 
>>> data_
{'a': [1, 2.0, 3, (4+6j)], 'b': ('character string',
                        b'byte string'), 'c': {False, True, None}}
------------------------------------------------------------------

今回のバージョンアップでは,PySIMPLE オブジェクトも直列化できるよう
Serialize クラスが追加されました.利用法は pickle と同様です.
以下では PySIMPLE の Problem インスタンスを直列化,復元しています.

------------------------------------------------------------------
>>> from pysimple import *
>>> i = Element(value=[1, 2], name='i')
>>> x = Variable(index=i, lb=0, ub=5, name='x')
>>> problem = Problem()
>>> problem += 6*x[1] +   x[2] >= 12
>>> problem += 4*x[1] + 6*x[2] >= 24
>>> problem += 180*x[1] + 160*x[2]
>>> with open('problem.pkl', 'wb') as f:
...    Serialize.dump(problem, f)
... 
>>> with open('problem.pkl', 'rb') as g:
...    problem_ = Serialize.load(g)
... 
>>> problem_.solve(silent=True)
1
>>> problem_.objective.val
((180*x[1])+(160*x[2])).val=750.0000000414537
------------------------------------------------------------------

第 15 回では入力データをファイル出力する方法を紹介しましたが,上記
では Problem インスタンス自体をファイル出力することができます.
他にも求解後の変数の値のみを保存しておくなど,さまざまな使い方が
考えられます.

Serialize クラスのメソッドはは pickle モジュールの関数をラップして
いるため,Serialize.load/dump で通常の Python オブジェクトを直列化
することもできます.また,pickle モジュールにはファイルに出力する
代わりに,直列化オブジェクトを受け取る/復元する pickle.dumps/loads
関数もありますが,Serialize クラスにも同様の Serialize.dumps/loads
が用意されています.

いかがでしたでしょうか.V24 ではこれらの新機能に加え,動作環境の
追加や細かな不具合修正も行われていますので確認してみてください.

PySIMPLE オブジェクトのシリアライズ機能の解説はこちら:
    https://www.msi.co.jp/nuopt/docs/v24/pysimple/guide/serialize.html

Serialize クラスのメソッド一覧はこちら:
    https://www.msi.co.jp/nuopt/docs/v24/pysimple/api/class.html#pysimple.serialize.Serialize

                                                (池田 悠)

==================================================================
※ msi-ms@ml.msi.co.jp は送信専用アドレスです。
  本メールにそのままご返信いただいてもご回答いたしかねます。

※ このメールは、弊社ツールのユーザー様、過去に展示会などで
お名刺等を頂いたことのある方や 当社に直接お問合せを頂いたことの
ある方にお送りしています。

※ バックナンバーはこちらから御覧頂けます。
     https://www.msi.co.jp/nuopt/mailmagazine/index.html

※ 本メールマガジンは等幅フォントでお読みになることを推奨します。

※ 今後、ご案内メールが不要な方は、誠にお手数ですが、下記 URL より
  「案内停止手続き」をしてくださいますようお願いいたします。

■ 案内停止はこちらから ■
      [都合により本ページでは URL を掲載しておりません]

ご登録される情報は、暗号化された通信(SSL)で保護され、プライバシーマークや
ISO27001/JIS Q 27001, ISO20000-1, ISO9001の 認証を取得している
株式会社パイプドビッツによる情報管理システム「スパイラル」で安全に管理されます。

上記にアクセスができない場合には「メール不要」と明記の上、
 nuopt-info@ml.msi.co.jp までご連絡いただけますと幸いです。

発行:株式会社 NTT データ数理システム 
          << 数理システム Nuorium Optimizer >> 担当
        東京都新宿区信濃町 35 番地 信濃町煉瓦館 1 階
                                   tel : 03-3358-6681
                                e-mail : nuopt-info@ml.msi.co.jp
==================================================================