Coverage for agentlib_flexquant/data_structures/globals.py: 100%
34 statements
« prev ^ index » next coverage.py v7.4.4, created at 2026-03-26 09:43 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2026-03-26 09:43 +0000
1"""Script containing global variables"""
3from typing import Literal
5# fixed string definitions
6PREP_TIME = "prep_time"
7MARKET_TIME = "market_time"
8FLEX_EVENT_DURATION = "flex_event_duration"
9PROFILE_DEVIATION_WEIGHT = "profile_deviation_weight"
10PROFILE_COMFORT_WEIGHT = "profile_comfort_weight"
11TIME_STEP = "time_step"
12PREDICTION_HORIZON = "prediction_horizon"
13FLEXIBILITY_OFFER = "FlexibilityOffer"
14LINEAR = 'linear'
15CONSTANT = 'constant'
16COLLOCATION = 'collocation'
17INTEGRATION_METHOD = Literal[LINEAR, CONSTANT]
18FlexibilityDirections = Literal["positive", "negative"]
19POWER_ALIAS_BASE = "_P_el_base"
20POWER_ALIAS_NEG = "_P_el_neg"
21POWER_ALIAS_POS = "_P_el_pos"
22STORED_ENERGY_ALIAS_BASE = "_E_stored_base"
23STORED_ENERGY_ALIAS_NEG = "_E_stored_neg"
24STORED_ENERGY_ALIAS_POS = "_E_stored_pos"
25full_trajectory_suffix: str = "_full"
26base_vars_to_communicate_suffix: str = "_base"
27shadow_suffix: str = "_shadow"
28COLLOCATION_TIME_GRID = 'collocation_time_grid'
29PROVISION_VAR_NAME = "in_provision"
30ACCEPTED_POWER_VAR_NAME = "_P_external"
31RELATIVE_EVENT_START_TIME_VAR_NAME = "rel_start"
32RELATIVE_EVENT_END_TIME_VAR_NAME = "rel_end"
34# cost function in the shadow mpc. obj_std and obj_flex are to be evaluated according
35# to user definition
36SHADOW_MPC_COST_FUNCTION = (
37 "return ca.if_else(self.time < self.prep_time.sym + "
38 "self.market_time.sym, obj_std, ca.if_else(self.time < "
39 "(self.prep_time.sym + self.flex_event_duration.sym + "
40 "self.market_time.sym), obj_flex, obj_std))"
41)
44def return_baseline_cost_function(power_variable: str, comfort_variable: str) -> str:
45 """Return baseline cost function
47 Args:
48 power_variable: name of the power variable
49 comfort_variable: name of the comfort variable
51 Returns:
52 Cost function in the baseline mpc, obj_std is to be evaluated according to
53 user definition
55 """
56 if comfort_variable:
57 cost_func = (
58 f"return ca.if_else(self.{PROVISION_VAR_NAME}.sym, "
59 f"ca.if_else(self.time < self.{RELATIVE_EVENT_START_TIME_VAR_NAME}.sym, obj_std, "
60 f"ca.if_else(self.time >= self.{RELATIVE_EVENT_END_TIME_VAR_NAME}.sym, obj_std, "
61 f"sum([self.profile_deviation_weight*(self.{power_variable} - "
62 f"self.{ACCEPTED_POWER_VAR_NAME})**2, "
63 f"self.{comfort_variable}**2 * self.profile_comfort_weight]))),obj_std)"
64 )
65 else:
66 cost_func = (
67 f"return ca.if_else(self.{PROVISION_VAR_NAME}.sym, "
68 f"ca.if_else(self.time < self.{RELATIVE_EVENT_START_TIME_VAR_NAME}.sym, obj_std, "
69 f"ca.if_else(self.time >= self.{RELATIVE_EVENT_END_TIME_VAR_NAME}.sym, obj_std, "
70 f"sum([self.profile_deviation_weight*(self.{power_variable} - "
71 f"self.{ACCEPTED_POWER_VAR_NAME})**2]))),obj_std)"
72 )
73 return cost_func