add budget constraint calculation API

main
Cizz22 11 months ago
parent b00c72bd7f
commit f9833a3b56

@ -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

@ -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

@ -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))

Loading…
Cancel
Save