mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
commiting missing stuff
This commit is contained in:
parent
2a391ec5e3
commit
f43b3edd01
5 changed files with 42 additions and 7 deletions
|
|
@ -25,6 +25,6 @@ class BatterySAPScorer:
|
||||||
+ cls.COEF_PV_SIZE * pv_size
|
+ cls.COEF_PV_SIZE * pv_size
|
||||||
)
|
)
|
||||||
|
|
||||||
# Round + clamp to [0,5]
|
# Round + clamp to [1,5] - there are only a small number of cases with 0 points
|
||||||
sap_uplift = int(np.round(np.clip(sap_uplift, 0, 5)))
|
sap_uplift = int(np.round(np.clip(sap_uplift, 1, 5)))
|
||||||
return sap_uplift
|
return sap_uplift
|
||||||
|
|
|
||||||
|
|
@ -1136,7 +1136,12 @@ async def model_engine(body: PlanTriggerRequest):
|
||||||
# This is the uplift score ABS
|
# This is the uplift score ABS
|
||||||
uplift_project_score = optimal_solution["total_uplift_score"]
|
uplift_project_score = optimal_solution["total_uplift_score"]
|
||||||
# This is the SAP score associated to a battery
|
# This is the SAP score associated to a battery
|
||||||
battery_sap_score = optimal_solution["battery_sap_uplift"]
|
pv_size = next(
|
||||||
|
(m["array_size"] for m in optimal_solution["items"] if m["type"] == "solar_pv"), 0
|
||||||
|
)
|
||||||
|
battery_sap_score = BatterySAPScorer.score(
|
||||||
|
starting_sap=optimal_solution["ending_sap"], pv_size=pv_size
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
# We optimise and then we determine eligibility for funding, based on the measures selected
|
# We optimise and then we determine eligibility for funding, based on the measures selected
|
||||||
optimiser = (
|
optimiser = (
|
||||||
|
|
|
||||||
26
etl/customers/lincs_rural/prepare_data.py
Normal file
26
etl/customers/lincs_rural/prepare_data.py
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
"""
|
||||||
|
Rough script to prepare the data for Lincs Rural project
|
||||||
|
"""
|
||||||
|
import pandas as pd
|
||||||
|
from etl.find_my_epc.RetrieveFindMyEpc import RetrieveFindMyEpc
|
||||||
|
|
||||||
|
data = pd.read_excel(
|
||||||
|
"/Users/khalimconn-kowlessar/Downloads/MASTER LIST EPCS UPDATED November 2025 Domna Homes.xlsx",
|
||||||
|
sheet_name="PROPERTY EPC RATINGS"
|
||||||
|
)
|
||||||
|
|
||||||
|
# We have property RRNs - we need UPRN
|
||||||
|
|
||||||
|
for _, x in data.iterrows():
|
||||||
|
rrn = x["EPC Ref."]
|
||||||
|
|
||||||
|
# Fetch from find my epc
|
||||||
|
retriever = RetrieveFindMyEpc(
|
||||||
|
address="",
|
||||||
|
postcode="",
|
||||||
|
rrn=rrn,
|
||||||
|
address_postal_town="",
|
||||||
|
sap_rating=x["Actual"]
|
||||||
|
)
|
||||||
|
|
||||||
|
find_epc_data = retriever.retrieve_all_find_my_epc_data()
|
||||||
|
|
@ -533,18 +533,19 @@ def optimise_with_funding_paths(
|
||||||
# For properties that are including batteries, we need to adjust the starting SAP to include the battery SAP uplift
|
# For properties that are including batteries, we need to adjust the starting SAP to include the battery SAP uplift
|
||||||
# Note: We score on ending sap, as the battery SAP uplift is based on the ending SAP after fabric/heat/solar
|
# Note: We score on ending sap, as the battery SAP uplift is based on the ending SAP after fabric/heat/solar
|
||||||
# upgrades of each package is applied
|
# upgrades of each package is applied
|
||||||
|
# NB: The battery SAP uplift is used to potentially prioritise packages that include batteries, it does NOT impact
|
||||||
|
# the eventual SAP score at this point. Once the package is included, we'll re-calculate battery SAP score outside
|
||||||
|
# of this. This is because
|
||||||
solutions["battery_sap_uplift"] = solutions.apply(
|
solutions["battery_sap_uplift"] = solutions.apply(
|
||||||
lambda x: BatterySAPScorer.score(starting_sap=x["ending_sap"], pv_size=x["array_size"])
|
lambda x: BatterySAPScorer.score(starting_sap=x["ending_sap"], pv_size=x["array_size"])
|
||||||
if x["has_battery"] else 0,
|
if x["has_battery"] else 0,
|
||||||
axis=1
|
axis=1
|
||||||
)
|
)
|
||||||
# We add this on to ending SAP
|
|
||||||
solutions["ending_sap"] = solutions["ending_sap"] + solutions["battery_sap_uplift"]
|
|
||||||
|
|
||||||
solutions["starting_band"] = (solutions["starting_sap"] + solutions["already_installed_gain"]).apply(
|
solutions["starting_band"] = (solutions["starting_sap"] + solutions["already_installed_gain"]).apply(
|
||||||
funding.get_sap_band
|
funding.get_sap_band
|
||||||
)
|
)
|
||||||
solutions["ending_band"] = solutions["ending_sap"].apply(funding.get_sap_band)
|
solutions["ending_band"] = (solutions["ending_sap"] + solutions["battery_sap_uplift"]).apply(funding.get_sap_band)
|
||||||
solutions["floor_area_band"] = solutions["floor_area"].apply(funding.get_floor_area_band)
|
solutions["floor_area_band"] = solutions["floor_area"].apply(funding.get_floor_area_band)
|
||||||
solutions["project_score"] = solutions.apply(
|
solutions["project_score"] = solutions.apply(
|
||||||
lambda x: funding._calculate_full_project_abs(
|
lambda x: funding._calculate_full_project_abs(
|
||||||
|
|
|
||||||
|
|
@ -371,11 +371,14 @@ def flatten_recommendations_with_defaults(property_id, recommendations, selected
|
||||||
|
|
||||||
final_recommendations = []
|
final_recommendations = []
|
||||||
for recommendations_by_type in recommendations[property_id]:
|
for recommendations_by_type in recommendations[property_id]:
|
||||||
|
recs_by_type = []
|
||||||
for rec in recommendations_by_type:
|
for rec in recommendations_by_type:
|
||||||
rec_copy = {**rec, "default": rec["recommendation_id"] in selected}
|
rec_copy = {**rec, "default": rec["recommendation_id"] in selected}
|
||||||
if rec_copy.get("has_battery", False):
|
if rec_copy.get("has_battery", False):
|
||||||
rec_copy["sap_points"] += battery_sap_score
|
rec_copy["sap_points"] += battery_sap_score
|
||||||
final_recommendations.append(rec_copy)
|
recs_by_type.append(rec_copy)
|
||||||
|
|
||||||
|
final_recommendations.append(recs_by_type)
|
||||||
|
|
||||||
# Flatten the nested list of lists into a single list
|
# Flatten the nested list of lists into a single list
|
||||||
return [rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type]
|
return [rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue