How do you write Ranged Inequality Constraint in Pyomo

Question:

I’m new to Pyomo and I need help writing this equation in Pyomo.

I’m trying to write a (ranged inequality) constraint equation in Pyomo.

Here is the equation:

enter image description here

So far I wrote these 2 versions:

Version 1: Not sure if this correct

model.amount_of_energy_con = pe.ConstraintList()
for t in model.time:
    lhs = 0
    rhs = sum(model.c_ratings[s] * model.boat_capacity * model.charging[b, t, s] * model.boats_availability[b][t] for b in model.boats for s in model.chargers)
    body = sum(model.charge_energy[b, t, s] for b in model.boats for s in model.chargers)
    model.amount_of_energy_con.add(lhs <= body)
    model.amount_of_energy_con.add(body <= rhs)

Version 2: I think this is not correct

model.amount_of_energy_con = pe.ConstraintList()
for t in model.time:
    lhs = 0
    rhs = sum(model.c_ratings[s] * model.boat_capacity * model.charging[b, t, s] * model.boats_availability[b][t] for b in model.boats for s in model.chargers)
    body = sum(model.charge_energy[b, t, s] for b in model.boats for s in model.chargers)
    #model.amount_of_energy_con.add(expr=pe.inequality(lhs, body, rhs))
    model.amount_of_energy_con.add(lhs, body, rhs)

Note:

  1. All the subscripts in the equation are elements of 3 different sets. s Elements of Set S (model.chargers), b Elements of Set B (model.boats), t Elements of Set T (model.time).

  2. C-rate, Availability, Battery capacity are given parameters while E and Charging are Variables in Pyomo.

Please, let me know what you think and how to write it in Pyomo. Generally if there is something you think I’m doing wrong, please me know and also if you need my full code, data and further explanation let me know as well.

Thank you so much for your help

Asked By: Damilare Oyediran

||

Answers:

This solution works for me:

model.amount_of_energy_con = pe.ConstraintList()
    for t in model.time:
        for b in model.boats:
            for s in model.chargers:
                lhs = model.charge_energy[b, t, s]
                rhs = model.c_rating[s] * model.boat_battery_capacity * boats_availability[b, t] * model.charging[b, t, s]
                model.amount_of_energy_con.add(expr= (lhs <= rhs))

The problem with those previous versions I posted above in the question are:

  1. The sum() function/ method will do sum of the variables and parameters which is not what I want because the equation doesn’t have summation. The 2 versions above will work if we are trying to do summation of the variables on the right and left hand side separately.

  2. The 0 in the range inequalities/ left hand side was covered using the "within parameter" when writing the charge_energy variable as follows model.charge_energy = pe.Var(model.boats, model.time, model.chargers, within=pe.NonNegativeReals).

Thank you.

Answered By: Damilare Oyediran