【问题标题】:Global multi-optimization function specification in RR中的全局多重优化函数规范
【发布时间】:2016-10-26 20:14:08
【问题描述】:

我想使用 mco 包的 ngsa2 来解决具有 3 个目标的优化问题。简而言之,我正在寻找解决环境问题的最佳土地利用方式。 这是我的实验: - 总共可能有 100 种土地用途(下面代码中的 all.options),每种土地用途的特点是三种性能(main.goal1、main.goal2 和 main.goal3)。 - 我有 50 个田地,其特征(田间土壤.Kq)是 100 种土地利用的子集(即每个田地不可能所有土地利用)=> options.soil1 和 options.soil2

我的目标是为我的 50 个田地中的每一个分配土地用途,以最大限度地减少 main.goal1、main.goal2 和 main.goal3 的总和。根据我的阅读,遗传算法对于此类问题非常强大。

这是我的虚拟数据。

set.seed(0)
all.options<-data.frame(num.option=1:100,main.goal1 = abs(rnorm(100)),
           main.goal2 = abs(rnorm(100)),
           main.goal3 = abs(rnorm(100))) # all possible combinations of the 3 goals
options.soil1<-subset(all.options, main.goal1>0.5) # possible combinations for soil1
options.soil2<-subset(all.options, main.goal3<0.5) # possible combinations for soil2

fields.Kq<-data.frame(num.field=1:50,soil=round(runif(50,0,1),0))

我猜我的目标函数应该是这样的

my.function<-function(x) {
  x[1]<-sum(A[,1) # main.goal1 for selected options for each of fields.Kq
  x[2]<-sum(A[,2) # main.goal2 for selected options for each of fields.Kq
  x[3]<-sum(A[,3) # main.goal3 for selected options for each of fields.Kq
} # where A should be a matrix of 50 lines with one line per field, and     #"choosen" land use option  

nsga2(my.function)

不幸的是,我无法更进一步,因为我是使用 R 优化的新手。如何构建矩阵 A,为每个领域选择土地用途? 并且使用,nga,如何归还这些土地使用? (连同 main.goal1、main.goal2 和 main.goal3 的优化(最小化)值?

提前感谢您为我提供的所有帮助,我真的很期待建议/链接/书籍...以推进我的优化问题。

最好的问候,

左侧

【问题讨论】:

    标签: r function optimization genetic-algorithm


    【解决方案1】:

    这是我解决问题的方法:

    library("mco")
    set.seed(0)
    all.options<-data.frame(num.option=1:100,main.goal1 = abs(rnorm(100)),
                            main.goal2 = abs(rnorm(100)),
                            main.goal3 = abs(rnorm(100)),soil=c(rep("soilType1",50),rep("soilType2",50))) # all possible combinations of the 3 goals
    
    fields.Kq<-data.frame(num.field=1:50,soil=rep(c("soilType1","soilType2"),25))
    
    main.goal1=function(x)    # x - a vector 
    { 
      main.goal1=sum(all.options[x,1]) # compute main.goal1
      return(main.goal1) }
    
    main.goal2=function(x)    # x - a vector 
    { 
      main.goal2=sum(all.options[x,2]) # compute main.goal2
      return(main.goal2) }
    
    main.goal3=function(x)    # x - a vector 
    { 
      main.goal3=sum(all.options[x,3]) # compute main.goal3
      return(main.goal3) }
    
    eval=function(x) c(main.goal1(x),main.goal2(x),main.goal3(x)) #objectivefunction
    
    D<-length(fields.Kq[,1]) # number of fields
    D2<-length(fields.Kq[,1])/2 # number of fields per type (simplified)
    D.soil1<-max(which(all.options$soil=="soilType1")) # get boundary for bound soil1
    D.soil2<-min(which(all.options$soil=="soilType2")) # get boundary for bound soil2
    
    G=nsga2(fn=eval,idim=D,odim=3,
            lower.bounds=c(rep(1,D2),rep(D.soil2,D2)),upper.bounds=c(rep(D.soil1,D2),rep(100,D2)), # lower/upper bound: min/max num option
            popsize=20,generations=1:1000, cprob = 0.7, cdist = 5,
            mprob = 0.2, mdist = 10)
    

    感谢 Paulo Cortez 所著的“R 中的现代优化”一书中非常有用且内容丰富的示例,我对其进行了定义。

    左侧

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 2016-10-28
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多