基本情報技術者 2011年 秋期 午前(科目A) 問72
問題文
ある工場では表に示す3製品を製造している。実現可能な最大利益は何円か。ここで、各製品の月間需要量には上限があり、組立て工程に使える工場の時間は月間200時間までとする。また、複数種類の製品を同時に並行して組み立てることはできないものとする。

選択肢
ア:2,625,000
イ:3,000,000
ウ:3,150,000
エ:3,300,000(正解)
ある工場の製品組合せでの最大利益算出【午前2 解説】
要点まとめ
- 結論:最大利益は3,300,000円で、製品Xを1000個、製品Yを600個、製品Zを0個生産すると達成できます。
- 根拠:1分当たり利益はX=300円、Y=250円、Z=200円で時間制約(12,000分)を高密度順に使い切るのが有利です。
- 差がつくポイント:時間は「時間→分」に変換し、単位当たり利益ではなく「時間当たり利益」で比較することが合否を分けます。
正解の理由
組立て時間がボトルネックであり、同時並行できないため総「利用可能時間」を使い切ることが目的です。時間制約は200時間=分です。各製品の1分当たり利益を計算すると、
- X: 円/分
- Y: 円/分
- Z: 円/分
利益密度が高い順に生産する貪欲法で、まずXを需要上限1000個(必要時間分)生産し、残り時間分でYを可能な限り生産(1個10分なので600個)します。Zは時間不足で生産できません。利益は
よって正解は エ です。
よくある誤解
- 「1個当たりの利益が大きい製品を優先する」ことでZを優先してしまい、時間効率が悪く利益を取りこぼします。
- 時間の単位変換漏れ(時間を分に換算しない)で利用可能時間を誤って計算してしまいます。
- 連続量(分割生産)を許す問題と勘違いし、非整数個で計算してしまうことがありますが実際には個数は整数です。
解法ステップ
- 利用可能な組立て時間を分に変換する:.
- 各製品の1分当たり利益を計算する:(円/分).
- 利益密度の高い順に需要上限まで生産する(整数個)。
- Xを最大(1000個)生産し、残時間でYを生産、Zは残時間なしで0個。
- 合計利益を計算して選択肢と照合する。
選択肢別の誤答解説
- ア: 2,625,000円 — もしXを1000個(1,800,000円)生産して残時間でYを562.5個(非整数)として計算したような誤りか、単位変換ミスの可能性があります。整数条件を無視すると発生する値です。
- イ: 3,000,000円 — 製品Xを1000個(1,800,000円)とYを480個(1,200,000円)で計算した場合の合計で、残時間を有効活用していない組合せです。
- ウ: 3,150,000円 — Xを1000個とYを660個としたような時間超過や丸め誤差で出る値で、時間制約(12,000分)に合いません。
- エ: 3,300,000円 — X=1000個、Y=600個、Z=0個の組合せで制約を満たし、最大利益となるため正解です。
補足コラム
この問題は「単一資源制約の有界ナップサック(整数)問題」に相当します。アイテムが十分に小さく分割可能であれば貪欲法(利益密度順)が常に最適ですが、個数が整数であるときは一般に貪欲法が最適とは限りません。しかし本問では各製品の需要上限や時間割り当てが合致して貪欲法で最適解が得られます。実務的には「時間当たり利益(利益密度)」で優先順位を付け、残時間で次に有利な製品を選ぶ方法が有効です。
簡単な計算スクリプト例(確認用)
# 単純な貪欲シミュレーション
profit = {'X':1800,'Y':2500,'Z':3000}
time = {'X':6,'Y':10,'Z':15}
demand = {'X':1000,'Y':900,'Z':500}
T = 200*60
order = sorted(['X','Y','Z'], key=lambda k: profit[k]/time[k], reverse=True)
count = {k:0 for k in profit}
for k in order:
max_units = min(demand[k], T // time[k])
count[k] = max_units
T -= max_units * time[k]
count, sum(count[k]*profit[k] for k in count)
FAQ
Q: なぜ「1個当たり利益」で比較してはいけないのですか?
A: 生産時間が制約であるため、時間当たりの利益(利益密度)で比較しないと効率的な時間配分ができず、総利益が最大化されません。
A: 生産時間が制約であるため、時間当たりの利益(利益密度)で比較しないと効率的な時間配分ができず、総利益が最大化されません。
Q: 個数は必ず整数である必要がありますか?
A: 問題文に「個」とあるため整数個が前提です。分割生産が許される場合は線形計画で連続解が可能ですが、ここでは整数解を考えます。
A: 問題文に「個」とあるため整数個が前提です。分割生産が許される場合は線形計画で連続解が可能ですが、ここでは整数解を考えます。
Q: 貪欲法は常に最適ですか?
A: 連続(分数)ナップサックでは最適ですが、整数制約がある場合は反例が存在します。個別問題ごとに検討が必要です。
A: 連続(分数)ナップサックでは最適ですが、整数制約がある場合は反例が存在します。個別問題ごとに検討が必要です。
関連キーワード: 利益最大化、時間当たり利益、貪欲法、ナップサック問題、単一設備制約、整数最適化、資源配分

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

