File size: 1,113 Bytes
cb330aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""
ECHO future prediction module.
"""

from env.models import Task


def _clamp(value: float, lower: float, upper: float) -> float:
    return max(lower, min(upper, value))


def predict_future(task: Task, current_time: int, max_deadline: float = 20.0) -> dict[str, float]:
    capped_deadline = max(max_deadline, 1.0)
    future_risk = _clamp(task.risk * (1.0 + 0.1 * current_time), 0.0, 1.0)
    deadline_pressure = 1.0 - (_clamp(task.deadline, 0.0, capped_deadline) / capped_deadline)
    return {
        "future_risk": round(future_risk, 4),
        "deadline_pressure": round(_clamp(deadline_pressure, 0.0, 1.0), 4),
    }


class ECHO:
    """
    Environment change oracle for future risk and deadline pressure.
    """

    def __init__(self, max_deadline: float = 20.0):
        self.max_deadline = max_deadline

    def predict(self, task: Task, current_time: int) -> Task:
        values = predict_future(task, current_time=current_time, max_deadline=self.max_deadline)
        task.future_risk = values["future_risk"]
        task.deadline_pressure = values["deadline_pressure"]
        return task