poolsearch.py​​.


poolsearch.py​​.


#!/ usr / bin / env python3.7#版权所有2021,guro狗万app足彩bi优化,llc#我们发现替代的epsilon  - 通过使用gulobipy导入gurobipy进口gurobipy进口gurobipy进口gurobipy进口gurobipy,找到替代的epsilon  - 最佳解决方案。尝试:#样品数据磨砂机=范围(10)objcoef = [32,32,15,15,6,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(proundset,objcoef))knapsackcoefdict = dict(zip(proundset,whapsackcoef))#初始化地面集的决策变量:#x [e] == 1如果选择元素e elem = model.addvars(proundset,vtype = grb.binary,name ='el')#设置目标函数model.modelsense = grb.maximize model.setObjective(elem.prod(objcoefdict))#约束:限制要选择的元素总数为大多数#pupget model.addconstr(elem.prod(whapsackcoefdict)<=预算,名称='BudgeT')#限制要收集Model.SetParam(GRB.Param.Poolsolutions,1024)#限制搜索空间,通过为最坏可能的解决方案#用于接受Model.SetParam(grb.param.poolgap,0.10)#对K-Best Solutions Model.SetParam(GRB.Param.PoolsearchMode,2)#保存问题模型.write('poolsearch.lp')#优化model.optimize()model.setparam(grb.param.outputflag,0)#状态检查状态= model.status如果状态(grb.inf_or_unbd,grb.infeasible,grb.unnounded):print('模型不能解决,因为它是不可行的或''无限制')sys.exit(1)如果状态!= grb.optimal:print(使用状态'+ str(状态)停止优化)sys.exit(1)#打印最佳选定的设置打印(“最佳解决方案中的选定元素:')在proundset中打印('\ t',end =''):如果Elem [e] .x> .9:print('el%d'%e,end ='')打印('')#Print of solutions of solutions nsolutions = model.solcount打印('找到的解决方案数:'+ str(nsolu))#e在范围内的解决方案的物理值(nsolutions):model.setparam(grb.param.solutionnumber,e)打印('%g'%model.poolobjval,如果e%15 == 14:打印('')打印('')#打印第四个最佳集合如果可用(nsolutions> = 4):model.setparam(grb.param.solutionnumer,3)打印('第四个最佳解决方案中的选定元素:')在proundset中打印('\ t',end =''):如果Elem [e] .xn> .9:print('el%d'%,end ='')打印('') except gp.GurobiError as e: print('Gurobi error ' + str(e.errno) + ": " + str(e.message)) except AttributeError as e: print('Encountered an attribute error: ' + str(e))