mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
refactoring router
This commit is contained in:
parent
a5e6dc3399
commit
4ebd516d2e
1 changed files with 29 additions and 29 deletions
|
|
@ -661,15 +661,7 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
for key, scored in predictions_dict.items():
|
for key, scored in predictions_dict.items():
|
||||||
all_predictions[key] = pd.concat([all_predictions[key], scored])
|
all_predictions[key] = pd.concat([all_predictions[key], scored])
|
||||||
|
|
||||||
# We now produce predictions for the kwh models
|
# Insert the predictions into the recommendations, and get the impact summary
|
||||||
|
|
||||||
# Insert the predictions into the recommendations and run the optimiser
|
|
||||||
# TODO: If a recommendation has a negative impact on SAP, we should remove it - this seems to have become a
|
|
||||||
# possibility with heating system
|
|
||||||
# TODO: After optimising, if there are any cheap, quick win measures (e.g. insulate water tank with hot water
|
|
||||||
# cylinder jacket), we should add these to the recommendations as default
|
|
||||||
raise Exception("Add the cost impacts into the cost model")
|
|
||||||
logger.info("Optimising recommendations")
|
|
||||||
scoring_epcs = [] # For scoring the kwh models
|
scoring_epcs = [] # For scoring the kwh models
|
||||||
for property_id in recommendations.keys():
|
for property_id in recommendations.keys():
|
||||||
property_instance = [p for p in input_properties if p.id == property_id][0]
|
property_instance = [p for p in input_properties if p.id == property_id][0]
|
||||||
|
|
@ -686,10 +678,33 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
# at each phase
|
# at each phase
|
||||||
property_scoring_epcs = property_instance.update_simulation_epcs(impact_summary)
|
property_scoring_epcs = property_instance.update_simulation_epcs(impact_summary)
|
||||||
scoring_epcs.extend(property_scoring_epcs)
|
scoring_epcs.extend(property_scoring_epcs)
|
||||||
|
recommendations[property_id] = recommendations_with_impact
|
||||||
|
|
||||||
input_measures = prepare_input_measures(recommendations_with_impact, body.goal)
|
# We call the API with the scoring epcs
|
||||||
|
scoring_epcs = pd.DataFrame(scoring_epcs)
|
||||||
|
scoring_epcs = kwh_client.transform(data=scoring_epcs, cleaned=cleaned)
|
||||||
|
|
||||||
current_sap_points = int(property_instance.data["current-energy-efficiency"])
|
kwh_simulation_predictions = model_api.predict_all(
|
||||||
|
df=scoring_epcs,
|
||||||
|
bucket=get_settings().DATA_BUCKET,
|
||||||
|
prediction_buckets=get_prediction_buckets(),
|
||||||
|
model_prefixes=["heating_kwh_predictions", "hotwater_kwh_predictions"],
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: Costing model, which should include today's costs!
|
||||||
|
|
||||||
|
# Insert the predictions into the recommendations and run the optimiser
|
||||||
|
# TODO: If a recommendation has a negative impact on SAP, we should remove it - this seems to have become a
|
||||||
|
# possibility with heating system
|
||||||
|
# TODO: After optimising, if there are any cheap, quick win measures (e.g. insulate water tank with hot water
|
||||||
|
# cylinder jacket), we should add these to the recommendations as default
|
||||||
|
|
||||||
|
for p in input_properties.keys():
|
||||||
|
if not recommendations[p.id]:
|
||||||
|
continue
|
||||||
|
input_measures = prepare_input_measures(recommendations[p.id], body.goal)
|
||||||
|
|
||||||
|
current_sap_points = int(p.data["current-energy-efficiency"])
|
||||||
target_sap_points = epc_to_sap_lower_bound(body.goal_value)
|
target_sap_points = epc_to_sap_lower_bound(body.goal_value)
|
||||||
sap_gain = CostOptimiser.calculate_sap_gain_with_slack(target_sap_points - current_sap_points)
|
sap_gain = CostOptimiser.calculate_sap_gain_with_slack(target_sap_points - current_sap_points)
|
||||||
|
|
||||||
|
|
@ -716,7 +731,7 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
"internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation"
|
"internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation"
|
||||||
]):
|
]):
|
||||||
ventilation_rec = next(
|
ventilation_rec = next(
|
||||||
(r[0] for r in recommendations_with_impact if r[0]["type"] == "mechanical_ventilation"),
|
(r[0] for r in recommendations[p.id] if r[0]["type"] == "mechanical_ventilation"),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -730,29 +745,14 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
{**rec, "default": True if rec["recommendation_id"] in selected_recommendations else False}
|
{**rec, "default": True if rec["recommendation_id"] in selected_recommendations else False}
|
||||||
for rec in recommendations_by_type
|
for rec in recommendations_by_type
|
||||||
]
|
]
|
||||||
for recommendations_by_type in recommendations_with_impact
|
for recommendations_by_type in recommendations[p.id]
|
||||||
]
|
]
|
||||||
|
|
||||||
# We'll also unlist the recommendations so they're a bit easier to handle from here onwards
|
# We'll also unlist the recommendations so they're a bit easier to handle from here onwards
|
||||||
final_recommendations = [
|
final_recommendations = [
|
||||||
rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type
|
rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type
|
||||||
]
|
]
|
||||||
recommendations[property_id] = final_recommendations
|
recommendations[p.id] = final_recommendations
|
||||||
|
|
||||||
# We call the API with the scoring epcs
|
|
||||||
scoring_epcs = pd.DataFrame(scoring_epcs)
|
|
||||||
scoring_epcs = add_features_from_code(scoring_epcs)
|
|
||||||
scoring_epcs = add_estimate_annual_kwh(scoring_epcs)
|
|
||||||
# TODO: Drop all potential and env columns
|
|
||||||
kwh_simulation_predictions = model_api.predict_all(
|
|
||||||
df=scoring_epcs,
|
|
||||||
bucket=get_settings().DATA_BUCKET,
|
|
||||||
prediction_buckets=get_prediction_buckets(),
|
|
||||||
model_prefixes=["heating_kwh_predictions", "hotwater_kwh_predictions"],
|
|
||||||
extract_ids=True
|
|
||||||
)
|
|
||||||
|
|
||||||
# TODO: Costing model, which should include today's costs!
|
|
||||||
|
|
||||||
# We now insert into the recommendations
|
# We now insert into the recommendations
|
||||||
for property_id in recommendations.keys():
|
for property_id in recommendations.keys():
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue