File size: 1,227 Bytes
e3e3da2
 
0dd5d30
e3e3da2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
36
37
38
39
from abc import ABC, abstractmethod
from typing import List
from netzero_nav.models import Action

class BaseGrader(ABC):
    @abstractmethod
    def score(self, final_state: dict) -> float:
        ...

class EasyGrader(BaseGrader):
    """Fulfill orders with minimal carbon footprint."""
    def score(self, final_state: dict) -> float:
        carbon = final_state.get("carbon_total", 0.0)
        quota = final_state.get("carbon_quota", 1000.0)
        orders_remaining = len(final_state.get("pending_orders", []))
        perf = max(0.01, min(0.99, 1.0 - (carbon / quota)))
        if orders_remaining > 0:
            perf *= 0.5
        return max(0.01, min(0.99, perf))

class MediumGrader(BaseGrader):
    def score(self, final_state: dict) -> float:
        return EasyGrader().score(final_state)

class HardGrader(BaseGrader):
    def score(self, final_state: dict) -> float:
        return EasyGrader().score(final_state)

class TaskConfig:
    def __init__(self, name: str, grader: BaseGrader):
        self.name = name
        self.grader = grader

TASK_REGISTRY = {
    "easy": TaskConfig("easy", EasyGrader()),
    "medium": TaskConfig("medium", MediumGrader()),
    "hard": TaskConfig("hard", HardGrader()),
}