Pyomo нелинейное ограничение на линейный - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь линеаризовать уравнение, используя логарифмы для расчета тепловыделения батареи (q_batt).

У меня много кода из открытого программного обеспечения oemof (oemof.readthedocs.io) и В этой части моя проблема:

    def _q_batt_first_rule(block, n, t):
        current = m.flow[n, i[n], t] / n.inflow_voltage
        expr = 0
        expr += block.q_batt[n, t] - n.inflow_resistance(block.capacity[n, t]) * current**2
        return expr == 0
    self.q_bat_first_rule = Constraint(self.STORAGES, reduced_timesteps,
                                       rule=_q_batt_first_rule)

Исходное уравнение:

q_batt = inflow_resistance * (inflow_flow / inflow_voltage)^2

И я хочу переписать его как линейный, чтобы иметь возможность решить его с помощью CB C solver

inflow_resistance (n.inflow_resistance (block.capacity [n, t])) - это входное линейное уравнение, которое зависит от емкости (которая является переменной, вычисляемой в объекте батареи - называемом блоком), inflow_flow ( m.flow [n, i [n], t]) рассчитывается в модели, а Voltage_in (n.inflow_voltage) является входной константой

Вы знаете, как это сделать?

Заранее спасибо!

...