multibj.r.
#版权所有2019,Gurobi O狗万app足彩ptimization,LLC ##想要覆盖三个不同的集,但受允许使用#元素的共同预算。但是,该集合有不同的优先级#;我们通过使用多目标优化来解决这个问题。库(Matrix)库(GuRobi)#定义原始数据地面大小< - 20 nsubsets < - 4预算< - 12 SET < - 列表(C(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0),C(0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1),C(0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1),1,0,0),C(0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0))Setobjpriority < - C(3,2,2,1)Setobjweight < - C(1.0,0.25,1.25,1.0)#初始化模型模型< - list()模型$模型< - 'max'模型$ModelName < - 'multiobj'#set变量,所有这些都是二进制的,其中0,1界。模型$VTYPE < - 'B'模型$LB < - 0型号$UB < - 1模型$varnames < - paste(rep('el',groundsetsize),1:indardsetsize,sep ='')#构建约束矩阵模型$a < - spmatrix(1,lourdsetsize,i = rep(1,lindsetsize),j = 1:地面,x = rep(1,lindsetsize))模型$RHS < - C(预算)模型$感觉< - C('<')模型$CONSTRAMMES < - C('预算')#设置多目标模型$multiobj < - list()for(m在1:nsubsets){model$multiobj [[m]] < - list()模型$multiobj [[m]]$objn < - set [[m]]模型$multiobj [[m]]$优先级< - setobjpriority [M]模型$multiobj [[m]]$重量< - setobjweight [m]型号$multiobj [[m]]$ABSTOL < - M型号$multiobj [[m]]$Reltol < - 0.01型号$multiobj [[m]]$名称< - sprintf('set%d',m)模型$multiobj [[m]]$Con < - 0.0}#保存型号gurobi_write(型号,'multibj_r.lp')#set参数params < - list()params$Poolsolutions < - 100#优化结果< - Gurobi(型号,Params)#捕获解决方案信息(结果)(结果$状态!='最佳'){cat('优化完成状态',结果$状态,'\ n')停止('立即停止\ n')}#打印最佳解决方案cat(最佳解决方案中的选择元素:\ n')(例如,1:lindsetsize){if(结果$x [e] <0.9)下一只猫('el',e,sep ='')} cat('\ n')#迭代最佳的10个解决方案(如果(结果)'%)(结果)){solcount < - 长度(结果$池)CAT('找到的解决方案数:',solcount,'\ n')if(solcount < - 10)cat(solcount < - 10} cat('first'的客观值,solcount,'解决方案:\ n')(k在1:solcount){cat('解决方案',k,'具有目标:',结果$池[[k]]$objval [1],'\ n')}} else {solcount < - 1 cat(找到的解决方案数:',solcount,'\ n')cat('解决方案1具有目标:',结果$Objval,'\ n')}#清理RM(型号,PARAMS,结果)