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

バックナンバー ( 2022 Vol.1 ) 2022 年 1 月 12 日 発行

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

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

++++ [目次] ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ■ <トピック> 新年のご挨拶
 ■ <トピック> Numerical Optimizer 名称変更のお知らせ
 ■ <トピック> 数理システムアカデミックコンファレンス FY2021 のご案内
 ■ <セミナー> オンラインセミナーのご案内
 ■ <  tips  > 使ってみよう PySIMPLE(第 16 回)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

新年あけましておめでとうございます.
私が数理最適化による問題解決に取り組んでから,干支はそろそろ二回転.

その間に圧倒的に充実した計算機パワーと洗練されたアルゴリズム.
AI とか DX とかいうキーワードも定着して久しい.

でも,いろいろとお話を伺ってゆくと,お客さまから寄せられる想いは
昔とあまり変化していません.

  結果の善し悪しが仲間の働き方や部署の成績を左右することに
  なるのです.だから,できるだけ良い答であってほしいじゃないですか.

そういう気持に向き合ったとき,我々は思わず背筋を伸ばし,
襟を正します.

  その「良い」の意味を具体的に教えてもらえますでしょうか,
  例えばこんな答ではどうでしょう,..
	 
人間の仕事をサポートするパートナーとして,数理モデルとアルゴリズムを
役立てていただけますよう.

2 月の特別セミナーでも,このところ考えているところをお話させて
いただければと思います.

本年もどうかよろしくお願い申しあげます.

                                                (田辺 隆人)

******************************************************************
■ <トピック> Numerical Optimizer 名称変更のお知らせ
******************************************************************

1995 年に NUOPT をリリースし,2013 年には Numerical Optimizer と
名称を変更し,これまで多くの皆様に NUOPT と Numerical Optimizer を
ご利用頂いてきました.

この度,2022 年 3 月末リリース予定の次期バージョン V24 から,名称を
  Nuorium Optimizer
  (読み方:ニューオリウム オプティマイザー)
に変更させて頂くことになりました.

現在でも Nuorium という GUI を有しておりますが,この Nuorium は
「数理最適化をおこなう場所」という意味を持っております.
この Nuorium を継承し,「数理最適化をおこなう上でかかせない存在」
として今後も皆様のお役に立ちたいという想いを込めまして,
Nuorium Optimizer と名付けました.

名称が変更となりましても,当社の体制や方向性が大きく変わるという
ことはございませんので,ご安心ください.
現在は,Nuorium Optimizer のロゴやカタログを製作しております.
2022 年 3 月には皆様にお披露目できるかと思いますので,今しばらく
お待ち頂ければ幸いでございます.

今後とも Numerical Optimizer 改め,Nuorium Optimizer をご愛顧
頂きますようお願い申し上げます.

                                                (多田 明功)

******************************************************************
■ <トピック> 数理システムアカデミックコンファレンス FY2021 のご案内
******************************************************************

数理システムアカデミックカンファレンス FY2021 をご案内させて
いただきます.こちらのイベントでは,当社製品をご利用頂いている
アカデミックの先生によるご講演及び 2021 年度学生研究奨励賞で
優秀な成績を収められた方に研究成果を発表していただきます.

日時: 2022 年 2 月 10 日(木) 10:00-18:00
形式: オンライン
参加費: 無料
お申し込み: https://www.msi.co.jp/academicconf/index.html

数理最適化の講演としては以下があります.

関西大学 檀寛成様
  「最適化技法を用いたレーザスキャン計画の立案
      ~ピラミッドを覆い尽くせ!~」

非線形最適化及び最適化の応用を専門としている檀寛成様に,
ピラミッドの測定に数理最適化を用いたご研究について解説して
いただきます.

本講演は弊社主催数理最適化交流会 2021 での講演の再放送となります.
同イベントにて聞き逃した方も,もう一度ご覧になりたい方も,是非
今回の機会にお申し込みくださいませ.

                                                (藤井 浩一)

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

定期的に無料のオンラインセミナーを開催しております.
ご興味があればぜひご参加ください.

2/8 の特別セミナーでは,責任者の田辺隆人が DX というキーワードを
軸に数理最適化のビジネスへの応用とそれを支える技術について
お話します.

・日程
   [ Numerical Optimizer 紹介セミナー ]
     1/12(水) 13:30 - 15:30
     2/18(金) 13:30 - 15:30

   [ Numerical Optimizer ハンズオンセミナー ]
     1/27(木) 13:30 - 16:00

   [ 数理最適化と DX ]
     2/ 8(火) 13:30 - 15:30

・詳細とお申込み
    https://www.msi.co.jp/nuopt/seminar/index.html

また,「最適化無料個別相談会」では,最適化についての様々なご相談事を
承っております.
柔軟に対応させていただきますので,nuopt-info@ml.msi.co.jp まで
お気軽にお申し込みください.

                                                (池田 悠)

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

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

今回は,前回に引き続き PySIMPLE を利用した最適化をシステムを構築
する際の,記述のコツを紹介していきます.

まずは,前回も扱った油田問題の入力データをクラス化,モデルを
関数化したものを見てみましょう.

------------------------------------------------------------------
from pysimple import *

class Data:
    def __init__(self):
        self.cost = {0: 180, 1: 160}
        self.norma = {'重油': 12, 'ガス': 24}
        self.prod = {(0, '重油'): 6, (0, 'ガス'): 4,
                     (1, '重油'): 1, (1, 'ガス'): 6}

def model(data):
    i = Element(value=data.cost.keys())
    j = Element(value=data.norma.keys())
    cost  = Parameter(index=i, value=data.cost)
    norma = Parameter(index=j, value=data.norma)
    prod  = Parameter(index=(i,j), value=data.prod)
    x = Variable(index=i, lb=0, ub=5)

    problem = Problem()
    problem += Sum(cost[i]*x[i], i)
    problem += Sum(prod[i,j]*x[i], i) >= norma[j]
    return problem

data = Data()
problem = model(data)
problem.solve()
------------------------------------------------------------------

今回はこの関数化されているモデルをクラス化する書き方を紹介します.
モデルをクラス化する方法はいろいろ考えられますが,その中でも
PySIMPLE の Problem クラスを継承する方法を紹介します.

------------------------------------------------------------------
class Oil(Problem):  # Problem を継承
    def __init__(self, data, **kwds):
        super().__init__(**kwds)
        self.i = i = Element(value=data.cost.keys())
        self.j = j = Element(value=data.norma.keys())
        self.x = Variable(index=i, lb=0, ub=5)
        self.cost  = Parameter(index=i, value=data.cost)
        self.norma = Parameter(index=j, value=data.norma)
        self.prod  = Parameter(index=(i,j), value=data.prod)

    def __set_constraint1(self):
        i, j = self.i, self.j
        x, prod, norma = self.x, self.prod, self.norma
        self += Sum(prod[i,j]*x[i], i) >= norma[j]

    def __set_constraint2(self):
        pass

    def __set_objective(self):
        i, x, cost = self.i, self.x, self.cost
        self += Sum(cost[i]*x[i], i)

    def set_constraints(self):
        self.__set_constraint1()
        self.__set_constraint2()
        self.__set_objective()

data = Data()
oil = Oil(data)
oil.set_constraints()
oil.solve()
------------------------------------------------------------------

まず,__init__ メソッド内ではモデルの記述に必要な添字,パラメータ,
変数を用意しています.本モデルではすべてを用意していますが,
モデルが大きい場合には,__init__ では複数のメソッドで共通して
用いるものを,各メソッド内ではその中でしか用いないものを用意すると
よいでしょう.

次に,各メソッド内では制約式を追加しています.モデルの意味単位等で
メソッドを分割するとよいでしょう.この際,メソッドの冒頭で __init__
で用意した添字等を必要な分だけ参照しています.新たな添字等が必要な
場合は,この後に記述するとよいでしょう.

PySIMPLE では制約式・目的関数は Problem インスタンスに「+=」演算子を
用いて追加します.そのため,今回のように Problem クラスを継承する
場合はメソッド内では「self +=」と記述することになります.

また,メソッド内で定義した式を目的関数に追加したい場合は,追加したい
式をメソッドの戻り値とし,__set_objective に渡す方法が考えられます.

いかがでしたでしょうか.今回はシステム化の際の記述のコツを紹介し
ました.次回はいよいよ新バージョンに伴う新機能の紹介です!

                                                (池田 悠)

==================================================================
※ 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 データ数理システム 
          << 数理システム Numerical Optimizer >> 担当
        東京都新宿区信濃町 35 番地 信濃町煉瓦館 1 階
                                   tel : 03-3358-6681
                                e-mail : nuopt-info@ml.msi.co.jp
==================================================================