|
|
|
@ -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)
|
|
|
|
# results = np.where(np.isfinite(results), results, 0)
|
|
|
|
# return results
|
|
|
|
# return results
|
|
|
|
|
|
|
|
|
|
|
|
# def get_corrective_cost_time_chart(material_cost: float, service_cost: float, days: 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
|
|
|
|
|
|
|
|
# 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]:
|
|
|
|
|
|
|
|
day_points = np.arange(0, days)
|
|
|
|
day_points = np.arange(0, days)
|
|
|
|
|
|
|
|
|
|
|
|
# Parameters for failure rate
|
|
|
|
# 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
|
|
|
|
# Calculate daily failure rate using sigmoid function
|
|
|
|
daily_failure_rate = base_rate / (1 + np.exp(-acceleration * (day_points - grace_period)/days))
|
|
|
|
daily_failure_rate = base_rate / (1 + np.exp(-acceleration * (day_points - grace_period)/days))
|
|
|
|
|
|
|
|
|
|
|
|
# Introduce randomness in the failure rate
|
|
|
|
noise = np.random.normal(0.0, 0.05, days) # Mean 0.0, Std Dev 0.05
|
|
|
|
random_noise = np.random.normal(0.0, 0.05, (numEquipments, days)) # Mean 0.0, Std Dev 0.05
|
|
|
|
daily_failure_rate += noise
|
|
|
|
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
|
|
|
|
# Calculate cumulative failures
|
|
|
|
failure_counts = np.cumsum(daily_failure_rate)
|
|
|
|
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
|
|
|
|
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):
|
|
|
|
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."""
|
|
|
|
"""Creates a new document."""
|
|
|
|
@ -257,8 +260,7 @@ async def create_calculation_result_service(
|
|
|
|
corrective_costs, daily_failures = get_corrective_cost_time_chart(
|
|
|
|
corrective_costs, daily_failures = get_corrective_cost_time_chart(
|
|
|
|
material_cost=eq.material_cost,
|
|
|
|
material_cost=eq.material_cost,
|
|
|
|
service_cost=eq.service_cost,
|
|
|
|
service_cost=eq.service_cost,
|
|
|
|
days=days,
|
|
|
|
days=days
|
|
|
|
numEquipments=len(equipments)
|
|
|
|
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
overhaul_cost_points = get_overhaul_cost_by_time_chart(
|
|
|
|
overhaul_cost_points = get_overhaul_cost_by_time_chart(
|
|
|
|
|