---
title: "線形計画法とは？目的関数・制約条件と利益最大化の考え方【基本情報技術者試験】"
description: "線形計画法を、限られた時間・材料・人員の中で利益最大化や費用最小化を求める方法として整理し、目的関数・制約条件・実行可能領域の考え方を解説します。"
last_modified_at: "2026-08-02"
canonical_url: "https://stemtazoo.github.io/fe/linear-programming/"
section: "fe"
---

## まず結論

線形計画法とは、**限られた資源の中で、利益を最大にしたり、費用を最小にしたりする組合せを求める方法**です。

基本情報技術者試験では、次の言葉が出てきたら線形計画法を考えます。

```text
利益を最大にする
費用を最小にする
使える時間に上限がある
材料に上限がある
最適な生産量を求める
```

覚える一文はこれです。

> **限られた資源の中で、利益最大・費用最小を求めるのが線形計画法。**

## 直感的な説明

工場では、作りたい製品が複数あっても、使える時間や材料には限りがあります。

```text
製品Aは利益が高い
でも材料を多く使う

製品Bは利益は少し低い
でも短時間で作れる

製品Cは材料を多く使う
でも時間はあまりかからない
```

このとき、

```text
Aを何個作るか
Bを何個作るか
Cを何個作るか
```

を決めて、全体の利益が最大になる組合せを探します。

つまり、線形計画法は、

> **限られた時間・材料・人員を、どこへどれだけ配分すると一番よいか**

を考える方法です。

## 定義・仕組み

線形計画法では、主に次の3つを決めます。

1. 変数
2. 目的関数
3. 制約条件

### 変数

変数は、決めたい数量です。

例えば、製品A・B・Cの生産量を次のように置きます。

```text
x：製品Aの生産量
y：製品Bの生産量
z：製品Cの生産量
```

### 目的関数

目的関数は、最大化または最小化したいものです。

例えば、1個当たりの利益が次のとおりだとします。

```text
製品A：8千円
製品B：5千円
製品C：5千円
```

全体の利益は、

```text
8x + 5y + 5z
```

です。

したがって、目的は次のようになります。

```text
8x + 5y + 5z を最大化する
```

### 制約条件

制約条件は、守らなければならない上限や下限です。

製造時間が次のように必要だとします。

```text
製品A：2時間
製品B：3時間
製品C：1時間
```

月に使える製造時間が240時間なら、

```text
2x + 3y + z ≤ 240
```

です。

原料使用量が次のとおりだとします。

```text
製品A：2kg
製品B：1kg
製品C：2kg
```

使える原料が150kgなら、

```text
2x + y + 2z ≤ 150
```

です。

また、生産量が負になることはないため、

```text
x ≥ 0
y ≥ 0
z ≥ 0
```

という条件も必要です。

### 線形であるとは

目的関数と制約条件が、変数の1次式で表されることがポイントです。

```text
8x + 5y
2x + 3y ≤ 240
```

のように、変数同士の掛け算や2乗が含まれません。

```text
xy
x²
```

のような項がある場合は、通常の線形計画法とは異なります。

このテーマは、基本情報技術者試験の経営工学やORに関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、問題文の内容から適切な手法を選ぶ形で出題されます。

### 線形計画法を選ぶ手掛かり

```text
限られた資源
最適な組合せ
利益最大
費用最小
生産量
配分
```

これらがそろっていれば、線形計画法を考えます。

### 似た手法との切り分け

| 手法 | 主な目的 |
|---|---|
| 移動平均法 | 時系列データを平滑化して傾向を見る |
| 最小二乗法 | データに最も合う直線や曲線を求める |
| 線形計画法 | 制約の中で最適な組合せを求める |
| 定量発注法 | 在庫が減ったときに一定量を発注する |

試験では、次のように判断できます。

```text
売上や需要の変動を滑らかにする
→ 移動平均法

点の集まりから回帰直線を求める
→ 最小二乗法

時間や材料に上限があり、利益を最大化
→ 線形計画法

在庫を一定量ずつ補充する
→ 定量発注法
```

### 問題文を式にする

線形計画法の問題では、次の順番で整理します。

```text
1. 何を決めるか
2. 何を最大・最小にするか
3. 何に上限・下限があるか
```

例えば、

```text
何を決めるか
→ 各製品の生産量

何を最大化するか
→ 利益

何に上限があるか
→ 製造時間と原料
```

と読めれば、式へ変換しやすくなります。

## どんな場面で使う？

線形計画法は、資源配分を決める場面で使われます。

代表例は次のとおりです。

- 製品ごとの生産量を決める
- 人員の配置を決める
- 輸送量を決める
- 広告予算の配分を決める
- 原材料の配合を決める
- 費用を最小にする購入計画を立てる

### 生産計画

工場では、限られた機械時間や材料を、どの製品へ配分するかを決めます。

```text
利益最大
→ どの製品を何個作るか
```

### 輸送計画

複数の倉庫から複数の店舗へ商品を送る場合に、輸送費が最小になる配送量を求めます。

```text
費用最小
→ どこからどこへ何個送るか
```

### 人員配置

必要人数や勤務時間の条件を満たしながら、人件費が最小になる配置を求めます。

```text
必要人数を確保
かつ
人件費を最小化
```

## グラフで考える基本

変数が2つの場合は、グラフで考えられます。

例えば、

```text
2x + 3y ≤ 240
2x + y ≤ 150
x ≥ 0
y ≥ 0
```

という制約があるとします。

各不等式を満たす範囲を重ねると、すべての条件を満たす領域ができます。

この範囲を **実行可能領域** といいます。

```text
制約条件をすべて満たす範囲
→ 実行可能領域
```

線形計画法では、目的関数の最大値や最小値は、通常、この実行可能領域の頂点で求まります。

そのため、2変数の問題では、頂点を調べる方法がよく使われます。

## 科目Bでどう使う？

科目Bでは、変数、条件式、最大値探索の考え方につながります。

例えば、複数の生産量候補を調べる場合は、次のように考えます。

```text
すべての候補について
    制約条件を満たすか確認する
    満たすなら利益を計算する
    最大利益を更新する
```

Pythonで単純に探索すると、次のようになります。

```python
best_profit = -1
best_plan = None

for x in range(121):
    for y in range(81):
        for z in range(241):
            time_used = 2 * x + 3 * y + z
            material_used = 2 * x + y + 2 * z

            if time_used <= 240 and material_used <= 150:
                profit = 8 * x + 5 * y + 5 * z

                if profit > best_profit:
                    best_profit = profit
                    best_plan = (x, y, z)

print(best_profit, best_plan)
```

本来の線形計画法では、すべての組合せを総当たりしなくても効率よく解けます。

ただし、科目Bでは、

```text
制約条件を満たすか
目的値を計算する
最大値を更新する
```

という流れを理解しておくと役立ちます。

## よくある誤解・混同

### 最大値を求める問題ならすべて線形計画法

違います。

最大化・最小化に加えて、**制約条件の中で複数の変数の組合せを決める**ことがポイントです。

```text
単に最大値を探す
→ 必ずしも線形計画法ではない

資源制約の中で最適配分を求める
→ 線形計画法
```

### 移動平均法と同じ

移動平均法は、時系列データの変動を滑らかにする方法です。

```text
需要予測や傾向把握
→ 移動平均法

生産量の最適化
→ 線形計画法
```

### 最小二乗法と同じ

最小二乗法は、観測データに最もよく合う直線や曲線を求める方法です。

```text
回帰直線を求める
→ 最小二乗法

制約の中で利益最大
→ 線形計画法
```

### 定量発注法と同じ

定量発注法は、在庫が一定水準まで減ったときに、毎回決まった量を発注する方式です。

```text
発注タイミングと発注量
→ 定量発注法

複数製品の最適な生産量
→ 線形計画法
```

### 3つ以上の製品はグラフで解けない

2変数なら平面グラフで表せますが、3変数以上では図示が難しくなります。

それでも、考え方は同じです。

```text
目的関数
制約条件
非負条件
```

を整理して最適解を求めます。

### 制約条件は等式でなければならない

上限や下限は、不等式で表します。

```text
最大240時間
→ ≤ 240

最低100個
→ ≥ 100
```

## まとめ（試験直前用）

- 線形計画法は、制約の中で最適な組合せを求める方法
- 利益最大化や費用最小化に使う
- 決めたい数量を変数にする
- 最大・最小にしたい式が目的関数
- 時間・材料・人員などの上限が制約条件
- 変数は通常0以上
- 目的関数と制約条件は1次式で表す
- 2変数なら実行可能領域をグラフで考えられる
- 移動平均法は平滑化、最小二乗法は回帰、定量発注法は在庫補充
- 「限られた資源をどう配分するか」が判断の決め手

> **目的関数を決め、制約条件の中で最もよい組合せを探す。**
