1
私は複数の等式と不等式に線形の問題があります。それは解決策の恩恵を受ける。遺伝的アルゴリズムの初期集団を改善するために、このシステムの複数のランダムな解を見つけたいと思います。制約充足度(CSP)R
誰もRでそれを行う方法のアイデアはありますか?お時間を
Thxを、
チャールズ
私は複数の等式と不等式に線形の問題があります。それは解決策の恩恵を受ける。遺伝的アルゴリズムの初期集団を改善するために、このシステムの複数のランダムな解を見つけたいと思います。制約充足度(CSP)R
誰もRでそれを行う方法のアイデアはありますか?お時間を
Thxを、
チャールズ
は、最適化機能のいくつかは、あなたが出発点を指定することができます:ランダムな出発点を選択することにより を、あなたは、さまざまなソリューションを持っている必要があります。
問題を修正することもできます。目的関数では、 はランダムな点までの距離を加算します。
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
を使用:あなたは、線形問題 を持っており、ユークリッド距離を使用する場合、 問題は次となり、解決することができますquadprog
パッケージの solve.QP
となります。
また、L^1ノルム(絶対値)を使用することもできます。 問題は線形問題として再定式化できます。
実際、私の客観的な概念は、平等性と不平等の制約を伴う非線形で非凸です。 Rsolnpのgosolnp()を使って解決しました。しかし、私は最適最適解、すなわち私の虚構の極小点しか見つけず、時間がかかりすぎて(10分)、それはあまりにも多くの時間を要します。なぜ今私はgenoud()を使用していますが、必要な時間は....です。だから私は最初の人口を改善しようとしています... – Charles
あなたの制約が比較的単純ならば、目的関数をあるランダムな点までの距離で置き換えることができます:それは実現可能な解を与えるでしょう。 –