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

バックナンバー ( 2023 Vol.6 ) 2023 年 11 月 8 日 発行

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

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

++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ■ <トピック> MSIISM Conference 2023 開催のお知らせ
 ■ <トピック> 発表案内
 ■ <セミナー> オンラインセミナーのご案内
 ■ <  tips  > 使ってみよう PySIMPLE(第 27 回)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

******************************************************************
■ <トピック> MSIISM Conference 2023 開催のお知らせ
******************************************************************

今年も当社主催のイベントを 11 月 22 日に開催いたします.今回は
MSIISM Conference と題して AI と数理科学の「今とこれから」をテーマ
に,AI 技術活用と展望についてご講演を通じてお伝えいたします.
参加費は無料です.数理最適化に関するご講演もあるため,皆様ぜひ
お申込みください.本メルマガでは数理最適化に関する内容について
簡単にご紹介します.

・「数理最適化を用いたバス運転者の勤務シフト自動作成」
    遠州鉄道株式会社  木俣 泰 様
    株式会社 NTT データ数理システム  中野 雄介

木俣様のご講演ではバス営業所の一カ月分の勤務シフトを数理最適化で
作成するシステムを開発した背景や効果についてご紹介いただきます.
また,当社の中野からシフト作成のロジック等についてもご紹介します.

・「数理最適化の現在と生成 AI の活用」
    株式会社 NTT データ数理システム  藤井 浩一

当社の藤井の講演では数理最適化技術の現在について触れながら,生成
AI 活用の展望についてご紹介します.特に数理最適化を扱うユーザが大
規模言語モデルを活用した場合の恩恵について当社目線でご紹介します.

本イベントの詳細は次の Web ページをご覧ください.
  https://www.msi.co.jp/event/conference/mc2023/lp/index.html

                                                (石橋 保身)

******************************************************************
■ <トピック> 発表案内
******************************************************************

東京工業大学にて開催される RAMP シンポジウムにて弊社から発表を
行います.

    開催日:11 月 20 日(月) ~ 11 月 21 日(火)
    場所:東京工業大学 大岡山キャンパス
    https://orsj.org/ramp/ramp2023/program/

「整数計画法の実務への活用と数理最適化ソルバの改良」
  * 藤井浩一 (NTT データ数理システム)

整数計画法は,その発展に伴い実務への活用例は年々増えており,数理
最適化は実社会において確実に根付いていますが,活用にあたっては
注意が求められる場面もあります.本発表ではスケジューリング問題を
題材として,活用にあたっての課題および数理最適化ソルバの改良に
ついて報告を行います.

今回の RAMP シンポジウムでは,発表だけではなく展示も行っております.
是非お立ち寄りください!

                                                (藤井 浩一)

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

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

11 月にハンズオンセミナーを開催します.
実際に製品を動かしながら受講いただけるセミナーになっておりますが,
開催まで時間がないためご興味のある方は急ぎ申込いただければと思います.

さらに 12 月には,金融工学セミナーも開催します.
金融工学において数理最適化をどのように活用するか,指標を用いた例
などを紹介するセミナーになっています.

また,定例の紹介セミナーも開催予定です.
数理最適化の説明や Nuorium Optimizer の特徴,数理最適化を実施する
上で必要なことなどを事例を交え紹介します.

ぜひこの機会にご参加ください.

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

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

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

                                                (保科 拓紀)

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

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

今回は第 10 回の「Sum 関数における添字の注意点」に続き,Sum 関数で
多次元の添字を用いた場合に現れがちなエラーにおける注意点を紹介します.
まずは以下のモデルを見てみましょう.

------------------------------------------------------------------
>>> ij = Element(value=[(1,3), (1,4), (2,3)], name='ij')
>>> x = Variable(index=ij(0), name='x')
>>> y = Variable(index=ij(1), name='y')
>>> Sum(x[ij(0)], ij(0)) + Sum(y[ij(1)], ij(1))
pysimple.error.SimpleError: illegal use of Element 'ij(0)' which has been operated already
------------------------------------------------------------------

一見,問題なさそうですが,SimpleError となっています.これは,既に
Sum 関数の範囲として和を取った添字である ij(0) が別の箇所で使われて
いるよ,ということを表しています.
状況を分かりやすくするため,エラーの部分を C++SIMPLE で書いて
みましょう.

------------------------------------------------------------------
sum(x[i], (i, (i,j)<IJ)) + sum(y[j], (j, (i,j)<IJ));
// (SIMPLE 70) 条件式に現れる要素j の使い方に誤りがあります.
// (SIMPLE 70) 条件式に現れる要素j条件式に現れる要素i の使い方に誤りがあります.
------------------------------------------------------------------

初項では i で和をとったにも拘らず,二項目で再度 i が登場しています.
PySIMPLE でも同様の現象が起こっており,初項では ij(0) で和をとった
にも拘らず,二項目で再度 ij(0) が登場しているよ,と言われていることに
なります.一見すると Sum(y[ij(1)], ij(1)) には ij(0) が登場している
ようには見えませんが Sum(y[ij(1)], ij(1)) の戻り値は ij(0) であり,
ij(0) で和をとった初項と,添字が ij(0) である二項目とを足そうとして
いることになります.戻り値の添字は index 属性で確認することができます.

------------------------------------------------------------------
>>> Sum(x[ij(0)], ij(0)).index
Index(ij(1))
>>> Sum(y[ij(1)], ij(1)).index
Index(ij(0))
------------------------------------------------------------------

練習として,もう少し複雑な例を考えてみましょう.

------------------------------------------------------------------
>>> ijk = Element(value=[(1,3,5),(1,3,6),(1,4,5),(2,3,5)], name='ijk')
>>> z = Variable(index=ijk(0,1), name='z')
>>> Sum(z[ijk(0,1)], ijk(0))    # sum(z[i,j], (i, (i,j,k)<IJK))
Sum(z[ijk(0,1)], ijk(0)):
z[1,3]+z[2,3]
z[1,3]
z[1,4]
>>> Sum(z[ijk(0,1)], ijk(0,1))  # sum(z[i,j], ((i,j), (i,j,k)<IJK))
Sum(z[ijk(0,1)], ijk(0,1)):
z[1,3]+z[1,4]+z[2,3]
z[1,3]
>>> Sum(z[ijk(0,1)], ijk(0,2))  # sum(z[i,j], ((i,k), (i,j,k)<IJK))
Sum(z[ijk(0,1)], ijk(0,2)):
2*z[1,3]+z[2,3]
z[1,4]
------------------------------------------------------------------

いかがでしたでしょうか.
PySIMPLE では Sum 関数と多次元の添字回りで少ない文字数で記述できる
反面,挙動が分からなくなりがちです.困った場合は今回紹介したように,
簡略化する,index 属性を確認する,C++SIMPLE や数式として記述してみる,
などのことを試してみるといいでしょう.
Sum 関数の挙動は第 10 回の他にも第 9 回「Sum 関数における添字の扱い方」
でも触れています.併せて復習しておきましょう.

第 9 回「Sum 関数における添字の扱い方」の内容はこちら:
    使ってみよう PySIMPLE(第 9 回)
第 10 回「Sum 関数における添字の注意点」の内容はこちら:
    使ってみよう PySIMPLE(第 10 回)

                                                (池田 悠)

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