Skip to content

Instantly share code, notes, and snippets.

@upadhyan
upadhyan / 2SP_ServerFarm.py
Created October 19, 2022 04:37
Full 2SP Server Farm Code
import numpy as np
import gurobipy as gp
from gurobipy import GRB
## First Stage Constants
i = np.array([6,14,27])
s = np.array([1,5,3])
B = 1000
S = 100
## Second Stage Constants
# SOLVING
m.optimize()
result = x.x
print(f"Our Server farm will cost ${np.round(m.ObjVal,2)}. We should buy {result[0]} CPUs, {result[1]} GPUs, and {result[2]} TPUs ")
# Our Server farm will cost $995.6. We should buy 51.0 CPUs, 5.0 GPUs, and 8.0 TPUs
# CONSTRAINTS
## Installation Budget
m.addConstr(i @ x <= B)
## Space
m.addConstr(s @ x <= S)
## Meet demand in each scenario
m.addConstrs((
x + y[:,k] >= d_xi[:,k] for k in range(K)
# OBJECTIVE
m.setObjective(i @ x + gp.quicksum(c @ y[:,k] * p[k] for k in range(K)))
m = gp.Model("2SP")
m.ModelSense = GRB.MINIMIZE
m.setParam('OutputFlag', 0) # Telling gurobi to not be verbose
m.params.logtoconsole=0
# VARIABLES
## First Stage Decision variable
x = m.addMVar((3,), vtype = GRB.INTEGER, name = "x")
## 2nd stage decision for each potential scenario
y = m.addMVar((3,K), vtype = GRB.INTEGER, name = "y")
@upadhyan
upadhyan / 2SP_Setup.py
Last active October 19, 2022 04:02
Setting up a Two-Stage Stochastic Program for a server farm problem
import numpy as np
import gurobipy as gp
from gurobipy import GRB
## First Stage Constants
i = np.array([6,14,27])
s = np.array([1,5,3])
B = 1000
S = 100
## Second Stage Constants