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

バックナンバー ( 2024 Vol.6 ) 2024 年 12 月 4 日 発行

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

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

++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ■ <トピック> 遠州鉄道株式会社様の事例ご紹介
 ■ <  tips  > 使ってみよう PySIMPLE(第 33 回)
 ■ <トピック> 年末のご挨拶
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

******************************************************************
■ <トピック> 遠州鉄道株式会社様の事例ご紹介
******************************************************************

遠州鉄道株式会社様の運営されるバス事業において,基幹システムと
連携したシフト表自動作成機能が Nuorium Optimizerを用いて開発
されました.
本事例にご興味を持つお客様も増えているため,メルマガでもご紹介
いたします.

近年バス業界が抱える運転手不足,法改正による規制強化によって,
運転手のシフト表作成は,大変難しい作業となっていました.
バスの運行を確実に実施するには,60~80 名分の 1 ヶ月のシフト表を
一度作るだけでは不十分で,リスケジューリングを考慮し,シフト表の
作成を毎日素早く作成する必要があります.
これに加えて,人手で作成していたため,一部の運転手への偏重が生じ,
運転手の離職原因の一因にもなっていました.

今回のシフト表自動作成機能の導入により,バス業界の複雑な法定規則や
勤務実態を遵守しつつ,各運転手への仕事量の平準化を実現.
運転手が望むシフトをできる限り反映したシフト表を作成し,
基幹システムとの連携により,エンドユーザーが使いやすい形での
導入が実現しました.

2023 年に弊社カンファレンスでご講演いただいた際の資料を弊社 HP に
公開してますので,是非ご覧ください.
特に,「業務改善を行いつつ従業員の満足度も向上させたい」という課題は
物流・運送のみならず建設や医療の現場においても昨今言われるように
なりました.これらの業界の方にもおすすめです.

遠州鉄道様「数理計画法を用いたバス運転手の勤務シフト自動作成」
https://www.msi.co.jp/material/conference/mc2023/mc2023_entetsu.pdf

                                                (加瀬 力)

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

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

PySIMPLE をはじめとする SIMPLE シリーズは添字を用いた記法が大きな
特長です.PySIMPLE では添字をもつオブジェクトに対して,添字情報を
保持する index 属性が存在します.今回はこの index 属性の便利な
使い方について紹介しましょう.

添字付きオブジェクトである Parameter, Variable, Expression, Constraint
などは index 属性を持っています.この index 属性を活用すると,添字の
次元を抽象化した記述をすることができます.以下では添字なしの変数 x
と一次元の添字をもつ変数 xi に対して添字を抽象化して __getitem__ を
利用しています.

------------------------------------------------------------------
>>> i = Element(value=[1, 2], name='i')
>>> x = Variable(name='x')
>>> xi = Variable(index=i, name='xi') 
>>> x[x.index]    # x と同じ
x:
x
>>> xi[xi.index]  # xi[i] と同じ
xi:
xi[1]
xi[2]
------------------------------------------------------------------

変数に 1 を加えた式を作成したい場合,通常ではそれぞれ x+1, x[i]+1 と
記述する必要がありますが,index 属性を利用することで,x[x.index]+1
などと,添字の有無や次元を意識せず記述することができるようになります.

__getitem__ に似たメソッドとしてバージョン 1.5.0 で追加された get
メソッドがあります.get メソッドは引数に可変長位置引数をとるため
index 属性を展開して渡す必要があります.

------------------------------------------------------------------
>>> x.get(*x.index)    # x.get() と同じ
x.get():
x.get()
>>> xi.get(*xi.index)  # xi.get(i) と同じ
xi.get(i):
xi.get(i)[1]
xi.get(i)[2]
------------------------------------------------------------------

同様に __setitem__ でも index 属性を利用することができます.特に
添字を持たない変数 x では x=1 と記述することはできないため,index
属性を利用する明確なメリットがあります.

------------------------------------------------------------------
>>> x[x.index] = 1    # x = 1 とは書けないので注意
>>> x.val
x.val=1
>>> xi[xi.index] = 1  # xi[i] = 1 と同じ
>>> xi.val
xi[1].val=1
xi[2].val=1
------------------------------------------------------------------

最後に宣言時の index 引数にも利用できることを記しておきましょう.
ある変数の類似物を作成するときなど,添字を気にしなくて済むため
便利な場合があります.

------------------------------------------------------------------
>>> xval = Parameter(index=x.index, value=x.val, name='xval')
>>> xval
xval=1
>>> xival = Parameter(index=xi.index, value=xi.val, name='xival')
>>> xival
xival[1]=1
xival[2]=1
------------------------------------------------------------------

常に添字を抽象化する必要はありませんが,添字の次元が異なる変数を一括
して処理したい場合など,有効な場面もあるでしょう.

いかがでしたでしょうか.PySIMPLE では index 属性に留まらず,属性を
上手に利用することでより簡潔な記述ができるようになります.

クラスの API マニュアルはこちら:
    https://www.msi.co.jp/solution/nuopt/docs/pysimple/api/class.html

                                                (池田 悠)

******************************************************************
■ <トピック> 年末のご挨拶
******************************************************************

2024 年も残り少なくなってまいりました.
今年も皆様のおかげで無事メールマガジンを完走できたことを嬉しく
思います.

2024 年は,私たちにとって大きな変化の年となりました.年明け早々の
地震をはじめ,気候変動による異常気象,そして世界的な物価高騰など,
暗いニュースが相次ぎました.
しかし,一方で明るいニュースもたくさんありました.大谷翔平選手の
メジャーリーグでの活躍は,私たちに感動を与えてくれました.DeNA の
26 年ぶりの優勝に沸いたスポーツファンも多いことでしょう.
生成 AI をはじめとした AI の急速な発展は,未来へのポジティブな
イメージを強化してくれました.

我々も,論文や学会を通じて,数理最適化の着実な発展を感じる一年
でした.こうした発展を Nuorium Optimizer や我々のソリューション
という形で来年皆様にお見せできればと考えています.
変化の激しい時代の中,このメールマガジンも,皆様のニーズにこたえ
ながら,より価値のある記事をお届けする所存です.                                                                                                               

来る年が,皆様にとって,より良い年となりますよう心から願って
おります.

                                                (藤井 浩一)

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