이 게시물은 nloptr 패키지를 사용하여 R의 경사 하강 법 최적화를 소개합니다.
전송 문제 또는 네트워크 모델링 문제를 해결하려면 선형 프로그래밍으로 충분합니다.
그럼에도 불구하고 당면한 주제에 따라 비선형적인 추가 제약이나 목표를 고려할 때 비선형 프로그래밍이 관련성이있을 수 있습니다.
R은 비선형 문제를 해결하기위한 패키지를 제공합니다 : nloptr
이 게시물에서는 경사 하강 법을 적용하여 아래의 비선형 최적화 문제를 해결하기 위해 optimx 패키지를 적용 할 것입니다. 경사 하강 법 알고리즘은 가장 급격한 변화의 방향, 즉 최대 또는 최소 1 차 미분 방향을 찾습니다. 논리는 내가 가장 가파른 하강 방향으로 계속 이동하면 신속하게 최적으로 이동한다는 것입니다.
당면한 문제 :
중요 사항 : nloptr을 사용하여 비선형 문제를 모델링 할 때 문제를 최소화 문제로 명시해야하며 모든 부등식 제약 조건은 <= 0 (보다 작음) 유형이어야합니다. 이 함수는 같음 제약 조건을 처리 할 수 있으므로 같지 않은 제약 조건을 겹쳐서 대체 할 필요가 없습니다. 변수는 상자 제한이 허용되며, 이는 nloptr 솔버에서 고려할 수 있습니다. 그러나 시작점을 선택해야합니다.
R의 nloptr 패키지 (nloptr 함수 포함!)를 사용하여 경사 하강 법으로이 문제를 모델링하고 해결합니다.
# 패키지로드
library(nloptr)
# 최적화 할 기능 정의
eval_f <- function(x){
return(
list(
"objective"=x[1]^2+x[2]^2,
"gradient"=c(2*x[1],
2*x[2])
)
)
}
# 같지 않은 제약 조건을 나타내는 함수 정의 "<= 0"
eval_g_ineq <- function(x){
return(
list(
"constraints"=x[1]+x[2]-100,
"jacobian"=c(1,
1)
)
)
}
# 시작점 정의
x_0 <- c(10,10)
# nloptr 문서 파일에서 제안하는 추가 설정
# 이러한 설정 예 : 정확한 최적화 알고리즘 정의
local_opts <- list( "algorithm" = "NLOPT_LD_MMA",
"xtol_rel" = 1.0e-7 )
opts <- list( "algorithm" = "NLOPT_LD_AUGLAG",
"xtol_rel" = 1.0e-7,
"maxeval" = 1000,
"local_opts" = local_opts )
# 모델 및 문제 해결
solution <- nloptr(x0=x_0,
eval_f=eval_f,
lb=NULL,
ub=NULL,
eval_g_ineq = eval_g_ineq,
eval_g_eq = NULL,
opts=opts)
이제 최적화 결과를 검토해 보겠습니다.
print(solution)
##
## Call:
##
## nloptr(x0 = x_0, eval_f = eval_f, lb = NULL, ub = NULL, eval_g_ineq = eval_g_ineq,
## eval_g_eq = NULL, opts = opts)
##
##
## Minimization using NLopt version 2.4.2
##
## NLopt solver status: 3 ( NLOPT_FTOL_REACHED: Optimization stopped because
## ftol_rel or ftol_abs (above) was reached. )
##
## Number of Iterations....: 102
## Termination conditions: xtol_rel: 1e-07 maxeval: 1000
## Number of inequality constraints: 1
## Number of equality constraints: 0
## Optimal value of objective function: 1.09462903864043e-94
## Optimal value of controls: -7.398071e-48 -7.398071e-48
위키 백과 (https://en.wikipedia.org/wiki/Gradient_descent)에서 경사 하강 법 최적화에 대한 자세한 내용을 확인할 수 있습니다.
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply