multiobj.py


# !/usr/bin/env python3.7 # 2023年版权,Gurobi优化狗万app足彩,LLC #想覆盖三个不同但受制于共同的预算#元素允许被使用。然而,有不同的优先级设置为#覆盖;我们解决这个问题通过使用多目标优化。进口gurobipy从gurobipy gp进口伽马线暴进口sys试题:#示例数据Groundset =范围(20)子集=预算范围(4)= 12组= [[1,1,1,1,1,1,1,1,1,- 1,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,1,1,1,1,- 1,0,0,0,0,0,1,1,1,1,1],[0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0],[0,0,0,1,1,- 1,0,0,0,1,1,- 1,0,0,0,1,1,- 1,0,0]]SetObjPriority = [3、2、2、1] SetObjWeight =(1.0, 0.25, 1.25, 1.0) #创建初始模型模型= gp.Model (multiobj) #初始化决策变量为地面集:# x [e] = = 1如果元素e选择覆盖。Elem =模型。addVars (Groundset vtype =伽马线暴。二进制,name = ' El ') #约束:限制元素的总数是最多#预算model.addConstr (Elem.sum() < =预算名称=“预算”)#集全球意义上对所有目标模型。ModelSense =伽马线暴。最大化#限制解决方案收集model.setParam (GRB.Param多少。PoolSolutions, 100) #集和子集为我配置i客观:objn =总和(Elem [k] *[我][k] k范围内(len (Elem)))模型。setObjectiveN(objn, i, SetObjPriority[i], SetObjWeight[i], 1.0 + i, 0.01, 'Set' + str(i)) # Save problem model.write('multiobj.lp') # Optimize model.optimize() model.setParam(GRB.Param.OutputFlag, 0) # Status checking status = model.Status if status in (GRB.INF_OR_UNBD, GRB.INFEASIBLE, GRB.UNBOUNDED): print("The model cannot be solved because it is infeasible or " "unbounded") sys.exit(1) if status != GRB.OPTIMAL: print('Optimization was stopped with status ' + str(status)) sys.exit(1) # Print best selected set print('Selected elements in best solution:') selected = [e for e in Groundset if Elem[e].X > 0.9] print(" ".join("El{}".format(e) for e in selected)) # Print number of solutions stored nSolutions = model.SolCount print('Number of solutions found: ' + str(nSolutions)) # Print objective values of solutions if nSolutions > 10: nSolutions = 10 print('Objective values for first ' + str(nSolutions) + ' solutions:') for i in Subsets: model.setParam(GRB.Param.ObjNumber, i) objvals = [] for e in range(nSolutions): model.setParam(GRB.Param.SolutionNumber, e) objvals.append(model.ObjNVal) print('\tSet{} {:6g} {:6g} {:6g}'.format(i, *objvals)) except gp.GurobiError as e: print('Error code ' + str(e.errno) + ": " + str(e)) except AttributeError as e: print('Encountered an attribute error: ' + str(e))