2016-06-24 5 views
1

です。mcoパッケージのngsa2を使用して、3つの目的で最適化問題を解決したいと考えています。要するに、環境問題を解決するために最適な土地利用を模索しています。 ここに私の実験があります: - 合計100回の土地利用が可能です(以下のコードではすべてオプション)。各土地利用は3つの公演(main.goal1、main.goal2、main.goal3)によって特徴付けられます。 - 私は50のフィールドを持ち、その特性(土壌の土壌はKq)が100の土地利用のサブセットになります(つまり、各フィールドですべての土地利用は不可能です)。> options.soil1とoptions.soil2グローバルなマルチ最適化機能の仕様はR

main.goal1、main.goal2、main.goal3をすべて最小限にするために、私の50のフィールドのそれぞれに土地利用を割り当てます。私が読んだことから、遺伝的アルゴリズムはこの種の問題に対して非常に強力です。

ここに私の仮想データがあります。

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)) 

私は私の目的関数は、私は行列Aを構築するためにどのようにR.と最適化に新しいですと残念ながら私が選びだし土地利用で、さらに行くことができなかった

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) 

のようになりますことを推測フィールドごとに? ngaを使って、これらの土地利用を返す方法は? (最小化されたmain.goal1、main.goal2、およびmain.goal3の値と一緒に)

私に提供できるすべての助けを前もっておかげさまで、私は実際にアドバイス/リンク/本を楽しみにしています。 。私の最適化問題に進めるための

敬具、ここで

答えて

0

が、私はこの問題を解決する方法である

LH:。

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の近代的な最適化」という非常に有益かつ有益な本の中にあるexemplesのおかげで、

LH

関連する問題