R을 이용한 최적화: 개념, 기원, 응용 및 사례 연구
Source: Dev.to
최적화의 기원
수학적 최적화 분야는 17세기로 거슬러 올라가며, 뉴턴과 라이프니츠와 같은 수학자들이 미적분학의 기초를 닦았습니다. 초기 최적화 문제는 함수의 최대값이나 최소값을 찾는 것이었으며, 이후에는 더 복잡하고 다변수 제약조건을 포함하게 되었습니다.
20세기 초에 들어서면서 최적화는 운영 연구를 통해 두드러지게 되었고, 특히 제2차 세계대전 동안 각국이 제한된 군사 자원을 효율적으로 배분해야 할 필요가 있었기 때문입니다. 선형 계획법은 1947년 조지 댄츠가 심플렉스 방법을 도입하면서 정형화되었으며, 이는 산업계가 자원 배분을 접근하는 방식을 혁신했습니다.
컴퓨팅 파워가 증가함에 따라 최적화는 이론 수학에서 널리 실용적인 사용으로 옮겨갔습니다. R과 같은 프로그래밍 언어가 등장하면서 최적화는 분석가, 데이터 과학자, 그리고 다양한 분야의 연구자들에게 접근 가능해졌습니다.
최적화란 무엇인가?
최적화는 사용 가능한 대안 집합 중에서 가장 좋은 해결책을 선택하는 과정을 말합니다. 여기에는 다음 요소가 포함됩니다:
- 목적 함수 – 예: 이익 최대화, 비용 최소화
- 결정 변수 – 우리가 조작하는 입력값
- 제약조건 – 자원이나 시간과 같은 제한 사항
- 최적 해 – 제약조건을 만족하면서 최상의 결과를 도출하는 해
최적화 문제는 일반적으로 두 가지 유형으로 나뉩니다:
- 제약 없는 최적화 – 결정 변수가 정의역 내에서 아무 값이나 가질 수 있음.
- 제약 있는 최적화 / 선형 계획법 (LP) – 변수에 제한이나 제약이 부과됨.
R은 optim() 같은 함수와 lpSolve, lpSolveAPI와 같은 패키지를 통해 두 유형을 모두 지원합니다.
R에서의 제약 없는 최적화
제약 없는 최적화는 제한 없이 함수의 최소값이나 최대값을 찾는 것을 의미합니다. R은 이러한 문제를 해결하기 위해 내장 함수 optim()을 제공합니다.
예시
# Define the objective function
f <- function(x) 4 * (x[1] - 1)^2 + 7 * (x[2] - 3)^2 + 30
# Starting point
c0 <- c(1, 1)
# Run optimization
result <- optim(c0, f)
# Display results
result$par # Optimal parameters
result$value # Minimum value of the function
result$convergence # 0 indicates successful optimization
출력은 최적 파라미터가 (~1, 3)에 가깝고, 함수의 최소값이 30, 수렴 상태가 0(성공)임을 보여줍니다.
선형 계획법 소개
선형 계획법(LP)은 선형 목적 함수를 선형 제약조건 하에 최적화하는 데 초점을 맞춥니다. 이는 자원 배분, 생산 계획, 운송, 에너지 관리, 일정 관리 등에 널리 활용됩니다.
LP 문제는 다음과 같은 구조를 가집니다:
- 목적 함수 – 최대화 또는 최소화
- 결정 변수 – 예:
y1, y2, … - 제약조건 – 선형 부등식 또는 등식
- 비음성 조건 –
y1 ≥ 0, y2 ≥ 0
lpSolve와 같은 패키지는 R에서 LP 구현을 간단하고 직관적으로 만들어 줍니다.
최적화의 실제 적용 사례
1. 공급망 및 물류
- 창고 위치 선정
- 배송 경로 계획
- 재고 관리
- 운송 비용 최소화
2. 제조
- 생산 일정 수립
- 폐기물 감소
- 기계 활용도 최대화
3. 금융
- 포트폴리오 구성(수익, 위험, 시장 제약을 균형) – (이차 계획법)
4. 농업
- 토지 면적, 작물 가격, 자원 제약, 인력 등을 고려한 파종 전략
5. 의료
- 간호사 스케줄링
- 환자 대기 시간 감소
- 병상 배정
사례 연구 1: 제품 믹스 최적화
한 기업이 두 제품 A와 B를 각각 $25와 $20에 판매합니다. 자원 및 시간 제약은 다음과 같습니다:
- 사용 가능한 자원: 1800 단위
- 사용 가능한 시간: 8시간(480분)
- 제품 A는 자원 20단위 필요; B는 12단위 필요
- 두 제품 모두 생산 시간 4분 필요
목표: 매출 최대화
[ \text{Revenue} = 25y_1 + 20y_2 ]
제약조건
[ \begin{aligned} 20y_1 + 12y_2 &\le 1800 \ 4y_1 + 4y_2 &\le 480 \ y_1, y_2 &\ge 0 \end{aligned} ]
R에서의 해결 (lpSolve)
library(lpSolve)
objective.in <- c(25, 20) # Coefficients of the objective
const.mat <- matrix(c(20, 12, 4, 4), nrow = 2, byrow = TRUE)
rhs <- c(1800, 480)
dir <- c("<=", "<=")
optimum <- lp("max", objective.in, const.mat, dir, rhs)
# Results
optimum$solution # Production quantities (y1, y2)
optimum$objval # Maximum revenue
최적 생산량
- 제품 A: 45단위
- 제품 B: 75단위
- 최대 매출: $2,625
사례 연구 2: 농업 최적화 문제
한 농부가 75에이커의 토지를 보유하고 있으며, 밀(x)과 보리(y)를 재배하고자 합니다. LP 모델은 파종 비용, 부셸당 이익, 에이커당 수확량, 저장 제약을 포함합니다.
목표: 이익 최대화
[ \text{Profit} = 143x + 60y ]
제약조건
[ \begin{aligned} 120x + 210y &\le 15000 \quad \text{(파종 비용)}\ 110x + 30y &\le 4000 \quad \text{(저장 한도)}\ x + y &\le 75 \quad \text{(토지 한도)}\ x, y &\ge 0 \end{aligned} ]
R에서의 해결 (lpSolveAPI)
library(lpSolveAPI)
lprec <- make.lp(0, 2) # 0 constraints, 2 decision variables
lp.control(lprec, sense = "max") # Maximization problem
set.objfn(lprec, c(143, 60)) # Objective coefficients
add.constraint(lprec, c(120, 210), "<=", 15000) # Planting cost
add.constraint(lprec, c(110, 30), "<=", 4000) # Storage limit
add.constraint(lprec, c(1, 1), "<=", 75) # Land limit
solve(lprec) # Solve the model
get.variables(lprec) # Optimal acres (x, y)
최적 면적
- 밀: 21.875 에이커
- 보리: 53.125 에이커
- 최대 이익: $6,315.63
왜 R를 최적화에 활용하는가?
- 내장 함수(
optim())와 강력한 라이브러리(lpSolve, lpSolveAPI, ROI, nloptr 등) - 제약조건과 해를 시각화하기 쉬움(
ggplot2등) - 통계 모델링 및 데이터 조작 파이프라인과 원활한 통합
- 오픈소스, 크로스‑플랫폼, 대규모 커뮤니티 지원
결론
최적화는 제조·물류부터 농업·금융에 이르기까지 현대 의사결정에 핵심적인 역할을 합니다. R을 사용하면 수학적 기능과 직관적인 패키지를 통해 최적화 모델 구현이 보다 접근 가능하고 실용적이 됩니다. 핵심 개념을 이해하고, 실제 사례를 탐색하며, 사례 연구를 직접 수행함으로써 자신만의 최적화 문제를 자신 있게 해결할 수 있습니다. 이익을 최대화하든, 비용을 최소화하든, 제한된 자원을 배분하든, R의 최적화는 더 스마트하고 효율적인 결정을 내릴 수 있게 도와줍니다.