Advertisement
Guest User

Untitled

a guest
Jan 5th, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. import numpy as np
  2. import gurobipy as gp
  3.  
  4. # define Gurobi model
  5. m = gp.Model("Unit Commitment")
  6.  
  7. n = 3
  8. ubs = [100, 90, 80]
  9. demands = [185, 150, 150]
  10. lb = 90
  11.  
  12. # define variables
  13. x = m.addMVar(n, ub=ubs, name="x")
  14.  
  15. # add constraints and names
  16. m.addConstr(sum(x[0], x[1]) >= demands[0], name="demand_0")
  17. m.addConstr(sum(x[0], x[2]) >= demands[1], name="demand_1")
  18. m.addConstr(sum(x[1], x[2]) >= demands[2], name="demand_2")
  19. m.addConstr(x[0] >= lb, name="lb")
  20.  
  21. # define objective function
  22. c = np.array([10, 8, 9])
  23. m.setObjective(c@x, gp.GRB.MINIMIZE)
  24.  
  25. # solve
  26. m.optimize()
  27.  
  28. # check status
  29. if m.status == gp.GRB.INFEASIBLE:
  30. print("infeasible")
  31. elif m.status == gp.GRB.OPTIMAL:
  32. print("feasible")
  33.  
  34. x_sol = x.X
  35. y_sol = np.array([
  36. m.getAttr("Pi", [m.getConstrByName("demand_{}".format(i))])[0]
  37. for i in range(n)
  38. ])
  39. val = m.objVal
  40. print("x={} y={} obj={}\n".format(x_sol, y_sol, val))
  41.  
  42. # gather existing constraints
  43. constrs_list = []
  44. for cs in m.getConstrs():
  45. sense = cs.sense
  46. name = cs.ConstrName
  47. if "demand_" in name:
  48. constrs_list.append(cs)
  49. print(constrs_list)
  50. col = gp.Column(np.ones(len(constrs_list)), constrs_list)
  51.  
  52. # add new variable
  53. x3 = m.addVar(obj=8, name='x[3]', column=col)
  54. m.update()
  55. x = m.getVars()
  56.  
  57. # add new upper bound constraints
  58. m.addConstr(x[3] <= 20)
  59.  
  60. # modify RHS
  61. m.setAttr("RHS", m.getConstrByName("lb"), 50)
  62.  
  63. # re-solve and check
  64. m.optimize()
  65. if m.status == gp.GRB.INFEASIBLE:
  66. print("infeasible")
  67. elif m.status == gp.GRB.OPTIMAL:
  68. print("feasible")
  69.  
  70. x_sol = [x[i].X for i in range(len(x))]
  71. y_sol = np.array([
  72. m.getAttr("Pi", [m.getConstrByName("demand_{}".format(i))])[0]
  73. for i in range(n)
  74. ])
  75. val = m.objVal
  76.  
  77. print("x={} y={} obj={}\n".format(x_sol, y_sol, val))
  78.  
  79. m.setParam('OutputFlag', 0)
  80. m.setParam(gp.GRB.Param.Threads, 4)
  81. m.setParam(gp.GRB.Param.TimeLimit, 60*60) # 1h time limit
  82. m.setParam(gp.GRB.Param.Crossover, 0)
  83. m.update()
  84.  
  85. m.optimize()
  86. if m.status == gp.GRB.INFEASIBLE:
  87. print("infeasible")
  88. elif m.status == gp.GRB.OPTIMAL:
  89. print("feasible")
  90.  
  91. x_sol = [x[i].X for i in range(len(x))]
  92. y_sol = np.array([
  93. m.getAttr("Pi", [m.getConstrByName("demand_{}".format(i))])[0]
  94. for i in range(n)
  95. ])
  96. val = m.objVal
  97.  
  98. print("x={} y={} obj={}\n".format(x_sol, y_sol, val))
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement