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) 

私は』引数を試合中にエラーが発生しました(ホアヒン)」というメッセージが出ます不等式の制約がある。これを解決する方法を教えてもらえますか?とても感謝しています!

答えて

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のベースで、x %in% tableRのドキュメントの詳細は、?matchのチェックを参照)を実行するため、2つの引数、つまりxtableが必要です。しかし、isresは関数にテーブルを提供しません。アルゴリズム"NLOPT_GN_ISRES"と直接nloptrを使用して

  • (I):

    現状では

    はあなたの問題を解決するために3つのオプションを持って知っています。
  • (II)パッケージのmantainerは、このバグはおそらく既に知られていると私に言った。したがって、CRANバージョンの代わりにgithubの開発パッケージを使用すると、うまくいきます。 パッケージがコンピュータでコンパイルされなかったことに注意してください。
  • (III)バグが修正されるまでお待ちください。彼らは今問題について知っているので、すぐにすべきです。
+2

私は 'isres'関数の作者は' match'ではなく 'match.call'を意味すると思います。 –

+0

Ah。非常に洞察力のある。私はパッケージのメンテナーにメールを書きます。 – Daniel

+0

@Ahnafあなたがそうだと思うなら私の質問に答えを記入し、そうでないと思ったら私にフィードバックを忘れることは忘れないでください。 – Daniel

関連する問題