kaekenのTech探究ブログ

主に情報科学/情報技術全般(最近は、特にData Science、機械学習、深層学習、統計学、Python、数学、ビッグデータ)に関する知見をポストします。

OR(Operations Research)の概要・事例・Pythonサンプル

f:id:kaeken:20210913220623p:plain

OR概要

  • ORとは:最適化手法の一種。
オペレーションズ・リサーチ(英語:operations research、米)、
オペレーショナル・リサーチ(英語:operational research、英[1]、略称:OR)は、
数学的・統計的モデル、アルゴリズムの利用などによって、
さまざまな計画に際して最も効率的になるよう決定する科学的技法である。
複雑なシステムの分析などにおける意思決定を支援し、
また意思決定の根拠を他人に説明するためのツールである。
またゲーム理論や金融工学などもORの応用として誕生したものであり、
ORは政府、軍隊、国際機関、企業、非営利法人など、
さまざまな組織に意思決定のための数学的技術として使用されている。

ORの研究では、
線形計画法(linear programing)、動的計画法、順列組み合わせ、確率、
最適化および待ち行列理論、微分方程式、線形代数学など
の数学的研究を踏まえて現実の問題を数理モデルに置き換える。
そのことで、合理化された意思決定が可能となるだけでなく、
定量的な問題についても最適化を行うことができる。
近年は計算機を用いて煩雑な計算を実行する方法を研究することが多い。

また、ORは特定の領域の問題だけでなく幅広い領域に応用することが可能であり、
学際的な研究分野であるとも言える。

オペレーションズ・リサーチ - Wikipedia

OR活用事例

ORを探せ!
一暮らしに溶け込むOR-
オペレーションズ·リサーチ(Operations Research:OR)は
「困っていること」(=問題)を科学的に解決するための「問題解
決学」です。問題の分析と解決のための計画立案やその実施、意
思決定を助ける「実学」なのです。OR は問題のありかや応用の範
囲を選びません。そのため、OR の研究を進める日本OR 学会は
経済学,経営学,理学·工学·農学·医学,芸術など文系
理系を問わず、ありとあらゆる分野の会員から構成されています。
工場
エネルギー供給·配分
設備稼働を制御し、
エネルギー需給を最適化して、
省エネ·省コストに貢献
最適制御、起動停止計画、シミュレーション
需要予測
生産計画·スケジューリング
人モノ·時間を効率良く使い、
品質コスト納期のバランスの
取れた計画運用をする
生産管理、在庫管理、数理最適化
サプライチェーン
天候の変化や報道、
社会動向などから
製品の需要を予測する
時系列解析、回帰分析
空港
ゲート割当て
整備員や乗員が動きやすい
ゲート割当てを計画する
発着スケジューリング
定時率、離散系シミュレーション、
整数最適化
安全で効率的な離発着の
スケジュールを計画·実行
数理最適化、
荷物
マルチェージェントシミュレーション
詰込み
貨物やコンテナの積載率を上げる
食欲(どんよく)法、
切出し詰込み、
メタヒューリスイスる
収益管理
航空運賃をコントロールして
収益を最大化する
乗務員スケジューリング
動的価格設定、
vベニューマネジメント
乗務員の勤務スケジュールを
計画する
シフトスケジューリング、
集合被覆
ダイヤ
鉄道
ロ~m
電車のダイヤを決め、
遅延時にも速く回復させる
時空間ネットワーク、数理最適化、
運行スケジューサング
「乗り換え経路案内
速く楽に安く目的地に着く
経路をすぐに教える
グラフネットワーク、
最短路、ダイクストラ法
改札待ち行列
乗務員スタジューリング
始発から終電までの運転手や車掌、
駅員、保守担当者の仕事内容を決める
駅構内の混雑をシミュレーションして
乗客の流れをスムーズにする
待ち行列、
マルチエージェントシミュレーション
シフトスケジューリング、集合被覆、列生成
スマートフォン
スマートフォン上で
好みの商品やサービスを自動表示
データマイニング、レコメンデーション、
グラフネットワーク、機械学習
ロロマッチング
理想のパートナーを見つける
お見合い問題、安定結婚問題
行政
避難計画·防災
災害時の住民の避難場所や
避難経路の計画をサポート
防災
マルチェージェントシミュレーション、
公共政策と)
施設配置
消防署の位置、
学校の開校や統廃合を
決めるための情報を提供する
道路計画
施設配置、都市計画、
集合被覆、公平性
インフラ整備計画
福祉
メンテナシス
道路や建物、交通など
インフラ整備の効果を予測する
スマートシティ、都姉計画、時系列解析に
AHP(階層的意思決定法)。
評価のOR
インフラのメンテナンスの
計画作り
異常検知、信頼性
オフィスビル
資産運用
空調(エネルギー)
エネルギー源を組み合わせて
空調をコントロール
リスクの少ない
資産ポートフォリオを提案する
金融工学、平均分散モデル、
ボラティリティ、時系列解析
Fin Tech
エネルギーミックス、
デマンド·レスポンス
エレベーター制御
プロジェクトスケジューリング
エレベーターの
作業の開始·終了、その間の手順を
見える化して最適なスケジュールを決める
停止階を決めて、
移動時間や混雑を減らす
群管理、シミュレーション
ガントチャート、フローダイアグラム、
アローダイヤグラム、クリティカルパス
コンビニ
レジ·待ち行列
アルバイトシフト
客を待たせず、スムーズに会計
希望を反映したシフト
待ち行列、確率分布、フォーク並び、
マルコフ連鎖モンテカルロ法、
リトルの公式 A
シフトスケジューリング、
平準化、公平性、バランス、
メタヒューリスティクス
こちらへ
どうぞ~!
日日
陳列動線
つい買いたくなる陳列に変えて
売上げ増
「棚割、カウンティング、動線分析、
マーケティング、消費者行動、
消費者心理、行動観察
POS ビッグデータ
配送(物流)最適化在庫管理
どの商品がいつ誰に売れたかを
把握して販売を予測
マーケティング、需要予測、
レコメンデーション、在庫管理、
データマイニング
タイミング良く発注して、
廃棄や返品を減らし、
商品や在庫を無駄なく管理
経済的発注量、機会費用、
ロットサイズ決定モデル、サプライチェーン

公益社団法人 日本オペレーションズ・リサーチ学会

Ptyhonサンプル

インストール

$ pip install ortools

線形計画法のサンプルコード

from ortools.linear_solver import pywraplp


def main():
    # Create the linear solver with the GLOP backend.
    solver = pywraplp.Solver.CreateSolver('GLOP')

    # Create the variables x and y.
    x = solver.NumVar(0, 1, 'x')
    y = solver.NumVar(0, 2, 'y')

    print('Number of variables =', solver.NumVariables())

    # Create a linear constraint, 0 <= x + y <= 2.
    ct = solver.Constraint(0, 2, 'ct')
    ct.SetCoefficient(x, 1)
    ct.SetCoefficient(y, 1)

    print('Number of constraints =', solver.NumConstraints())

    # Create the objective function, 3 * x + y.
    objective = solver.Objective()
    objective.SetCoefficient(x, 3)
    objective.SetCoefficient(y, 1)
    objective.SetMaximization()

    solver.Solve()

    print('Solution:')
    print('Objective value =', objective.Value())
    print('x =', x.solution_value())
    print('y =', y.solution_value())


if __name__ == '__main__':
    main()

実行結果

Number of variables = 2
Number of constraints = 1
Solution:
Objective value = 4.0
x = 1.0
y = 1.0

その他分析可能なトピック

https://developers.google.com/optimization/introduction/python#more-python-examples

Linear optimization
Constraint optimization
Mixed-integer optimization
Bin packing
Network flows
Assignment
Scheduling
Routing