Untitled

 avatar
unknown
python
10 months ago
1.3 kB
10
Indexable
# Set up Gurobi environment
from gurobipy import Model, GRB

# Create a new model
model = Model('Optimization Problem')

# Define decision variables:
b1 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="b1")
b2 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="b2")
s0 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="s0")

payments_by_year = [10,11,12,14,15,17,19,20,22,24,26,29,31,33,36]

# Set the objective to minimize the amount of money spent
model.setObjective(0.98 * b1 + 0.965 * b2 + payments_by_year[0] + s0, GRB.MINIMIZE)

# Add the constraints
expr1 = 0.06 * b1 + 0.065 * b2 + 1.04 * s0
model.addConstr(expr1 >= payments_by_year[1], "c1")

prev_expr = expr1
for year in range(1,len(payments_by_year)-1):
    expr = (prev_expr - payments_by_year[year]) * 1.04 
    
    if year == 4:
        expr += 1.06 * b1
    elif year < 5:
        expr += 0.06 * b1
    
    if year == 11:
       expr += 1.065 * b2
    elif year < 12:
        expr += 0.065 * b2
    
    model.addConstr(expr >= payments_by_year[year+1], f'c{year+1}')
    prev_expr = expr
    

# Optimize the model
model.optimize()

# Display results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution found:\n b1: {b1.x}\n b2: {b2.x}\n s0: {s0.x}")
else:
    print("No optimal solution found.")
Editor is loading...
Leave a Comment