CoolFace
Apppublic

Yalpha/AGRITECH-META

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
medium.py65 linesDownload Raw Back to tasks
1"""2MEDIUM TASK: 3-step soil + yield balance.3Score in [0.0, 1.0]. Deterministic. No randomness.4"""5import sys, os6sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))7from env import AgriEnv8from models import Action9 10 11def run_medium_task(actions, scenario="default"):12    if len(actions) != 3:13        raise ValueError("Medium task requires exactly 3 actions.")14    env = AgriEnv(scenario=scenario)15    obs0 = env.reset()16 17    soil_trace  = [obs0.soil_quality]18    yield_accum = 0.019    penalties   = []20 21    for action in actions:22        obs, reward, done, info = env.step(action)23        soil_trace.append(info["soil_health"])24        yield_accum += info["yield_score"]25        penalties.append(sum(info["penalties"].values()))26        if done:27            break28 29    return _score_medium(soil_trace, yield_accum, penalties)30 31 32def _score_medium(soil_trace, yield_accum, penalties):33    steps = len(soil_trace) - 134    if steps == 0:35        return 0.036    trend = sum(37        1.0 if soil_trace[i] >= soil_trace[i-1]38        else 0.5 if soil_trace[i] >= soil_trace[i-1] - 0.0439        else 0.040        for i in range(1, len(soil_trace))41    ) / steps42    avg_yield   = min(1.0, yield_accum / steps)43    avg_penalty = sum(penalties) / len(penalties) if penalties else 0.044    score = 0.40 * trend + 0.45 * avg_yield - 0.15 * avg_penalty45    return round(max(0.0, min(1.0, score)), 4)46 47 48def grade_medium():49    """Self-contained grader — callable with no args by the OpenEnv validator."""50    actions = [51        Action(crop="wheat", fertilizer=0.3, irrigation=0.5),52        Action(crop="rice",  fertilizer=0.4, irrigation=0.6),53        Action(crop="wheat", fertilizer=0.2, irrigation=0.4),54    ]55    return run_medium_task(actions, scenario="default")56 57 58if __name__ == "__main__":59    actions = [60        Action(crop="wheat", fertilizer=0.3, irrigation=0.5),61        Action(crop="rice",  fertilizer=0.4, irrigation=0.6),62        Action(crop="wheat", fertilizer=0.2, irrigation=0.4),63    ]64    print(f"Medium score: {run_medium_task(actions)}")65