Advertisement
Guest User

Untitled

a guest
Dec 13th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.03 KB | None | 0 0
  1. import gurobipy as gp
  2. from gurobipy import GRB
  3.  
  4. # Setting up model and variables
  5. # Introducing auxilliary 2 variables 'Deficit_stock' and 'Excess_stock' to replance non-linear Max() logic in objective function
  6. model = gp.Model('Network Balancing - Pilot')
  7. X = model.addVars(s_nodes, r_nodes, parts, name='x') # x_srp variable
  8. Deficit_stock = model.addVars(nodes, parts, name='d_stock') # deficit stock
  9. Excess_stock = model.addVars(nodes, parts, name='e_stock') # excess stock
  10. IE = model.addVars(nodes, parts, name='IE') #IE_srp variable (ending node)
  11.  
  12.  
  13. # Setting up constraints
  14. x_nonneg_const = model.addConstrs((X[(s, r, p)] >= 0 for s in s_nodes for r in r_nodes for p in parts), 'X_Non_Negativity')
  15. ie_nonneg_const = model.addConstrs((IE[(n, p)] >= 0 for n in nodes for p in parts), 'IE_Non_Negativity')
  16. for n in nodes:
  17.     for p in parts:
  18.         model.addConstr((IE[(n, p)] == IS_dict[(n, p)] + gp.quicksum(X[(s, n, p)] for s in s_nodes) - gp.quicksum(X[(n, r, p)] for r in r_nodes)), "balance")
  19. deficit_stock_const = model.addConstrs((Deficit_stock[(n, p)] >= 0 for n in nodes for p in parts), 'deficit_stock_const #1')
  20. deficit_stock_const = model.addConstrs((Deficit_stock[(n, p)] >= DS_dict[(n,p)] - IE[(n,p)] for n in nodes for p in parts), 'deficit_stock_const #2')
  21. excess_stock_const = model.addConstrs((Excess_stock[(n, p)] >= 0 for n in nodes for p in parts), 'excess_stock_const #1')
  22. excess_stock_const = model.addConstrs((Excess_stock[(n, p)] >= IE[(n,p)] - ES_dict[(n,p)] for n in nodes for p in parts), 'excess_stock_const #2')
  23.  
  24. # Setting up objective function
  25. # This is the point where memory error occurs
  26. obj = gp.quicksum(k*routes_dict[(s, r)] * gp.quicksum(X[(s,r,p)] for p in parts) for s in s_nodes for r in r_nodes) \
  27. + gp.quicksum(unit_value_dict[p] * gp.quicksum(Excess_stock[(n, p)] for n in nodes) for p in parts) \
  28. + gp.quicksum(unit_value_dict[p] * gp.quicksum(Deficit_stock[(n, p)] for n in nodes) for p in parts)
  29. model.setObjective(obj, GRB.MINIMIZE)
  30.  
  31. model.optimize()
  32.                                        
  33.  
  34.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement