応用情報技術者 2009年 春期 午前2 問72
問題文
製造業のA社では、NC工作機械を用いて、四つの仕事a,b,c,dを行っている。各仕事間の段取り時間は表のとおりである。合計の段取り時間が最小になるように仕事を行った場合の合計段取り時間は何時間か。ここで、仕事はどの順序で行ってもよいものとし、FROMからTOへの段取り時間で検討する。

選択肢
ア:4(正解)
イ:5
ウ:6
エ:7
🔒 解説は解答すると表示されます
最小段取り時間経路【午前2解説】
正解の理由
仕事の順序を全て試して合計段取り時間が最小となるものを選びます。与えられた表から、順序 b → a → c → d の段取り時間は 、、 で合計 時間となり、これが最小です。したがって選択肢アの4が正解となります。
解法ステップ
- 各仕事間の段取り時間を行列(または表)で確認する。自己遷移は考慮しない(左上から右下の斜線部分)。
- 仕事の順序は任意なので、4つの仕事の全順列(4! = 24通り)を考える。
- 各順列について隣接する仕事間の段取り時間を合計する(長さ4の列なら3つの遷移の和)。
- すべての合計を比較して最小値を採る。
- 今回は全列挙の結果、b → a → c → d の合計が最小の であることが確認できる。
(全探索を用いるのが確実。仕事数が増えると計算量は急増するので、必要に応じて動的計画法などで最適化する。)
簡潔な計算例:
- b → a → c → d の合計は
以下は全順列をプログラムで確認する例です。
from itertools import permutations
# cost[from][to]
cost = {
'a': {'b':2,'c':1,'d':2},
'b': {'a':1,'c':1,'d':2},
'c': {'a':3,'b':2,'d':2},
'd': {'a':4,'b':3,'c':2}
}
min_cost = 999
best = None
for perm in permutations(['a','b','c','d']):
total = sum(cost[perm[i]][perm[i+1]] for i in range(3))
if total < min_cost:
min_cost = total
best = perm
print(best, min_cost) # ('b','a','c','d') 4
選択肢別の誤答解説
-
ア(4)
b → a → c → d の合計 で、全順列の中で最小になるため正しい。 -
イ(5)
合計5になる順序は存在します(例:a → b → c → d は 、a → c → b → d は 、b → a → d → c は 等)。しかしさらに小さい4が存在するため最小値ではありません。 -
ウ(6)
合計6の例も複数あります(例:a → b → d → c は 、a → d → b → c は など)。だがこれも最小ではありません。 -
エ(7)
合計7になる順序も存在します(例:b → c → d → a は 等)。さらに小さい値があるため誤りです。
上記より、唯一の最小値は4であり、選択肢アが正解です。
よくある誤解
- 「対角成分(自己遷移)を0として順序の最初に足す必要がある」と誤解する人がいるが、設問は仕事間の切り替え時間のみを問うため、順序開始時の追加費用は存在しない(自己遷移は無視)。
- 「直感的に見て連続で近い作業を並べれば最短になる」と考えるが、局所的に小さい遷移を並べても全体では最短にならない場合があるため、全体評価が必要。
- 手で計算する際に、順序のうち一部だけ見て決め打ちしてしまい、最小となる別の開始仕事を見落とすことがある(今回の例では b を先頭にする考えを忘れがち)。
補足コラム
この種の問題は「有向重み付きグラフのハミルトンパスの最小コスト問題」に相当します。仕事数が小さい場合は全列挙(全探索)で確実に解けますが、仕事数が増えると組合せ爆発が起きます。一般には巡回セールスマン問題(TSP)やその派生として研究されており、動的計画法(Held–Karp アルゴリズム、計算量 )や近似アルゴリズムが使われます。本問は n=4 で全探索が簡便かつ確実です。
FAQ
Q: 始めの仕事をどれにするかで計算は変わりますか?
A: 始めの仕事を固定すると候補は減りますが、最小順序を見つけるには全始点を検討するか、最小となる始点が含まれる順列まで探索する必要があります。本問では始点を固定せず全順列を比較します。
A: 始めの仕事を固定すると候補は減りますが、最小順序を見つけるには全始点を検討するか、最小となる始点が含まれる順列まで探索する必要があります。本問では始点を固定せず全順列を比較します。
Q: 表は左右で対称ですか?
A: 表は一般に非対称(有向)です。 と が必ずしも同じとは限らないので注意します(本問でも非対称)。
A: 表は一般に非対称(有向)です。 と が必ずしも同じとは限らないので注意します(本問でも非対称)。
Q: 仕事数が増えたときの実務的対処法は?
A: 実務ではヒューリスティック(局所探索、遺伝的アルゴリズムなど)や動的計画法、また工程グルーピングで問題規模を下げる手法を組み合わせます。
A: 実務ではヒューリスティック(局所探索、遺伝的アルゴリズムなど)や動的計画法、また工程グルーピングで問題規模を下げる手法を組み合わせます。
関連キーワード: ジョブシケジューリング、段取り最適化、全探索、組合せ最適化、巡回セールスマン、動的計画法

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

