1

NLOPTR의 ISRES 알고리즘을 부등식 제약 조건이있는 비선형 문제에 적용하는 동안 문제가 발생했습니다. 나는이처럼 공식화 : 테이블을 "누락 기본값은 없습니다"NLOPTR의 ISRES 알고리즘에서 불평등 제약 공식화

내가 뭔가를하고 있지 않다 같아요

library(nloptr) 
fn <- function(x) { 
(x[1]-10)^2 + 5*(x[2]-12)^2 + x[3]^4 + 3*(x[4]-11)^2 + 10*x[5]^6 + 7*x[6]^2 + x[7]^4 - 4*x[6]*x[7] - 10*x[6] - 8*x[7] 
} 

hin <- function(x) { 
h <- numeric(4) 
h[1] <- 127 - 2*x[1]^2 - 3*x[2]^4 - x[3] - 4*x[4]^2 - 5*x[5] 
h[2] <- 282 - 7*x[1] - 3*x[2] - 10*x[3]^2 - x[4] + x[5] 
h[3] <- 196 - 23*x[1] - x[2]^2 - 6*x[6]^2 + 8*x[7] 
h[4] <- -4*x[1]^2 - x[2]^2 + 3*x[1]*x[2] -2*x[3]^2 - 5*x[6] +11*x[7] 
return(h) 
} 

x0 <- c(1, 2, 0, 4, 0, 1, 1) 

isres(x0 = x0, fn = fn, hin = hin) 

나는 "인수를 일치의 오류 (HIN)"라는 메시지가 불평등 제약 조건으로 이 문제를 해결하는 방법을 알려주시겠습니까? 많은 많은 감사합니다!

답변

2

이것은 실제로 대답이 아닙니다. 그러나 나는 현재 논평 할 수 없다.

나는 문제가 이 아니며이 아니라 제약이 있다고 생각하지만 기능은 isres입니다. 당신은 기능 (당신의 콘솔에 isres을 입력)의 코드로 살펴 경우 시작은 다음과 같습니다

이제
function (x0, fn, lower, upper, hin = NULL, heq = NULL, maxeval = 10000, 
      pop.size = 20 * (length(x0) + 1), xtol_rel = 1e-06, nl.info = FALSE, 
      ...) 
{ 
    opts <- list() 
    opts$maxeval <- maxeval 
    opts$xtol_rel <- xtol_rel 
    opts$population <- pop.size 
    opts$algorithm <- "NLOPT_GN_ISRES" 
    fun <- match.fun(fn) 
    fn <- function(x) fun(x, ...) 
    if (!is.null(hin)) { 
    .hin <- match(hin) 
    hin <- function(x) (-1) * .hin(x) 
    } 
... 

라인 .hin <- match(hin)을 유의하시기 바랍니다. 일치 함수는 R이며 두 개의 인수 (예 : xtable)를 사용해야합니다. x %in% table을 실행합니다 (자세한 내용은 R 문서에서 ?match 확인). 그러나 isres은 함수에 테이블을 제공하지 않습니다. 알고리즘 "NLOPT_GN_ISRES" 직접 nloptr를 사용

  • (I) :

    약자로

    당신이 당신의 문제를 해결하기 위해 3 가지 옵션이 있습니다 알고 있습니다.
  • (II) 패키지의 mantainer는이 버그가 이미 알려져 있다고 전했다. 따라서 CRAN 버전 대신 github에서 개발 패키지를 사용하면 문제가 없습니다. 패키지가 내 컴퓨터에서 컴파일되지 않았 음을 유의하십시오.
  • (III) 버그가 수정 될 때까지 기다리십시오. 그들은 이제 문제에 대해 알게되어 꽤 빨리되어야합니다.
+2

'isres' 함수의 작성자는'match'보다는'match.call'을 의미한다고 생각합니다. –

+0

아. 매우 통찰력있는. 나는 패키지의 관리자에게 메일을 보낼 것이다. – Daniel

+0

@Ahnaf 제 질문을 대답했다고 표시하는 것을 잊지 말고 생각한다면 대답을주십시오. – Daniel