1

複数の等式と不等式に関する線形の問題があります。無数のソリューションが存在します。遺伝的アルゴリズムの初期集団を改善するために、このシステムの倍数ランダム解を見つけたいと思います。

R でそれを行う方法を知っている人はいますか?

お時間いただきありがとうございます。

チャールズ

4

1 に答える 1

1

最適化関数の中には、開始点を指定できるものがあります。ランダムな開始点を選択すると、さまざまな解が得られます。

問題を修正することもできます。目的関数で、ランダムな点までの距離を追加します。

library(Rsolnp)
get_one_point <- function(...) {
  r <- NULL
  while( is.null(r) || r$convergence != 0 ) {
    x <- rnorm(2)
    r <- solnp( 
      rnorm(2), 
      # Minimize the distance to some point
      function(u) sum((u-x)^2),
      # Constraints we want to satisfy
      ineqfun = function(u) c(sum(u^2), u[2] - u[1]^2),
      ineqLB = c(1,0),
      ineqUB = c(2,5)
    )
  }
  r$pars
}  

# Plot the points and the constraints
library(parallel) # Very slow: run the optimizations in parallel
x <- mclapply( 1:10, get_one_point, mc.cores=detectCores() )
x <- do.call(rbind, x)
plot(x, 
  xlim=c(-2,2), ylim=c(0,2), 
  pch=15, cex=1.5, asp=1, las=1,
  xlab="", ylab=""
)
curve(x^2, add=TRUE)
curve(sqrt(1-x^2), add=TRUE)
curve(2*sqrt(1-x^2/4), add=TRUE)

制約を満たすそれほどランダムではない点

制約を関数として指定できるためだけRsolnpに使用しました。線形問題があり、ユークリッド距離を使用する場合、問題は二次になり 、パッケージsolve.QPから解決できます。quadprog

L^1 ノルム (つまり、絶対値) を使用することもできます。これにより、問題を線形問題として再定式化できます。

于 2012-04-25T15:59:16.887 に答える