Is it possible to consider OPEX additionally to CAPEX which is necessary for the optimization with the investment mode?

oemof

#1

Dear oemof experts,

i am trying to optimise an energysystem with a battery, a fuel cell and a power heat coupling.

My problem ist, that oemof optimise the fuel cell and the power heat coupling bigger as it could be realistic. I think the result would be better, when oemof consinders the OPEX (operational costs in the for example 20 years lifetime).

Is this atm possible?

# Invest Batterie Definitionen
capexbat = 563  # investment cost
lifetime = 20  # life expectancy
wacc = 0.001  # weighted average of capital cost
epc_bat = capexbat * (wacc * (1 + wacc) ** lifetime) / ((1 + wacc) ** lifetime - 1)

#Batteriespeicher
energysystem.add(solph.components.GenericStorage(label='Batterie',
                                          inputs={bel: solph.Flow()},
                                          outputs={bel: solph.Flow()},
                                          nominal_input_capacity_ratio=0.35, 
                                          nominal_output_capacity_ratio=0.35,
                                          capacity_loss=0.001,
                                          inflow_conversion_factor=0.95, 
                                          outflow_conversion_factor=0.95,
                                          investment=solph.Investment(ep_costs=epc_bat)))

############################################################################
#                            P2G und KWK                                   #
############################################################################

# Gas und Wärme Bus initialisieren
bgas = solph.Bus(label="gas")
energysystem.add(bgas)
bheat = solph.Bus(label="heat")
energysystem.add(bheat)

# Gassenke
energysystem.add(solph.Sink(label='Gaseinspeisung', inputs={bgas: solph.Flow(
        variable_costs=-0.03)}))
    
# Gasquelle
energysystem.add(solph.Source(label='Gasbezug', outputs={bgas: solph.Flow(
        variable_costs=0.0615)}))
   
# Netzüberschuss, Einspeisung
energysystem.add(solph.Sink(label='Heatsink', inputs={bheat: solph.Flow(
        variable_costs=-0.01)}))

# Invest P2G Definitionen
capexbsz = 1220  # investment cost
lifetime = 20  # life expectancy
wacc = 0.001  # weighted average of capital cost
epc_ptg = capexbsz * (wacc * (1 + wacc) ** lifetime) / ((1 + wacc) ** lifetime - 1)    
    
# Power 2 Gas
energysystem.add(solph.Transformer(
                label="P2G",
                inputs={bel: solph.Flow()},
                outputs={bgas: solph.Flow()},
                conversion_factors={bgas: 0.58},
                investment=solph.Investment(ep_costs=epc_ptg)))

# Invest KWK Definitionen
capexbsz = 1000  # investment cost
lifetime = 20  # life expectancy
wacc = 0.001  # weighted average of capital cost
epc_kwk = capexbsz * (wacc * (1 + wacc) ** lifetime) / ((1 + wacc) ** lifetime - 1)   

# KWK
energysystem.add(solph.Transformer(
                label="KWK",
                inputs={bgas: solph.Flow()},
                outputs={bel: solph.Flow(), 
                         bheat: solph.Flow()},
                conversion_factors={bel: 0.40, bheat: 0.45},
                investment=solph.Investment(ep_costs=epc_kwk)))

#Gasspeicher
energysystem.add(solph.components.GenericStorage(label='Gasspeicher',
                                          inputs={bgas: solph.Flow(nominal_value=1000)},
                                          outputs={bgas: solph.Flow(nominal_value=1000)},
                                          nominal_value=20000,
                                          nominal_capacity=20000,
                                          capacity_loss=0.0001,
                                          inflow_conversion_factor=0.98, 
                                          outflow_conversion_factor=0.98))
    
##########################################################################

# initialise the operational model (create problem)
om = solph.Model(energysystem)```

#2

The equivalent periodical costs (ep_costs) are not defined by the oemof community, you can use them however you want. The calculations you find in some examples are just examples. Just keep in mind that these costs are related to the installed capacity represented by the investment variable. Therefore you can use it for all costs related to the installed capacity (capital_costs, fixed_operational_costs,…). For operational costs (OPEX) you should use the `variable_costs attribute because these costs are related to the flow variable (usage of the device).

energysystem.add(solph.Transformer(
                label="P2G",
                inputs={bel: solph.Flow()},
                outputs={bgas: solph.Flow(variable_costs=your_variable_costs)},
                conversion_factors={bgas: 0.58},
                investment=solph.Investment(ep_costs=your_fixed_costs)))

I do not understand how you want to consider variable costs (cost that depend on the usage of the device) for the future (next 20 years). If you want you can estimate these costs and add them to the fixed costs but this is quit unusual.