複数の等式と不等式に関する線形の問題があります。無数のソリューションが存在します。遺伝的アルゴリズムの初期集団を改善するために、このシステムの倍数ランダム解を見つけたいと思います。
R でそれを行う方法を知っている人はいますか?
お時間いただきありがとうございます。
チャールズ
複数の等式と不等式に関する線形の問題があります。無数のソリューションが存在します。遺伝的アルゴリズムの初期集団を改善するために、このシステムの倍数ランダム解を見つけたいと思います。
R でそれを行う方法を知っている人はいますか?
お時間いただきありがとうございます。
チャールズ
最適化関数の中には、開始点を指定できるものがあります。ランダムな開始点を選択すると、さまざまな解が得られます。
問題を修正することもできます。目的関数で、ランダムな点までの距離を追加します。
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 ノルム (つまり、絶対値) を使用することもできます。これにより、問題を線形問題として再定式化できます。