Skip to content

AssetPortfolio

An AssetPortfolio is the container that holds all your energy assets. You add generators, batteries, and loads to it, then pass it to the EnergySystem.

Basic usage

from odys.energy_system_models.assets.generator import PowerGenerator
from odys.energy_system_models.assets.load import Load
from odys.energy_system_models.assets.portfolio import AssetPortfolio
from odys.energy_system_models.assets.storage import Battery

portfolio = AssetPortfolio()
portfolio.add_asset(PowerGenerator(name="gen", nominal_power=100.0, variable_cost=50.0))
portfolio.add_asset(Battery(
    name="bess", capacity=50.0, max_power=25.0,
    efficiency_charging=0.95, efficiency_discharging=0.95, soc_start=0.5,
))
portfolio.add_asset(Load(name="demand"))

Adding assets

Use add_asset() to add any EnergyAsset (generators, batteries, loads):

portfolio = AssetPortfolio()
portfolio.add_asset(generator)
portfolio.add_asset(battery)
portfolio.add_asset(load)

Warning

Asset names must be unique within a portfolio. Adding two assets with the same name raises a ValueError.

Accessing assets

You can retrieve a specific asset by name:

gen = portfolio.get_asset("gen")

Or get a read-only view of all assets:

all_assets = portfolio.assets  # MappingProxyType (read-only dict)

Filtering by type

The portfolio has convenience properties to get assets by type:

portfolio.generators  # tuple of all PowerGenerator assets
portfolio.batteries   # tuple of all Battery assets
portfolio.loads       # tuple of all Load assets

These return tuples, so they're safe to iterate over without worrying about accidental modification.