-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 数理システム 最適化メールマガジン http://www.msi.co.jp/nuopt/ 2020 Vol.5 ( 2020 年 9 月 10 日 発行 ) -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 数理システム 最適化メールマガジンでは,数理計画法パッケージ 数理システム Numerical Optimizer をはじめとして,最適化に関する様々 な情報やご案内を提供していきます. ++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ■ <トピック> オンラインイベント CO@Work に参加します ■ <セミナー> オンラインセミナーのご案内 ■ < tips > 使ってみよう PySIMPLE(第 10 回) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ****************************************************************** ■ <トピック> オンラインイベント CO@Work に参加します ****************************************************************** 我々が日頃から技術交流などさせていただいている ZIB 研究所のお誘いで, ベルリン工科大学の主催で来月行われるイベント,CO@Work 2020 (http://co-at-work.zib.de/) にて講演をさせていただく機会を頂きました. 「講演」と言いましても,今年の CO@Work は COVID19 対応で全編オンライン なので,youtube ビデオでの出演です. 日程は 9/14-25 の間,一日あたり 3 時間程度の講演が順次公開され, 30 分の Q&A Session (時差に対応して 2 回) もあります. Q&A セッションや演習に参加するならば申し込みが必要ですが, 申し込みをしなくてもビデオの試聴は可能とのことで, こういうイベントに居ながらに参加できるのは嬉しいことです. 私の講演は Industorial Session で,タイトルは: How to Create Nice Use Cases of Mathematical Optimization? 実社会での最適化の事例に共通する要素は何か, 数理最適化が提供できる価値,といったお話をさせていただきます. ビデオはベルリンでの現地時間の 9/24 には公開されます. (田辺 隆人) ****************************************************************** ■ <セミナー> オンラインセミナーのご案内 ****************************************************************** 8/27 にエネルギーマネジメント最適化セミナーをおこない,非常に多く の方にご参加いただきました.ご質問も多くいただき,有意義なセミナー になりました.この場をお借りしてご参加いただいた方々に御礼を申し上 げます.さて,人数制限のため,エネルギーマネジメント最適化セミナー に参加できなかった方も多くいらっしゃいますので,10/1 に追加でセミ ナーをおこないます.ご興味ある方はお早めにお申込みください. 製造現場の業務改善に向けた数理最適化ソリューション紹介セミナーも 残りわずかとなっています.こちらも,ご興味ある方はお早めにお申し込 みください. ・日程 9/15 (火) 製造現場の業務改善に向けた数理最適化 ソリューション紹介セミナー ~生産スケジューリングを中心に~ 13:30 - 15:30 9/25 (金) Numerical Optimizer 紹介セミナー 13:30 - 15:30 10/01 (木) エネルギーマネジメント最適化セミナー 13:30 - 15:30 10/13 (火) Numerical Optimizer 紹介セミナー 13:30 - 15:30 10/28 (水) Numerical Optimizer 紹介セミナー 13:30 - 15:30 ・Numerical Optimizer 紹介セミナーの詳細とお申込みはこちら https://msi.hmup.jp/nuopt/seminar/webinar ・エネルギーマネジメント最適化セミナーの詳細とお申込みはこちら https://msi.hmup.jp/nuopt/seminar/enemanage ・製造現場の業務改善に向けた数理最適化ソリューション紹介セミナーの 詳細とお申込みはこちら https://msi.hmup.jp/nuopt/seminar/manufacture (石橋 保身) ****************************************************************** ■ < tips > 使ってみよう PySIMPLE(第 10 回) ****************************************************************** このコーナーでは,Numerical Optimizer V21 以降の機能であるモデリング 言語 PySIMPLE のエッセンスを紹介していきます. 前回は Sum 関数の範囲に多次元の添字を用いたときの挙動を整理しました. 今回は Sum 関数で出やすいエラーと,その対応方法を紹介します. まず,次の操作では SimpleError が出てしまいます. ------------------------------------------------------------------ >>> i = Element(value=[1, 2], name='i') >>> j = Element(value=[3, 4], name='j') >>> b = Parameter(index=(i,j), name='b') >>> x = Variable(index=i, name='x') >>> x[i] + Sum(b[i,j], i) pysimple.error.SimpleError: illegal use of Element 'i' which has been operated already ------------------------------------------------------------------ これは,既に Sum 関数の範囲として和を取った添字である i が別の箇所 (上記の例では x[i])で使われているよ,ということを表しています. このように和をとった添字が Sum の外部で使用されている場合はユーザの 意図していない間違いである場合が多いためエラーとしているのです. 以下のように,一時的に式を保持しても同様です. ------------------------------------------------------------------ >>> bj = Sum(b[i,j], i) >>> x[i] + bj # SimpleError ------------------------------------------------------------------ この場合,式 bj の代入と使用箇所が離れていると原因の究明が困難に なります. 今まではユーザが意図していない場合を前提としてきましたが,場合に よっては正しいケースもあります.以下では,このような場合に, SimpleError を回避する方法を 2 つ紹介します. 1 つ目は「和を取る専用の添字を用意する」です. ------------------------------------------------------------------ >>> i = Element(value=[1, 2], name='i') >>> ii = Element(set=i.set, name='ii') >>> j = Element(value=[3, 4], name='j') >>> b = Parameter(index=(i,j), name='b') >>> x = Variable(index=i, name='x') >>> x[i] + Sum(b[ii,j], ii) # OK ------------------------------------------------------------------ この場合,Sum(b[ii,j], ii) は添字 ii で和を取ったと解釈されるため, Sum 関数の外で i を使用することができます. 2 つ目は「別のオブジェクトを宣言する」です. ------------------------------------------------------------------ >>> bj = Parameter(index=j) >>> bj[j] = Sum(b[i,j], i) >>> x[i] + bj[j] # OK ------------------------------------------------------------------ 別のパラメータを宣言すると,添字の計算履歴情報を持っていないため, 実質的に何で和をとったかという情報を忘れることになります. SIMPLE においては PySIMPLE の bj = Sum(b[i,j], i) のようなことが できず,デフォルトでこちらの方法をとるため,PySIMPLE に比べて エラーが出づらいです. また,PySIMPLE では宣言時に value を指定できるため,以下のような 宣言もできます.なお,計算効率はこちらの方が良いです. ------------------------------------------------------------------ >>> bj = Parameter(index=j, value=Sum(b[i,j], i)) >>> x[i] + bj[j] # OK ------------------------------------------------------------------ また,上記は Parameter でしたが,PySIMPLE では Expression の明示的 宣言はできないため,変数を含む場合は中間変数を用意する必要があります. ------------------------------------------------------------------ >>> i = Element(value=[1, 2], name='i') >>> j = Element(value=[3, 4], name='j') >>> x = Variable(index=i, name='x') >>> y = Variable(index=(i,j), name='y') >>> #x[i] + Sum(y[i,j], i) # SimpleError >>> z = Variable(index=j, name='z') # 中間変数 >>> z[j] == Sum(y[i,j], i) >>> x[i] + z[j] # OK ------------------------------------------------------------------ いかがでしたでしょうか.PySIMPLE では言語の制約上 SIMPLE と挙動が 異なる部分もあります.また,V22 ではエラーメッセージもより具体的に 強化されておりますので是非最新のバージョンをお使いくださいませ. SimpleError のドキュメントはこちら: http://www.msi.co.jp/nuopt/docs/v22/pysimple/api/exception.html#pysimple.SimpleError (池田 悠) ================================================================== ※ このメールは,弊社ツールのユーザー様,過去に展示会などでお名刺 等を頂いたことのある方や当社に直接お問合せを頂いたことのある方 にお送りしています. ※ バックナンバーはこちらから御覧頂けます. https://www.msi.co.jp/nuopt/mailmagazine/index.html ※ 本メールマガジンは等幅フォントでお読みになることを推奨します. ※ 今後,本メールマガジンやご案内に関するメールが不要な方は,誠に お手数ですが,下記 URL より「案内停止手続き」をしてくださいます ようお願いいたします. ■ 案内停止はこちらから ■ [都合により本ページでは URL を掲載しておりません] ご登録される情報は,暗号化された通信(SSL)で保護され, プライバシーマークや ISO27001/JIS Q 27001, ISO20000-1, ISO9001 の認証を取得している株式会社パイプドビッツによる情報管理 システム「スパイラル」で安全に管理されます. 上記にアクセスができない場合には「メール不要」と明記の上, nuopt-ms@ml.msi.co.jp (このメールに返信で結構です)にメール送付してください. 発行:株式会社 NTT データ数理システム << 数理システム Numerical Optimizer >> 担当 東京都新宿区信濃町 35 番地 信濃町煉瓦館 1 階 tel : 03-3358-6681 e-mail : nuopt-info@ml.msi.co.jp ==================================================================