7. 最適化計算の実行と管理 (MINTO)

7.1 実験管理ツールMINTOの役割と基本的な使い方

前の章まで、JijModelingを使って数理最適化モデルを定義し、OMMXを用いて求解する方法を学びました。実際のケースでは、パラメータをいろいろ変えて求解を行い、その結果を比較する実験管理を行うケースがでてきます。MINTOはこのような実験管理に用いることのできるツールです。

マシン台数を変更した実験例

MINTOを使用して、マシンの台数を変更しながら並列ジョブショップスケジューリング問題を解き、結果を比較する例を見てみましょう。

マシン台数を変更した実験


import minto
import pandas as pd
import matplotlib.pyplot as plt
import time
import numpy as np
import ommx_pyscipopt_adapter as scip_ad

# 問題は既に定義されているとする
# problem変数が既に定義されていると仮定

# ジョブデータ(固定)
job_times_data = [5, 8, 3, 6, 9, 4, 7, 5, 2, 8]  # 各ジョブの処理時間

# 実験用のマシン数の範囲
machine_counts = range(1, 6)  # 1台から5台まで実験

# MINTOの実験オブジェクトを作成
experiment = minto.Experiment("Parallel Machine Scheduling Experiment")

for num_machines in machine_counts:
    with experiment.run():
      # インスタンスデータを準備
      instance_data = {
          "JT": job_times_data,
          "M": num_machines
      }
      interpreter = jm.Interpreter(instance_data)
      instance = interpreter.eval_problem(problem)
      # solve
      solution = scip_ad.OMMXPySCIPOptAdapter.solve(instance)

      # 結果を保存
      experiment.log_solution("solution", solution)
    
これにより、以下のような結果をPandas DataFrameとして取得できます。

  experiment.get_run_table()
  
Machine Load Distribution

上記のように、MINTOを使用することで、異なるマシン数に対する最適化計算の結果を簡単に比較することができます。 上記の例では、マシンの台数を増やすたびにメイクスパン (objective)が減少していることがわかります。これは、マシンの台数を増やすことで、ジョブをより効率的に分散できるためです。 このように、MINTOを使用することで、最適化計算の実行と管理が容易になり、実験結果を迅速に分析することができます。