비선형 최적화를위한 R의 경사 하강 법 (nloptr 패키지)

이 게시물은 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)에서 경사 하강 법 최적화에 대한 자세한 내용을 확인할 수 있습니다.

Leave a Reply

답글 남기기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

Close

메타