|
|
|
@ -289,6 +289,7 @@ async def identify_worst_eaf_contributors(
|
|
|
|
possible_eaf_plant = min(possible_eaf_plant, max_eaf_possible)
|
|
|
|
possible_eaf_plant = min(possible_eaf_plant, max_eaf_possible)
|
|
|
|
|
|
|
|
|
|
|
|
selected_eq.sort(key=lambda x: x.birbaum, reverse=True)
|
|
|
|
selected_eq.sort(key=lambda x: x.birbaum, reverse=True)
|
|
|
|
|
|
|
|
required_cut_hours = 0
|
|
|
|
|
|
|
|
|
|
|
|
# --- 2. Optimization feasible but cannot reach target (underperformance case) ---
|
|
|
|
# --- 2. Optimization feasible but cannot reach target (underperformance case) ---
|
|
|
|
if possible_eaf_plant < target_eaf:
|
|
|
|
if possible_eaf_plant < target_eaf:
|
|
|
|
@ -332,7 +333,8 @@ async def identify_worst_eaf_contributors(
|
|
|
|
possible_plant_eaf=possible_eaf_plant,
|
|
|
|
possible_plant_eaf=possible_eaf_plant,
|
|
|
|
eaf_gap=eaf_gap,
|
|
|
|
eaf_gap=eaf_gap,
|
|
|
|
warning_message=warning_message, # numeric
|
|
|
|
warning_message=warning_message, # numeric
|
|
|
|
eaf_improvement_text=improvement_text, # human-readable text
|
|
|
|
eaf_improvement_text=improvement_text,
|
|
|
|
|
|
|
|
recommended_reduced_outage=required_cut_hours,
|
|
|
|
asset_contributions=[
|
|
|
|
asset_contributions=[
|
|
|
|
{
|
|
|
|
{
|
|
|
|
"node": asset.node,
|
|
|
|
"node": asset.node,
|
|
|
|
|