内点法 (ないてんほう、英 : internal point method )とは、連続最適化問題 のアルゴリズム であり、カーマーカー法 に触発されて生まれた多くの手法の総称である。実行可能領域の内部を経由して、最適解に収束するのが特徴である。また、大規模問題に対しては計算効率が良い点や非線型問題にも対応できる点で、シンプレックス法 よりも優れているといえる。内点法は、点列を生成する方法によって、アフィン変換法 、ポテンシャル減少法 、パス追跡法 などに分類される。また、扱う問題によっては、与えられた問題を直接扱う方法(主内点法 、英 : primal interior point method )、その双対問題を扱う方法(双対内点法 、英 : dual interior point method )、主問題と双対問題を同時に解く方法(主双対内点法 、英 : primal-dual interior point method )に分けられる。
主双対内点法のアイディアは単純で、制約付き非線型最適化問題にも応用が可能である。ここでは単純のために制約式が全て不等式で与えられる非線型最適化問題について考える。
最小化:
f
(
x
)
{\displaystyle f(x)}
条件:
c
(
x
)
≥
0
,
x
∈
R
n
,
c
(
x
)
∈
R
m
(
1
)
{\displaystyle c(x)\geq 0,x\in \mathbb {R} ^{n},c(x)\in \mathbb {R} ^{m}~~~~(1)}
この最適化問題の対数バリア関数 は次のようになる。
B
(
x
,
μ
)
=
f
(
x
)
−
μ
∑
i
=
1
m
ln
(
c
i
(
x
)
)
(
2
)
{\displaystyle B(x,\mu )=f(x)-\mu \sum _{i=1}^{m}\ln(c_{i}(x))~~~~(2)}
ここで
μ
{\displaystyle \mu }
は正のスカラーで、時に「バリア・パラメータ」とも呼ばれる。この
μ
{\displaystyle \mu }
が0に収束していくと、
B
(
x
,
μ
)
{\displaystyle B(x,\mu )}
が最適解に収束していく。
前述のバリア関数の勾配は
g
b
=
g
−
μ
∑
i
=
1
m
1
c
i
(
x
)
∇
c
i
(
x
)
(
3
)
{\displaystyle g_{b}=g-\mu \sum _{i=1}^{m}{\frac {1}{c_{i}(x)}}\nabla c_{i}(x)~~~~(3)}
となる。ただし、
g
{\displaystyle g}
は元の関数
f
(
x
)
{\displaystyle f(x)}
の勾配であり、
∇
c
i
{\displaystyle \nabla c_{i}}
は
c
i
{\displaystyle c_{i}}
の勾配を表す。
主値
x
{\displaystyle x}
に加えて、双対値
λ
∈
R
m
{\displaystyle \lambda \in \mathbb {R} ^{m}}
をラグランジュ乗数として導入する。
∀
i
=
1
,
…
,
m
,
c
i
(
x
)
λ
i
=
μ
(
4
)
{\displaystyle \forall i=1,\ldots ,m,c_{i}(x)\lambda _{i}=\mu ~~~~(4)}
この条件は時に摂動相補性条件とも呼ばれる。式(4)を式(3)に適用することにより以下を得る。
g
−
A
T
λ
=
0
(
5
)
{\displaystyle g-A^{T}\lambda =0~~~~(5)}
ただし、行列
A
{\displaystyle A}
は制約
c
(
x
)
{\displaystyle c(x)}
のヤコビ行列 である。
式(5)が表しているのは関数
f
(
x
)
{\displaystyle f(x)}
の勾配が制約式の勾配により張られる部分空間の中に存在するということである。このとき小さな
μ
{\displaystyle \mu }
による摂動相補性条件は、最適解が
c
i
(
x
)
=
0
{\displaystyle c_{i}(x)=0}
の境界付近に存在するか、もしくは制約
c
i
(
x
)
{\displaystyle c_{i}(x)}
の勾配
g
{\displaystyle g}
がほとんど0であるということを表している。
式(4)および式(5)に対してニュートン法 を用いて
(
x
,
λ
)
{\displaystyle (x,\lambda )}
を更新していくことを考えると、その更新幅
(
p
x
,
p
λ
)
{\displaystyle (p_{x},p_{\lambda })}
は次の線型方程式の解として与えられる。
(
W
−
A
T
Λ
A
C
)
(
p
x
p
λ
)
=
(
−
g
+
A
T
λ
μ
1
−
C
λ
)
{\displaystyle {\begin{pmatrix}W&-A^{T}\\\Lambda A&C\end{pmatrix}}{\begin{pmatrix}p_{x}\\p_{\lambda }\end{pmatrix}}={\begin{pmatrix}-g+A^{T}\lambda \\\mu 1-C\lambda \end{pmatrix}}}
ただし行列
W
{\displaystyle W}
は関数
B
(
x
,
μ
)
{\displaystyle B(x,\mu )}
のヘッセ行列 であり、対角行列
Λ
{\displaystyle \Lambda }
は
λ
{\displaystyle \lambda }
を対角成分に持つ。また、
C
{\displaystyle C}
は
C
i
i
=
c
i
(
x
)
{\displaystyle C_{ii}=c_{i}(x)}
なる対角行列である。
式(1), (4), および
μ
>
0
{\displaystyle \mu >0}
から
λ
≥
0
{\displaystyle \lambda \geq 0}
がそれぞれのステップに課される。この条件を保つために、適切なステップ更新幅
α
{\displaystyle \alpha }
を選び、
(
x
,
λ
)
→
(
x
+
α
p
x
,
λ
+
α
p
λ
)
{\displaystyle (x,\lambda )\rightarrow (x+\alpha p_{x},\lambda +\alpha p_{\lambda })}
とすることで、最適解に向かって収束していく。