feature/reliability_stat
Cizz22 4 months ago
parent e805ba42ed
commit 2fbc636d38

@ -45,10 +45,9 @@ async def get_all_budget_constrains(
eq_results = calc_result if isinstance(calc_result, list) else [calc_result]
equipments_eaf_contribution = calculate_asset_eaf_contributions(
plant_result=plant_result,
eq_results=eq_results,
)
plant_result=plant_result,
eq_results=eq_results,
)
# Create result array of dictionaries
result = [
@ -62,8 +61,20 @@ async def get_all_budget_constrains(
for equipment in equipments
]
# Sort by EAF contribution (highest to lowest)
result.sort(key=lambda x: x["eaf_contribution"], reverse=True)
# Calculate composite priority score for fair sorting
max_cost = max(eq["total_cost"] for eq in result) if result else 1
for equipment in result:
# Normalize cost (0-1) - higher cost = higher priority
normalized_cost = equipment["total_cost"] / max_cost if max_cost > 0 else 0
# Composite score: 70% EAF contribution + 30% cost impact
# EAF contribution is already relative, so use directly
equipment["priority_score"] = (0.7 * equipment["eaf_contribution"]) + (0.3 * normalized_cost)
# Sort by composite priority score (highest to lowest)
result.sort(key=lambda x: x["priority_score"], reverse=True)
# Filter equipment up to threshold
cumulative_cost = 0
@ -95,7 +106,7 @@ def calculate_asset_eaf_contributions(plant_result, eq_results):
for asset in eq_results:
results[asset['aeros_node']['node_name']] = asset['contribution'] * 100.0
results[asset['aeros_node']['node_name']] = asset['contribution']
# Sort by contribution (worst contributors first)
# results = sorted(results.items(), key=lambda x: x[1], reverse=True)

@ -104,7 +104,7 @@ async def get_simulation_results(*, simulation_id: str, token: str):
# return results
def calculate_asset_eaf_contributions(plant_result, eq_results):
def calculate_asset_eaf_contributions(plant_result, eq_results, standard_scope):
"""
Calculate each asset's negative contribution to plant EAF
Higher contribution = more impact on reducing plant EAF
@ -117,6 +117,9 @@ def calculate_asset_eaf_contributions(plant_result, eq_results):
for asset in eq_results:
# # Weight based on production capacity (just for seri)
# capacity_weight = asset.get('total_downtime', 0) / plant_production if plant_production > 0 else 0
if asset.get('aeros_node').get('node_name') not in standard_scope:
continue
# # Get asset EAF and downtime
plant_eaf_minus = 100 - plant_eaf
@ -137,7 +140,6 @@ def calculate_asset_eaf_contributions(plant_result, eq_results):
)
results.append(contribution)
# Sort by contribution (worst contributors first)
results.sort(key=lambda x: x.contribution, reverse=True)
return results
@ -170,14 +172,14 @@ async def identify_worst_eaf_contributors(*, simulation_result, target_eaf: floa
# Get equipment results from calc_result
eq_results = calc_result if isinstance(calc_result, list) else [calc_result]
asset_contributions = calculate_asset_eaf_contributions(plant_result, eq_results)
current_plant_eaf = plant_result.get("eaf", 0)
eaf_gap = target_eaf - current_plant_eaf
# Verify our calculation by summing contributions
total_calculated_downtime = sum(contrib.eaf_impact for contrib in asset_contributions)
calculated_plant_eaf = 100 - total_calculated_downtime
# # Verify our calculation by summing contributions
# total_calculated_downtime = sum(contrib.eaf_impact for contrib in asset_contributions)
# calculated_plant_eaf = 100 - total_calculated_downtime
standard_scope = await get_standard_scope_by_session_id(
db_session=db_session,
@ -187,6 +189,8 @@ async def identify_worst_eaf_contributors(*, simulation_result, target_eaf: floa
standard_scope_location_tags = [tag.location_tag for tag in standard_scope]
asset_contributions = calculate_asset_eaf_contributions(plant_result, eq_results, standard_scope_location_tags)
project_eaf_improvement = 0.0
selected_eq = []

Loading…
Cancel
Save