From f9833a3b56c54b8e50f90a81e2d0b83e48d8d6b0 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Mon, 3 Feb 2025 08:59:09 +0700 Subject: [PATCH] add budget constraint calculation API --- src/api.py | 10 ++++----- src/calculation_budget_constrains/service.py | 1 - src/calculation_time_constrains/service.py | 22 +++++--------------- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/api.py b/src/api.py index 0056736..93f75a8 100644 --- a/src/api.py +++ b/src/api.py @@ -15,7 +15,7 @@ from src.auth.service import JWTBearer # # from src.overhaul_schedule.router import router as ovehaul_schedule_router # from src.scope_equipment_part.router import router as scope_equipment_part_router # from src.calculation_target_reliability.router import router as calculation_target_reliability -# from src.calculation_budget_constrains.router import router as calculation_budget_constraint +# # from src.master_activity.router import router as activity_router @@ -27,7 +27,7 @@ from src.calculation_target_reliability.router import router as calculation_targ from src.scope_equipment_job.router import router as scope_equipment_job_router from src.job.router import router as job_router from src.calculation_time_constrains.router import router as calculation_time_constrains_router - +from src.calculation_budget_constrains.router import router as calculation_budget_constraint class ErrorMessage(BaseModel): @@ -113,9 +113,9 @@ calculation_router.include_router( ) # # Budget Constrain -# calculation_router.include_router( -# calculation_budget_constraint, prefix="/budget-constraint", tags=["calculation", "budget_constraint"] -# ) +calculation_router.include_router( + calculation_budget_constraint, prefix="/budget-constraint", tags=["calculation", "budget_constraint"] +) authenticated_api_router.include_router( calculation_router diff --git a/src/calculation_budget_constrains/service.py b/src/calculation_budget_constrains/service.py index fd3698d..495acee 100644 --- a/src/calculation_budget_constrains/service.py +++ b/src/calculation_budget_constrains/service.py @@ -6,7 +6,6 @@ from typing import Optional from src.database.core import DbSession from src.auth.service import CurrentUser -from src.overhaul_schedule.service import get_all as get_all_schedules from src.scope_equipment.model import ScopeEquipment from src.scope_equipment.service import get_by_scope_name diff --git a/src/calculation_time_constrains/service.py b/src/calculation_time_constrains/service.py index 82456e9..8844ac7 100644 --- a/src/calculation_time_constrains/service.py +++ b/src/calculation_time_constrains/service.py @@ -17,27 +17,15 @@ from src.overhaul_scope.service import get as get_scope from .schema import CalculationResultsRead -def get_overhaul_cost_by_time_chart(overhaul_cost: float, days: int) -> np.ndarray: - """ - Calculate decreasing overhaul costs over time using exponential decay. - - Args: - overhaul_cost (float): Initial overhaul cost - days (int): Number of days to calculate cost for - - Returns: - np.ndarray: Array of daily costs with exponential decay - - Raises: - ValueError: If overhaul_cost is negative or days is not positive - """ +def get_overhaul_cost_by_time_chart(overhaul_cost: float, days: int, decay_base: float = 1.1) -> np.ndarray: if overhaul_cost < 0: raise ValueError("Overhaul cost cannot be negative") if days <= 0: raise ValueError("Days must be positive") exponents = np.arange(0, days) - results = overhaul_cost / (2 ** exponents) + # Using a slower decay base to spread the budget depletion over more days + results = overhaul_cost / (decay_base ** exponents) results = np.where(np.isfinite(results), results, 0) return results @@ -45,9 +33,9 @@ def get_corrective_cost_time_chart(material_cost: float, service_cost: float, da day_points = np.arange(0, days) # Parameters for failure rate - base_rate = 5.4 # Base failure rate per day + base_rate = 1.2 # Base failure rate per day acceleration = 11.2 # How quickly failure rate increases - grace_period = 15 # Days before failures start increasing significantly + grace_period = 90 # 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))