饮食
#版权所有2021,Gurobi O狗万app足彩ptimization,LLC ##解决经典饮食模型,展示如何将约束添加到现有模型。库(矩阵)库(Gurobi)#显示结果Printsolution < - 功能(型号,RE,NCategories,NFoods){if(res$status =='最佳'){cat('\ ncost:',res$Objval,'\ nbuy:\ n')for(j在ncategories + 1:nfoods){if(res$X [J]> 1E-4){CAT(格式(型号$varnames [j],justify ='左',width = 10),':',format(res$x [j],justify ='右',宽度= 10,nsmall = 2),'\ n')}} cat('\ nnutrition:\ n')for(j在1:ncategories){cat(格式(格式)模型$varnames [j],justify ='左',width = 10),':',format(res$x [j],justify ='右',宽度= 10,nsmall = 2),'\ n')}} else {cat('no solution \ n')}#定义原始数据类别< - c('卡路里','蛋白','脂肪','钠')ncategories < - 长度(类别)minnutrition < - c(1800,91,0,0)Maxnutrition < - C(2200,INF,65,1779)食品<- C('汉堡包','鸡','热狗','薯条','Macaroni','披萨','沙拉','牛奶','冰淇淋')nfoods < - 长度(食物)成本<-c(2.49, 2.89, 1.50, 1.89, 2.09, 1.99, 2.49, 0.89, 1.59) nutritionValues <- c( 410, 24, 26 , 730, 420, 32, 10 , 1190, 560, 20, 32 , 1800, 380, 4, 19 , 270, 320, 12, 10 , 930, 320, 15, 12 , 820, 320, 31, 12 , 1230, 100, 8, 2.5, 125, 330, 8, 10 , 180 ) # Build model model <- list() model$a < - spmatrix(ncategories,ncategories + nfoods,i = c(mapply(rep,1:4,1 + nfoods)),j = c(1,(ncategories + 1):( ncategories + nfoods),2,(nCategories + 1):( ncategories + nfoods),3,(ncategories + 1):( ncategories + nfoods),4,(ncategories + 1):( ncategories + nfoods)),x = c(-1.0,营养值[1+ nCategories *(0:(nfoods-1))],-1.0,营养值[2 + ncategoriation *(0 :( nfoods-1))],-1.0,营养值[3 + ncategories *(0 :( nfoods-1))],-1.0,营养值[4 + ncategories *(0:(nfoods-1))]))模型$obj < - c(rep(0,ncategories),成本)模型$LB < - C(minnutrition,rep(0,nfoods))模型$UB < - C(MaxNutrition,Rep(Inf,NFoods))模型$Varnames < - C(类别,食品)模型$RHS < - rep(0,ncategories)模型$感觉< - rep('=',ncategories)模型$CONSTRAMMES <类模型$ModelName < - '饮食'模型$modelsense < - 'min'#优化res < - gurobi(型号)Printsolution(型号,res,ncategories,nfoods)#添加约束:最多6份乳制品#这是约束b < - spmatrix的矩阵部分(1,ncategories + nfoods,i = rep(1,2),j =(ncategories + c(8,9)),x = rep(1,2))#附加b到模型$a < - rbind(型号$A,B)#扩展行相关的向量模型$constrammes < - C(模型$Constrames,'limit_dairy')模型$RHS < - C(型号$RHS,6)模型$感觉< - c(模型$sense,'<')#优化res < - gurobi(型号)printsolution(型号,res,ncategories,nfoods)#清除空间RM(RES,Model)