2012-04-25 4 views
1

私は複数の等式と不等式に線形の問題があります。それは解決策の恩恵を受ける。遺伝的アルゴリズムの初期集団を改善するために、このシステムの複数のランダムな解を見つけたいと思います。制約充足度(CSP)R

誰もRでそれを行う方法のアイデアはありますか?お時間を

Thxを、

チャールズ

答えて

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) 

Not-so-random points satisfying the constraints

それは私が関数として制約を 指定することができますので、私は唯一のRsolnpを使用:あなたは、線形問題 を持っており、ユークリッド距離を使用する場合、 問題は次となり、解決することができますquadprogパッケージの solve.QPとなります。

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

+0

実際、私の客観的な概念は、平等性と不平等の制約を伴う非線形で非凸です。 Rsolnpのgosolnp()を使って解決しました。しかし、私は最適最適解、すなわち私の虚構の極小点しか見つけず、時間がかかりすぎて(10分)、それはあまりにも多くの時間を要します。なぜ今私はgenoud()を使用していますが、必要な時間は....です。だから私は最初の人口を改善しようとしています... – Charles

+0

あなたの制約が比較的単純ならば、目的関数をあるランダムな点までの距離で置き換えることができます:それは実現可能な解を与えるでしょう。 –

関連する問題