poolsearch.py


# !/usr/bin/env python3.7 # 2023年版权,Gurobi优化狗万app足彩,LLC #我们找到替代epsilon-optimal解决一个给定的背包#问题通过使用PoolSearchMode __future__进口print_function进口gurobipy从gurobipy gp进口伽马线暴进口sys试题:#示例数据Groundset =范围(10)objCoef =[32岁,32岁,15日,15日,6日,1,1,1,1]knapsackCoef =[16 16 8、8、4、4、2、2、1、1]预算= 33 #创建初始模型模型= gp.Model (poolsearch) #创建字典tupledict.prod()函数objCoefDict = dict (zip (Groundset objCoef)) knapsackCoefDict = dict (zip (Groundset knapsackCoef)) #初始化决策变量为地面集:# x [e] = = 1如果选择元素e Elem =模型。addVars (Groundset vtype =伽马线暴。二进制,name = ' El ') #设置目标函数模型。ModelSense =伽马线暴。最大化model.setObjective (Elem.prod (objCoefDict) #约束:限制元素的总数是最多#预算model.addConstr (Elem.prod (knapsackCoefDict) < =预算名称=“预算”)#限制解决方案收集model.setParam (GRB.Param多少。PoolSolutions, 1024) #限制搜索空间通过设置一个缺口为最坏的可能的解决方案被接受model.setParam (GRB.Param #。PoolGap, 0.10) #做一个系统的搜索(GRB.Param model.setParam k-best解决方案。PoolSearchMode, 2) #保存问题model.write (poolsearch.lp) #优化model.optimize () model.setParam (GRB.Param。OutputFlag,0) #状态检查状态=模型。如果在韩国的地位状态。INF_OR_UNBD伽马线暴。不可行,GRB.UNBOUNDED):打印(的模型无法解决,因为它是不可行或““无界”)sys.exit(1)如果地位! =伽马线暴。优:打印(“优化是停止状态”+ str(地位))sys.exit(1) #打印最好选择设置打印(“最佳解决方案的选定元素:”)打印(‘\ t’,结束= ")在Groundset e:如果Elem [e]。X >。9:打印(El % d % e,结束= ")打印(”)#打印存储nSolutions =模型数量的解决方案。SolCount打印(“发现的解决方案:”+ str (nSolutions)) #打印解决方案的客观价值ein范围(nSolutions): model.setParam (GRB.Param。SolutionNumber, e)打印(“% g”%模型。PoolObjVal结束= ")如果e % 15 = = 14: print()打印()#最好打印第四组如果可用(nSolutions > = 4): model.setParam (GRB.Param。SolutionNumber, 3)打印(在第四个最佳解决方案:选定元素)打印(‘\ t’,结束= ")在Groundset e:如果Elem [e]。Xn >。9:打印(El % d % e,结束= ")打印除了gp (")。GurobiError e:打印(“Gurobi错误”+ str (e.errno) +“:”+ str (e.message))除了AttributeError e:打印('遇到一个属性错误:' + str (e))