manbet体育手机客户端


multiobj.py


#!/usr/bin/python #版权2018,Gurobi优化,L狗万app足彩LC #想覆盖三个不同的集合,但受制于#元素允许使用的共同预算。然而,这些设置有不同的优先级要覆盖;我们用多目标优化来解决这个问题。from __future__ import print_function from gurobipy import * try: # Sample data Groundset = range(20) Subsets = range(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,#创建初始模型model = model ('multiobj') #初始化地面集的决策变量:# x[e] == 1如果元素e被选择覆盖。Elem =模型。addVars (Groundset vtype =伽马线暴。addconstr (element .sum() <= Budget, name='Budget') #设置所有目标模型的全局意义。ModelSense =伽马线暴。MAXIMIZE # Limit how many solutions to collect model.setParam(GRB.Param.PoolSolutions, 100) # Set and configure i-th objective for i in Subsets: objn = sum(Elem[k]*Set[i][k] for k in range(len(Elem))) model.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 == GRB.Status.INF_OR_UNBD or \ status == GRB.Status.INFEASIBLE or \ status == GRB.Status.UNBOUNDED: print('The model cannot be solved because it is infeasible or unbounded') sys.exit(1) if status != GRB.Status.OPTIMAL: print('Optimization was stopped with status ' + str(status)) sys.exit(1) # Print best selected set print('Selected elements in best solution:') for e in Groundset: if Elem[e].X > 0.9: print(' El%d' % e, end='') print('') # 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) print('\tSet%d' % i, end='') for e in range(nSolutions): model.setParam(GRB.Param.SolutionNumber, e) print(' %6g' % model.ObjNVal, end='') print('') except GurobiError as e: print('Error code ' + str(e.errno) + ": " + str(e)) except AttributeError as e: print('Encountered an attribute error: ' + str(e))