#!/usr/bin/env python3
"""Misura il solo quarto asse: pochi mezzi, molte fermate ciascuno.

I tre assi gia' misurati delimitano il motore ma nessuno ha la forma di un giro
di distribuzione reale: 88 clienti su 10 mezzi fanno nove fermate a mezzo, 96 su
90 poco piu' di una. Un furgone vero ne fa venti, trenta, quaranta.

Qui i mezzi generici restano TRE — cinque contando i due del nucleo con tutte e
34 le famiglie — e crescono solo i clienti: 24, 72, 120, 168, 216, 264, con passo
finale di 24. E' la misura che risponde a "con tre furgoni e centoventi consegne
al giorno, ce la fa?".

Riusa senza modificarli il programma della campagna e il caso di prova, quindi
metodo, tetto di 300 secondi, semi e regola dei quattro su quattro sono gli
stessi degli altri assi. Scrive in un file suo: non tocca i risultati esistenti.

Puo' durare due o tre ore. La macchina non deve fare altro nel frattempo.
"""
from pathlib import Path
import universal_vrp_all34_max_stress as campagna

ASSE = "all34_real_round_3v"

def main():
    campagna.RESULTS = Path(__file__).resolve().parent / "quarto-asse-risultati.json"
    dati = campagna.load()
    dati["completed"] = False
    campagna.save(dati)
    config = campagna.AXES[ASSE]
    print(f"Asse: {ASSE} — {config['fixedVehicles']} mezzi generici, clienti da "
          f"{config['coarse'][0]} a {config['coarse'][-1]}, passo {config['resolution']}.")
    print(f"Tetto {int(campagna.TIMEOUT_S)} s per esecuzione, semi {campagna.SEEDS}, "
          f"{campagna.ITERATION_LIMIT} iterazioni.\n", flush=True)
    esito = campagna.explore_axis(ASSE, config, dati)
    dati["completed"] = True
    campagna.save(dati)
    print("\n--- ESITO ---")
    for chiave, valore in esito.items():
        print(f"  {chiave}: {valore}")
    print(f"\nscritto: {campagna.RESULTS.name}")

if __name__ == "__main__":
    main()
