1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| import gurobipy N = 10000 M = 1000 D_ = 121200 D_m = 200 D_a = 5000 Err_a = 50 Fix = 24 C_m = 5000 C_a = 1000 C_r = 8000 F_m = 10000 F_a = 50000 F_r = 10000 C_err = 10000 P = 3000
MODEL = gurobipy.Model()
m = MODEL.addVar(vtype=gurobipy.GRB.INTEGER, name='m') a = MODEL.addVar(vtype=gurobipy.GRB.INTEGER, name='a') r = MODEL.addVar(vtype=gurobipy.GRB.INTEGER, name='r') xm = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.BINARY, name='xm') xa = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.BINARY, name='xa') xr = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.BINARY, name='xr') xmm = MODEL.addVar(vtype=gurobipy.GRB.BINARY, name='xmm') xaa = MODEL.addVar(vtype=gurobipy.GRB.BINARY, name='xaa') xrr = MODEL.addVar(vtype=gurobipy.GRB.BINARY, name='xrr') dm = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.INTEGER, name='dm') da = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.INTEGER, name='da') dr = MODEL.addVars(range(1,M),vtype=gurobipy.GRB.INTEGER, name='dr') err = MODEL.addVar(vtype=gurobipy.GRB.INTEGER, name='err')
MODEL.update()
MODEL.setParam("NonConvex", 2) MODEL.setObjective(m*C_m+a*C_a+r*C_r+xmm*F_m+xaa*F_a+xrr*F_r+err*C_err+a*a*P,sense = gurobipy.GRB.MINIMIZE)
MODEL.addConstr(gurobipy.quicksum(xm) == m,name='c0') MODEL.addConstr(gurobipy.quicksum(xa) == a,name='c1') MODEL.addConstr(gurobipy.quicksum(xr) == r,name='c2') MODEL.addConstr(xmm <= gurobipy.quicksum(xm),name='c3') MODEL.addConstr(gurobipy.quicksum(xm) <= 10000*xmm,name='c4') MODEL.addConstr(xaa <= gurobipy.quicksum(xa),name='c5') MODEL.addConstr(gurobipy.quicksum(xa) <= 10000*xaa,name='c6') MODEL.addConstr(xrr <= gurobipy.quicksum(xr),name='c7') MODEL.addConstr(gurobipy.quicksum(xr) <= 10000*xrr,name='c8') for i in range(1,M): MODEL.addConstr(xm[i] <= dm[i],name=f'c9_{i}') for i in range(1,M): MODEL.addConstr(dm[i] <= 10000*xm[i],name=f'c10_{i}') for i in range(1,M): MODEL.addConstr(xa[i] <= da[i],name=f'c11_{i}') for i in range(1,M): MODEL.addConstr(da[i] <= 10000*xa[i],name=f'c12_{i}') for i in range(1,M): MODEL.addConstr(xr[i] <= dr[i],name=f'c13_{i}') for i in range(1,M): MODEL.addConstr(dr[i] <= 10000*xr[i],name=f'c14_{i}')
MODEL.addConstr(gurobipy.quicksum(dm)+gurobipy.quicksum(da) == D_,name='c15') MODEL.addConstr(err == a*50 - gurobipy.quicksum(dr),name='c16') MODEL.addConstr(err >= 0,name='c17') for i in range(1,M): MODEL.addConstr(dm[i] <= D_m ,name=f'c18_{i}') for i in range(1,M): MODEL.addConstr(da[i] <= D_a,name=f'c19_{i}') for i in range(1,M): MODEL.addConstr(dr[i] <= Fix,name=f'c20_{i}')
MODEL.optimize()
print("Obj:", MODEL.objVal) for v in MODEL.getVars(): print(f"{v.varName}:{round(v.x,3)}") print("m",m) print("a",a) print("r",r) print("最少花费:", MODEL.objVal)
|