From 5b57ff58e6d1aa4c002b7d96bb99582ba78abbaa Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Mon, 3 Feb 2025 11:03:08 +0700 Subject: [PATCH] fix minor bug --- src/calculation_time_constrains/service.py | 58 +++++++++++----------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/calculation_time_constrains/service.py b/src/calculation_time_constrains/service.py index 0e4e69a..04985ec 100644 --- a/src/calculation_time_constrains/service.py +++ b/src/calculation_time_constrains/service.py @@ -47,27 +47,7 @@ def get_overhaul_cost_by_time_chart(overhaul_cost: float, days: int,numEquipment # results = np.where(np.isfinite(results), results, 0) # return results -# def get_corrective_cost_time_chart(material_cost: float, service_cost: float, days: int) -> Tuple[np.ndarray, np.ndarray]: -# day_points = np.arange(0, days) - -# # Parameters for failure rate -# base_rate = 0.2 # Base failure rate per day -# acceleration = 2.4 # How quickly failure rate increases -# grace_period = 170 # Days before failures start increasing significantly - -# # Calculate daily failure rate using sigmoid function -# daily_failure_rate = base_rate / (1 + np.exp(-acceleration * (day_points - grace_period)/days)) - -# # Calculate cumulative failures -# failure_counts = np.cumsum(daily_failure_rate) - -# # Calculate corrective costs based on cumulative failures and combined costs -# cost_per_failure = material_cost + service_cost -# corrective_costs = failure_counts * cost_per_failure - -# return corrective_costs, daily_failure_rate - -def get_corrective_cost_time_chart(material_cost: float, service_cost: float, days: int, numEquipments: int) -> Tuple[np.ndarray, np.ndarray]: +def get_corrective_cost_time_chart(material_cost: float, service_cost: float, days: int) -> Tuple[np.ndarray, np.ndarray]: day_points = np.arange(0, days) # Parameters for failure rate @@ -78,11 +58,9 @@ def get_corrective_cost_time_chart(material_cost: float, service_cost: float, da # Calculate daily failure rate using sigmoid function daily_failure_rate = base_rate / (1 + np.exp(-acceleration * (day_points - grace_period)/days)) - # Introduce randomness in the failure rate - random_noise = np.random.normal(0.0, 0.05, (numEquipments, days)) # Mean 0.0, Std Dev 0.05 - daily_failure_rate = daily_failure_rate + random_noise - daily_failure_rate = np.clip(daily_failure_rate, 0, None) # Ensure failure rate is non-negative - + noise = np.random.normal(0.0, 0.05, days) # Mean 0.0, Std Dev 0.05 + daily_failure_rate += noise + # Calculate cumulative failures failure_counts = np.cumsum(daily_failure_rate) @@ -92,6 +70,31 @@ def get_corrective_cost_time_chart(material_cost: float, service_cost: float, da return corrective_costs, daily_failure_rate +# def get_corrective_cost_time_chart(material_cost: float, service_cost: float, days: int, numEquipments: int) -> Tuple[np.ndarray, np.ndarray]: +# day_points = np.arange(0, days) + +# # Parameters for failure rate +# base_rate = 0.2 # Base failure rate per day +# acceleration = 2.4 # How quickly failure rate increases +# grace_period = 170 # Days before failures start increasing significantly + +# # Calculate daily failure rate using sigmoid function +# daily_failure_rate = base_rate / (1 + np.exp(-acceleration * (day_points - grace_period)/days)) + +# # Introduce randomness in the failure rate +# random_noise = np.random.normal(0.0, 0.05, (numEquipments, days)) # Mean 0.0, Std Dev 0.05 +# daily_failure_rate = daily_failure_rate + random_noise +# daily_failure_rate = np.clip(daily_failure_rate, 0, None) # Ensure failure rate is non-negative + +# # Calculate cumulative failures +# failure_counts = np.cumsum(daily_failure_rate) + +# # Calculate corrective costs based on cumulative failures and combined costs +# cost_per_failure = material_cost + service_cost +# corrective_costs = failure_counts * cost_per_failure + +# return corrective_costs, daily_failure_rate + async def create_param_and_data(*, db_session: DbSession, calculation_param_in: CalculationTimeConstrainsParametersCreate, created_by: str, parameter_id: Optional[UUID] = None): """Creates a new document.""" @@ -257,8 +260,7 @@ async def create_calculation_result_service( corrective_costs, daily_failures = get_corrective_cost_time_chart( material_cost=eq.material_cost, service_cost=eq.service_cost, - days=days, - numEquipments=len(equipments) + days=days ) overhaul_cost_points = get_overhaul_cost_by_time_chart(