Contraints Satisfaction Prob(CSP)R

时间:2012-04-25 15:20:44

标签: r optimization genetic-algorithm

我有一个多重均等和不等式的线性问题。它存在着无穷无尽的解决方案。我想找到这个系统的多次随机解决方案,以改善遗传算法的初始种群。

有没有人知道如何用R做?

你的时间,

查尔斯

1 个答案:

答案 0 :(得分: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因为它允许我指定约束 作为功​​能:如果你有一个线性问题 并使用欧几里德距离, 问题变成二次方,可以解决 来自solve.QP包的quadprog

你也可以使用L ^ 1范数(即绝对值): 然后可以将问题重新表述为线性问题。