Files
2nd/10_Wiki/Topics/Computer_Science_and_Theory/Model-Predictive-Control (MPC).md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

4.1 KiB
Raw Blame History

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-model-predictive-control-mpc Model Predictive Control (MPC) 10_Wiki/Topics verified self
MPC
Receding-Horizon-Control
RHC
none A 0.95 applied
control
optimization
robotics
autonomous-vehicles
receding-horizon
2026-05-10 pending
language framework
python cvxpy-acados

Model Predictive Control (MPC)

매 한 줄

"매 step마다 future를 optimize, 첫 action만 실행, 매 반복". Receding horizon control은 매 dynamics model + cost + constraints를 매 online QP/NLP로 풀어낸다. 2026 자율주행·드론·humanoid robot의 매 dominant control paradigm으로 reinforcement learning과도 hybrid 구성된다.

매 핵심

매 정식화

min_{u_0..u_{N-1}} Σ (x_k, u_k) + V_f(x_N)
s.t. x_{k+1} = f(x_k, u_k)
     g(x_k, u_k) ≤ 0
     x_0 = x_current

매 첫 u_0만 적용, 다음 step에서 매 새 measurement로 재최적화.

매 종류

  • Linear MPC: f linear, quadratic → QP.
  • Nonlinear MPC (NMPC): NLP (IPOPT, acados).
  • Robust MPC: tube/min-max — uncertainty 처리.
  • Stochastic MPC: chance constraints.
  • Learning-based MPC: f를 NN/GP로.

매 응용

  1. Autonomous driving — trajectory tracking, lane change.
  2. Quadrotor / drone control.
  3. Humanoid locomotion (Boston Dynamics, Tesla Optimus 추정).
  4. Process industry — refinery, chemical plant.
  5. HVAC, smart grid.

💻 패턴

Linear MPC with CVXPY

import cvxpy as cp, numpy as np
def lin_mpc(A, B, x0, N=10, Q=None, R=None):
    nx, nu = B.shape
    Q = Q if Q is not None else np.eye(nx)
    R = R if R is not None else 0.1*np.eye(nu)
    x = cp.Variable((nx, N+1))
    u = cp.Variable((nu, N))
    cost, cons = 0, [x[:, 0] == x0]
    for k in range(N):
        cost += cp.quad_form(x[:, k], Q) + cp.quad_form(u[:, k], R)
        cons += [x[:, k+1] == A @ x[:, k] + B @ u[:, k]]
        cons += [cp.norm(u[:, k], 'inf') <= 1.0]
    cp.Problem(cp.Minimize(cost), cons).solve()
    return u[:, 0].value

NMPC with CasADi/acados (sketch)

import casadi as ca
x = ca.SX.sym('x', nx); u = ca.SX.sym('u', nu)
f = ca.Function('f', [x, u], [dynamics(x, u)])
# build NLP with multiple shooting...

Receding horizon loop

for t in range(T):
    x_meas = sensor.read()
    u_star = mpc_solve(x_meas)
    actuator.apply(u_star)

Reference tracking cost

cost += cp.quad_form(x[:, k] - x_ref, Q)

Soft constraint via slack

slack = cp.Variable(N, nonneg=True)
cons += [g(x[:, k], u[:, k]) <= slack[k]]
cost += 1e3 * cp.sum(slack)

Warm-start (next iter uses prev solution)

solver.set_initial_guess(shift(u_prev))

매 결정 기준

상황 MPC variant
Linear plant, quadratic cost QP-based linear MPC
Nonlinear dynamics NMPC (acados, CasADi)
Bounded uncertainty Tube MPC
Probabilistic constraint Stochastic MPC
Hard real-time (kHz) Explicit MPC (precomputed)

기본값: Linear MPC + warm-start (cycle time < 10 ms).

🔗 Graph

🤖 LLM 활용

언제: Constrained dynamic systems, real-time replanning, model + cost are known. 언제 X: Model 알 수 없거나 long-horizon strategic decision (use RL).

안티패턴

  • Horizon 너무 짧음: 매 myopic control.
  • Constraint feasibility 무시: infeasible 시 fallback 없음.
  • Cold-start 매 iteration: 매 latency 폭발 — warm-start 필수.
  • Plant-model mismatch 무시: 매 robust/adaptive 가 필요.

🧪 검증 / 중복

  • Verified (Rawlings, Mayne, Diehl "Model Predictive Control").
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — MPC formulation + CVXPY/acados patterns