---
title: "Branch and bound — 分枝限定法"
source: "https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95"
wiki: "systems-analysis.info/int"
article: "Branch_and_bound_—_分枝限定法"
language: "ja"
categories:
  - "Category:Japanese"
  - "Category:Operations research"
revision_id: 820
wiki_created_at: 2026-09-06T22:39:18Z
wiki_modified_at: 2026-09-06T22:39:18Z
downloaded_at: 2026-09-07T22:42:32Z
---

# Branch and bound — 分枝限定法

**分枝限定法**（ぶんしげんていほう、英語: *Branch and Bound*、略称: **B&B**または**BnB**）は、離散最適化問題および組合せ最適化問題、特にNP困難な問題を解くための厳密解法を構築するための一般的なアルゴリズムパラダイムである<sup>[\[1\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-en-wiki-bnb-1)</sup>。この手法は系統的な探索戦略であり、実行可能解の集合全体を部分集合に逐次的に分割（**分枝**）し、それぞれの部分集合に対して目的関数の値の評価値（**限定値**）を計算する。これらの評価値により、最適解を含まないと判断される部分集合を除外（剪定）することが可能となり、探索空間を大幅に削減できる<sup>[\[2\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-ru-wiki-bnb-2)</sup>。

この手法は、1960年にA. H. LandとA. G. Doigによって、整数計画問題を解くために初めて提案された<sup>[\[3\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-land-doig-1960-3)</sup>。以来、オペレーションズ・リサーチおよび計算機科学において最も基本的なアプローチの一つとなっている。この手法の重要な特徴はその柔軟性にある。特定のアルゴリズムではなく、解決すべき問題の構造に適応可能な高レベルの戦略的枠組み（フレームワーク）である。

## アルゴリズムの主要な構成要素

この手法は、探索木として構成される解空間の部分集合に適用される3つの基本的な操作に基づいている。

- **分枝** (英語: *Branching*) — 現在の実行可能解の集合 $S_{i}$ を、通常は互いに素な複数のより小さな部分集合 $S_{i1},S_{i2},\ldots,S_{ik}$ に再帰的に分割するプロセスである。各部分集合は新たな部分問題に対応し、探索木の子ノードとして表現される。例えば、整数計画問題では、線形計画緩和の解において非整数値をとる変数を基準に分枝を行うことが多い。

<!-- -->

- **限定** (英語: *Bounding*) — 探索木の各ノード（すなわち、各部分問題）に対して、目的関数の評価値が計算される。最小化問題の場合、これは**下界値**（*lower bound*）であり、その部分集合内の任意の解に対する保証された下限値となる。多くの場合、この評価値は、元の部分問題の*緩和問題*（例えば、整数制約のような複雑な制約を一時的に無視した単純化された問題）を解くことによって得られる。最も一般的に用いられるのは線形計画緩和である。

<!-- -->

- **剪定** (英語: *Pruning*) — 最適解を含まないことが保証されているノード（およびそれに対応する部分木全体）を探索対象から除外するプロセスである。ノードは以下のいずれかの場合に剪定される：

1.  **限定値による剪定**: あるノードの下界値が、現在見つかっている最良の実行可能解（**暫定解**、*incumbent*）の値よりも良くない（最小化問題の場合は大きいか等しい）場合。
2.  **実行可能性による剪定**: ノードの緩和問題の解が、元の問題においても実行可能である（例えば、すべての変数が整数値をとる）場合。この解は現在の暫定解と比較され、より良ければ暫定解が更新される。このノードからのさらなる分枝は不要となる。
3.  **非実行可能性による剪定**: ノードに対応する部分問題に実行可能解が存在しない場合。

## 一般的なアルゴリズム

最小化問題に対する分枝限定法の一般的なアルゴリズムは、以下のステップで記述できる：

1.  **初期化:** （例えばヒューリスティクスを用いて）初期実行可能解を見つけ、その値を初期の上界値（暫定解）$U$として設定する。アクティブなノードのキュー$Q$を作成し、ルートノード（元の問題）を追加する。
2.  **メインループ:** キュー$Q$が空になるまで以下を繰り返す：
    - 探索戦略（例えば、深さ優先探索や最良優先探索）に従って$Q$からノードを一つ選択する。
    - このノードに対して緩和問題を解き、下界値$L$を得る。
    - $L \geq U$ の場合、ノードを**剪定**する。
    - 緩和問題の解が元の問題で実行可能な場合、暫定解を更新する: $U\leftarrow L$。
    - ノードが剪定されず、かつ解が実行可能でない場合、**分枝**操作を行い、子ノードに分割してそれらをキュー$Q$に追加する。
3.  **終了:** キュー$Q$が空になった時点でアルゴリズムは終了する。暫定解$U$に対応する解が、大域的最適解となる。

## 主要な特性と定理

- **正当性と収束性:** 実行可能解の集合が有限であり、分枝操作が収束的（すなわち、再帰的な分割によって部分集合が点に「収縮」する）である場合、アルゴリズムは有限ステップで大域的最適解を確実に見つけ出すことが保証される<sup>[\[4\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-conitzer-duke-4)</sup>。
- **探索戦略:** アルゴリズムの効率は、次に分枝するノードの選択戦略（例えば、深さ優先探索、幅優先探索、最良優先探索）や、分枝変数の選択に大きく依存する。現代のソルバーは、しばしばハイブリッド戦略を用いる<sup>[\[5\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-maudet-danoy-2024-5)</sup>。

## 例

- **整数計画問題**: この手法の古典的な応用例。緩和問題として線形計画法が用いられる。分枝は非整数値をとる変数$x_{j}$に対して行われ、追加制約$x_{j} \leq \lfloor x_{j}^{\ast}\rfloor$と$x_{j} \geq \lceil x_{j}^{\ast}\rceil$を持つ2つの部分問題が生成される。
- **巡回セールスマン問題**: 解空間はグラフ内のすべてのハミルトン閉路である。分枝は辺（経路に含めるか／含めないか）によって行われる。下界値としては、割当問題や最小全域木の構築といった、より単純な問題の解が利用されることがある<sup>[\[6\]](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_note-little-1963-6)</sup>。

## 関連概念と応用

- **分枝カット法** (*Branch-and-Cut*): B&Bとカット平面法を組み合わせたハイブリッド手法。探索木の各ノードで緩和問題を解くだけでなく、下界値を強化する追加の不等式（カット）を生成し、より効率的な枝の剪定を可能にする。
- **バックトラッキング** (*Backtracking*): 分枝限定法は、最適化問題に対するこのアルゴリズムの一般化と見なすことができる。
- **アルファ・ベータ法**: ゲーム木において、明らかに負けにつながる枝を剪定するために用いられる、概念的に類似した手法。

## 関連項目

- 整数計画法
- 組合せ最適化
- 巡回セールスマン問題
- NP困難な問題
- シンプレックス法

## 脚注

1.  <span id="cite_note-en-wiki-bnb-1">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-en-wiki-bnb_1-0) Wikipedia contributors. (2025). Branch and bound. In *Wikipedia, The Free Encyclopedia*. Retrieved 2025-10-26, from <a href="https://en.wikipedia.org/wiki/Branch_and_bound" class="external free" rel="nofollow">https://en.wikipedia.org/wiki/Branch_and_bound</a></span>
2.  <span id="cite_note-ru-wiki-bnb-2">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-ru-wiki-bnb_2-0) Wikipedia contributors. (2023). Метод ветвей и границ. In *Русская Википедия*. Retrieved 2025-10-26, from <a href="https://ru.wikipedia.org/wiki/Метод_ветвей_и_границ" class="external free" rel="nofollow">https://ru.wikipedia.org/wiki/Метод_ветвей_и_границ</a></span>
3.  <span id="cite_note-land-doig-1960-3">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-land-doig-1960_3-0) Land, A. H.; Doig, A. G. (1960). An automatic method of solving discrete programming problems. *Econometrica*, 28(3), 497–520. DOI: 10.2307/1910129. URL: <a href="https://www.jstor.org/stable/1910129" class="external free" rel="nofollow">https://www.jstor.org/stable/1910129</a></span>
4.  <span id="cite_note-conitzer-duke-4">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-conitzer-duke_4-0) Conitzer, V. (2008). *Solving (mixed) integer programs using branch and bound*. Duke University, Department of Computer Science. URL: <a href="https://courses.cs.duke.edu/spring08/cps296.2/branch_and_bound.pdf" class="external free" rel="nofollow">https://courses.cs.duke.edu/spring08/cps296.2/branch_and_bound.pdf</a></span>
5.  <span id="cite_note-maudet-danoy-2024-5">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-maudet-danoy-2024_5-0) Maudet, G.; Danoy, G. (2024). Search Strategy Generation for Branch and Bound Using Genetic Programming. *arXiv preprint arXiv:2412.09444*. DOI: 10.48550/arXiv.2412.09444. URL: <a href="https://arxiv.org/abs/2412.09444" class="external free" rel="nofollow">https://arxiv.org/abs/2412.09444</a></span>
6.  <span id="cite_note-little-1963-6">[↑](https://systems-analysis.info/int/Branch_and_bound_%E2%80%94_%E5%88%86%E6%9E%9D%E9%99%90%E5%AE%9A%E6%B3%95#cite_ref-little-1963_6-0) Little, J. D. C.; Murty, K. G.; Sweeney, D. W.; Karel, C. (1963). An Algorithm for the Traveling Salesman Problem. *Operations Research*, 11(6), 972–989. DOI: 10.1287/opre.11.6.972. URL: <a href="https://dspace.mit.edu/bitstream/handle/1721.1/46907/branchboundmetho00litt.pdf" class="external free" rel="nofollow">https://dspace.mit.edu/bitstream/handle/1721.1/46907/branchboundmetho00litt.pdf</a></span>
