使用solnp进行非线性优化

时间:2017-01-30 07:23:45

标签: r optimization nonlinear-optimization

我有table1:

table 1

有:

  

p_code,v1,v2,v3sum,vmax fields

table1 v2字段是p_code:

中table2的v2值的聚合

table 2

我希望机器解决问题: maximize v3sum3 = v1+v2

其中:

  • v3sum> VMAX
  • v3sum< 3 * vmax

我的脚本在这里:

p_code<-1:12
v1<-sample(12)
v2<-0
v3sum<-0
vmax<-0

table1<-data.frame(p_code,v1,v2=0,v3sum,vmax)

table1$v3sum<-table1$v1+table1$v2

table1$vmax<-300

v2<-rep(2:7,50)
table2<-data.frame(p_codex=0,p_code=0,v2)

fn<-function(x){
    for(i in 1:nrow(table2)){
        table2$p_code[i]<-round(x[i])
    }
    print(table2$p_code)
    table2a<-aggregate(table2$v2,list(table2$p_code),sum)
    names(table2a)<-c("p_code","v2")
    table2_1<-merge(table2a,table1,all.y=TRUE)
    table2_1$v3sum<-table2_1$v1+table2_1$v2
    # View(table2_1)
    return(sum(table2_1$v3sum))
}

fnOgr<-function(x){
    table2$p_codex<-x
    for(i in 1:nrow(table2)){
        table2$p_code[i]<-round(x[i])
    }
    print(table2$p_code)
    table2a<-aggregate(table2$v2,list(table2$p_code),sum)
    names(table2a)<-c("p_code","v2")
    table2_1<-merge(table2a,table1,all.y=TRUE)
    table2_1$v3sum<-table2_1$v1+table2_1$v2
    # View(table2_1)
    return(table2_1$v3sum)
}

constraintsLower<-table1$vmax
constraintsUpper<-table1$vmax*3

x0<-c(1:nrow(table2))

LB_p<-c(rep(0,nrow(table2)))
UB_p<-c(rep(12,nrow(table2)))
sol1<-solnp(x0, fun = fn, ineqfun = fnOgr, ineqLB = constraintsLower, ineqUB=constraintsUpper, LB=LB_p, UB=UB_p) 

但显然x0没有变化。问题仍未解决。有谁可以帮助我?

谢谢

0 个答案:

没有答案