T U R N I
Ottimizzazione dei Turni del Personale
di Aziende di Trasporto
Estratto dal Manuale d’Uso del Software
CONCETTI GENERALI
Nel seguito verranno descritti i file di input/output necessari per definire il problema da risolvere, la cui comprensione approfondita richiede che il lettore conosca le problematiche di base della formazione turni e la relativa terminologia (tempo di nastro, lavoro, ecc.). I principali termini utilizzati sono i seguenti.
Per fermata (o punto di cambio) si intende una località in cui può avvenire il cambio di autista, tipicamente un capolinea per le applicazioni nel trasporto su gomma o una stazione per le applicazioni ferroviarie. È compito dell’utente definire quali sono le località che permettono il cambio di autista, scegliendole in base alla realtà ed alla consuetudine aziendale.
Per corsa si intende un segmento lavorativo indivisibile da coprire con un autista, ed è caratterizzato da un istante ed una fermata di partenza e di arrivo. Per definizione il cambio di autista non può dunque avvenire in un punto intermedio di una corsa, ma solo (eventualmente) prima del suo inizio o dopo la sua fine. Nel caso in cui si ritenga utile prevedere la possibilità di cambi "in corsa" sarà necessario spezzare il segmento lavorativo in due o più corse consecutive.
Per turno (di servizio) si intende una sequenza di corse coperte una dopo l’altra da uno stesso autista. Il turno deve soddisfare numerosi vincoli normativi e aziendali. Come regola generale, un turno deve iniziare e terminare in una stessa fermata detta convenzionalmente deposito (che a volte, ma non sempre, coincide con il "deposito aziendale", inteso come luogo di ricovero degli autobus). Inoltre, ogni corsa deve terminare nella stessa fermata da cui parte la corsa successiva nel turno, ed il tempo che intercorre fra l’arrivo e la partenza deve essere sufficiente a permettere una connessione affidabile (tempo di cuscinetto). In alcuni casi il turno dovrà dunque contenere opportune corse a vuoto (o trasferimenti come passeggero) necessarie per il trasferimento dell’autista fra due fermate.
Ogni fase di lavoro inizia e termina con i cosiddetti tempi di PRE e di POST, che rappresentano tempi di lavoro riconosciuti all’autista in modo forfetario per le operazioni che precedono/seguono la guida. Due fasi di lavoro consecutive sono separate da una sosta, la cui durata minima (al netto dei tempi di PRE/POST) è specificata dalla normativa nazionale e/o aziendale (tipicamente, 31 minuti). Si noti che il tempo di attesa fra le prime due corse in figura (e quello fra le ultime due corse) non è sufficiente a produrre una sosta e quindi viene riconosciuto all’autista come tempo di lavoro.
Il tempo di lavoro associato ad un turno viene calcolato sommando la durata delle singole fasi di lavoro, più eventuali tempi forfetari aggiuntivi. Il tempo di nastro associato ad un turno rappresenta invece il tempo di disponibilità dell’autista dall’inizio alla fine del servizio. Sia il tempo di lavoro che di nastro sono soggetti a limiti massimi stabiliti dalla normativa nazionale/locale e dalle consuetudini aziendali.
L’ammissibilità di un turno prevede inoltre la presenza di opportune soste per consumare il pasto, la possibilità di effettuare eventuali cambi di autobus, l’interruzione dell’attività di guida continuativa dopo certi limiti, ecc.
Per soluzione si intende un insieme di turni ammissibili che copra le corse assegnate. In alcuni casi è permesso che una singola corsa venga coperta da due o più turni, nel qual caso gli autisti eccedenti si intendono trasportati come passeggeri. Inoltre, può essere consentito che i turni in soluzione contengano corse a vuoto generate automaticamente in base alle distanze specificate fra le fermate.
L’ammissibilità della soluzione complessiva richiede che vengano rispettati opportuni limiti massimi per le medie dei tempi di lavoro e di nastro, per la percentuale di turni con nastri di lavoro particolarmente lunghi o comunque disagiati, ecc. Inoltre si dovrà tener conto del fatto che ciascun turno afferisce ad un certo gruppo di residenza per gli autisti, per ciascuno dei quali vengono specificati limiti specifici per quanto riguarda il numero di turni del gruppo, la massima media del tempo di lavoro nel gruppo, ecc.
INSTALLAZIONE E CONFIGURAZIONE
Il programma TI (Turni Interface) permette di creare e/o modificare in ambiente Windows 95/98 ed NT tutti i file di input richiesti dal software TURNI. In particolare sono gestiti i file relativi a: Corse, Gruppi, Controlli, Parametri, Forzature, Linee e Fermate, descritti più dettagliatamente nel seguito.
L’interfaccia TI è inoltre in grado di visualizzare e stampare i risultati delle ottimizzazioni sia in modo testo che in forma grafica mediante diagrammi temporali "di Gantt" e mediante diagrammi spazio-temporali "per linea", con vari livelli di dettaglio.
L’unica operazione di configurazione necessaria per il corretto funzionamento del programma TI consiste nell’indicare la posizione del file eseguibile dell’ottimizzatore attraverso il menu "Opzioni® Percorso dell’ottimizzatore…".
Questo file solitamente si chiama TURNI.EXE e si trova nella stessa directory in cui viene installata l’interfaccia, tipicamente C:\Turni\Bin. Mediante lo stesso menù di Opzioni è inoltre necessario impostare il nome del file delle FERMATE e del file che contiene le DISTANZE A VUOTO (se richiesto).
Dopo l’installazione sarà necessario creare la maschera di OTTIMIZZAZIONE relativa alla nuova simulazione che si vuole effettuare, utilizzando il menù "File® Nuovo® Ottimizzazione" (oppure il primo pulsante in alto a sinistra, subito sotto il menù "File").
Al fine di evitare confusioni fra i dati, si consiglia di utilizzare la seguente organizzazione in directory dei dati di input/output:
Durante il caricamento, l’interfaccia TI visualizza una finestra con informazioni sulla versione del programma e sullo stato del caricamento stesso.
Viene quindi presentata una finestra principale che comprende un menu, una barra di pulsanti (parte alta) e una riga di stato per eventuali avvisi e/o errori (parte bassa). È possibile aprire uno o più documenti, anche contemporaneamente, ciascuno in una finestra separata ed indipendente. L’aspetto (vista) con cui viene presentato un documento dipende dal suo tipo. Nel caso di nuovi documenti, il tipo viene specificato dall’utente, altrimenti viene dedotto dall’estensione del file corrispondente. Quando si salva un documento, al nome base per il file digitato dall’utente viene aggiunta automaticamente l’estensione corrispondente.
I tipi supportati sono elencati nella tabella seguente:
Tipo |
Estensione file |
Vista |
Ottimizzazione |
.OTM |
Maschera |
Corse |
.COR/.CRS/.RIF |
Tabella/Maschera |
Gruppi |
.GRU |
Maschera |
Controlli |
.CON |
Maschera |
Parametri |
.PAR |
Maschera |
Parametri Aziendali |
.PAZ |
Applicazione Notepad |
Forzature |
.FOR |
Tabella |
Linee |
.LIN |
Tabella |
Fermate |
.FER |
Tabella |
Soluzione |
.SOL |
Maschera/Grafici |
Output log |
.LOG |
Applicazione Write |
La vista di un documento può essere di tipo Tabella o Maschera: nel primo caso i dati sono organizzati in una tabella molto simile a quella di Access e/o Excel di Microsoft; nel secondo caso i dati sono organizzati in una tabella i cui campi sono modificabili dall’utente.
Tutti i tipi (eccezion fatta per i tipi Ottimizzazione, Parametri Aziendali e Output log) derivano direttamente dai file di input richiesti dal software TURNI, il cui significato verrà descritto in modo dettagliato nel seguito.
Il tipo Ottimizzazione permette di gestire l’avvio di una nuova ottimizzazione. Un documento di questo tipo specifica la directory di lavoro per l’ottimizzatore, da quali file caricare i dati di input e il nome da usare per i file con risultati. Dalla maschera di Ottimizzazione è inoltre possibile avviare l’ottimizzatore e richiedere l’apertura e visualizzazione sia dei file di commento sia dei risultati generati dall’ottimizzatore (Log e Soluzione).
I tipi Parametri Aziendali e Output Log non sono direttamente supportati da TI ma vengono aperti ed editati attraverso programmi di editing esterni forniti con Windows, come indicato nella precedente tabella.
Per le viste di tipo Maschera si è cercato di rispettare lo stile delle finestre di dialogo di Windows e quindi per tutte le maschere si avrà:
La vista di tipo Tabella ricalca la struttura delle tabelle in Excel ed è costituita da una griglia con:
I tasti cursore permettono di spostarsi da una cella all’altra. Se ci si porta su di una cella e si inizia a scrivere, il contenuto della cella sarà sostituito da ciò che viene digitato; se si vuole modificare il contenuto senza sovrascriverlo, è necessario digitare preventivamente F2.
Durante la modifica di una cella, il tasto Esc riporta il contenuto della cella al valore che aveva prima della modifica del record, il tasto Enter/Invio conferma il nuovo valore e termina l’editazione, i tasti Su e Giù terminano la modifica del record e spostano al record precedente/successivo.
Nella stessa finestra della tabella possono essere presenti alcuni pulsanti che permettono di inserire record in posizioni diverse dall’ultima riga, cancellare il record corrente e altre funzioni aggiuntive (ricerca codici fermate, visualizzazione a maschera, ecc.).
Il menu File comprende i comandi classici per creare, aprire, salvare e stampare i documenti, e memorizza una lista degli ultimi 10 documenti significativi aperti.
La voce Nuovo presenta una lista con i vari tipi di documenti e permette di creare un nuovo documento, inizialmente vuoto.
Salva memorizza le modifiche apportate ad un documento aggiornando il file da cui era stato inizialmente caricato; Salva con nome… permette invece di specificare il file di destinazione prima di procedere.
La voce Stampa è abilitata solo per i documenti di tipo Soluzione e permette stampe sia di testo (dalla Vista "Testo") che di grafici.
Esci chiude tutti i documenti aperti e termina l’applicazione.
Comprende 4 voci:
Permette di disporre automaticamente tutte le finestre aperte o di attivare e portare in primo piano una finestra in particolare.
La voce Manuale richiama il file di documentazione TI.RTF. La voce Informazioni su Turni riporta invece informazioni sul Copyright e sulla versione di TI in uso.
La barra degli strumenti comprende tre pulsanti che costituiscono una scorciatoia per i seguenti comandi (da sinistra verso destra): "File® Nuovo® Ottimizzazione", "File® Apri" e "File® Salva".
I pulsanti sono visualizzati solo quando i rispettivi comandi sono abilitati.
La maschera di Ottimizzazione rappresenta il punto di partenza di ogni nuova ottimizzazione, e permette di definire i file di input e di output necessari. La maschera è divisa in 3 sezioni.
La prima sezione riguarda l’Output e specifica il Percorso e il Nome base utilizzati dall’ottimizzatore per i file generati (soluzioni e log). Il Nome base è limitato ad una lunghezza massima di 6 caratteri per compatibilità con DOS e Windows3.11 e per consentire l’aggiunta di un numero progressivo al nome.
Il pulsante Crea si attiva automaticamente se il percorso introdotto non esiste e permette di creare la directory corrispondente, copiandovi eventualmente i file di input specificati. Il pulsante MS-DOS apre una finestra MS-DOS nel direttorio di output specificato. Il pulsante ZIP lancia un’utility di compressione descritta più in dettaglio nel seguito) per l’archiviazione dei dati di input specificati nella maschera. Il pulsante UTIL lancia un file batch UTIL.BAT (eventualmente definito dall’utente) presente nella directory dell’ottimizzatore.
La seconda sezione è relativa all’Input, e permette di associare un file (esistente) a ciascuno degli input richiesti dall’ottimizzatore. Per ogni tipo di file è presente un pulsante per la selezione del file ([…] ) e un pulsante per aprire il file selezionato ([Apri]).
I file delle Fermate e delle Distanze sono considerati di tipo globale e possono essere impostati esclusivamente dal menu Opzioni.
Sia per la sezione di Output che per quella di Input, i dati inseriti vengono visualizzati con sfondo dello stesso colore della maschera quando contengono dati non validi (file non presente, file di tipo errato, ecc.) e, in questo caso, nella riga di stato viene visualizzata una descrizione dell’errore.
L’ultima parte della maschera comprende tre pulsanti di comando: quando tutti i dati necessari sono corretti si attiva il pulsante Avvia Ottimizzazione che lancia l’elaborazione; gli altri due pulsanti, Apri Log e Apri Soluzione, permettono di visualizzare i risultati ottenuti.
Come già accennato, nella maschera di ottimizzazione è presente un pulsante ZIP per creare un archivio compresso contenente tutti i file specificati nella maschera. Agendo sul file di configurazione TURNI.DEF è inoltre possibile includere altri file nell’archivio, ed in particolare i file delle distanze, delle fermate e delle soluzioni. Premendo il pulsante ZIP viene mandato in esecuzione un file batch MS-DOS, ZIPL.BAT, presente nella directory che contiene l’ottimizzatore, passandogli come parametri il nome del file compresso e la lista dei file da archiviare
Selezionando un file con estensione .FER dal menù Apri
(oppure creando un nuovo file di Fermate) si attiva la maschera di modifica del file delle Fermate.
I documenti relativi ai Gruppi sono visualizzati con una maschera che comprende due sotto-tabelle: la prima contiene una lista di attributi per ogni gruppo; la seconda riporta l’elenco delle fermate afferenti al gruppo.
Ad ogni fermata afferente ad un gruppo viene associato un flag che indica se la fermata è un Deposito (fermata dal quale possono partire/arrivare i turni del gruppo) oppure se essa deve essere solo considerata "in residenza" per il gruppo. Il valore del flag può essere invertito indifferentemente facendo un doppio click sulla fermata, oppure selezionando con il mouse la casella Deposito.
Un documento di tipo Corse viene normalmente visualizzato in forma di tabella; è comunque possibile richiamare una vista di tipo maschera (dettaglio su un singolo record) premendo il pulsante Scheda.
La vista a maschera comprende anche una sotto-tabella che contiene eventuali campi aggiuntivi specifici per ciascuna Azienda: nella vista a tabella tali campi sono associati ad altrettante colonne.
Per quanto riguarda il campo "Vincoli sui gruppi / Gruppi male assegnati" presente alla fine di ciascuna corsa, la lista dei flag V (Vietato), N (Non male assegnato), ed F (Forzato) deve essere descritta specificando una sequenza di intervalli di gruppi separati da virgole, ciascuno dei quali specifica un insieme di gruppi ed il flag corrispondente (si vede la descrizione del file INPUT.COR per il significato dei flag).
Per esempio, volendo specificare che una corsa risulta "male assegnata" per i gruppi 2, 3, 4 e 7 e non assegnabile ai gruppi 10,11 e 12 sarà sufficiente specificare "2-4, 7, 10-12V" ", interpretato come "la corsa risulta male assegnata per i gruppi 2-4 e per il gruppo 7, e risulta vietata per i gruppi 10-12". Alternativamente, è possibile specificare "2-7, 5-6N, 10-12V" intendendo "la corsa risulta male assegnata per i gruppi 2-7 ma non per i gruppi 5 e 6, e risulta vietata per i gruppi 10-12". I gruppi che non vengono specificati si intendono di tipo N (Non male assegnati). In caso di dati errati, sull’ultima riga della schermata compare un breve messaggio che specifica i valori leciti per i flag (V,F, bianco ed N).
In entrambe le viste, posizionandosi su uno dei due campi Codice Fermata Partenza o Codice Fermata Arrivo, si attiva il pulsante Cerca Fermata che richiama una lista di fermate: selezionandone una viene aggiornato automaticamente sia il campo codice da cui si è richiamata la lista, sia la relativa descrizione.
Documenti Parametri e Controlli
Un documento Parametri (a sinistra nella figura) comprende una sequenza di parametri con la relativa descrizione. Per selezionare un parametro da modificare si possono utilizzare i tasti cursore Su/Giù o Enter/Invio oppure fare click con il mouse direttamente sulla lista.
Si noti che i valori decimali devono essere inseriti utilizzando il punto (e non la virgola) decimale, scrivendo p.e. 10.1 invece di 10,1.
Un documento Controlli (a destra nella figura) prevede un insieme di indicatori (flag) da attivare/disattivare, ed alcuni valori numerici che determinano le condizioni di esecuzione del programma.
Aprendo un file Soluzione viene inizialmente visualizzata una finestra di Testo che mostra le statistiche globali della soluzione elaborata ed eventuali note/messaggi di errore relativi a singoli turni.
Utilizzando il menu Vista (che appare solo quando è attivo un documento Soluzione) si può passare alla vista grafica oppure alla visualizzazione completa, in forma di testo, delle informazioni sulla soluzione.
Il Grafico di Gantt rappresenta le corse assegnate a ciascun gruppo con barre colorate in base al tipo della corse, alternando (se richiesto) colori diversi per gruppi di turni diversi. Posizionando il puntatore del mouse su di una corsa, questa viene evidenziata e nella barra di stato nella parte bassa dello schermo vengono visualizzate alcune informazioni sulla corsa (orari e fermate di partenza e di arrivo, ecc.). Posizionando il puntatore sull’etichetta di un turno (o tenendo premuto il pulsante sinistro del mouse su di una corsa) vengono invece visualizzate alcune informazioni sul turno (tempo di lavoro, nastro, ecc.). È possibile visualizzare i turni di ciascun gruppo secondo la sequenza ottimale legata alla rotazione settimanale preliminare determinata automaticamente dal programma, oppure per istanti di inizio crescenti. È inoltre possibile ridefinire il colore delle corse in base al tipo, agendo sul file di configurazione TURNI.DEF.
È possibile ingrandire o ridurre il grafico mediane i pulsanti [+] e [-] nell’angolo in alto a sinistra, nonché spostare la visualizzazione mediante le barre di scorrimento ed i tasti cursore. Usando il pulsante sulla destra è inoltre possibile "allargare" le barre visualizzate, in modo da evidenziare informazioni relative alle corse quali codice della corsa, turno manuale assegnato, oppure (come in figura) in base alla tipologia Piccolo, Medio, Grande, … di autobus.
Per visualizzare il Grafico a Linee è necessario definire preventivamente la sequenza di fermate che costituirà l’asse spaziale (verticale) del grafico. Ad ogni lista di fermate si può associare una Descrizione e tutte le liste create vengono salvate su file (con lo stesso nome del file Fermate attivo ma con estensione LST) in modo da poter essere riutilizzate in seguito.
Nella finestra di definizione delle liste si trovano pulsanti atti ad aggiungere o togliere fermate dalla lista selezionata (pulsanti [+] e [-]) ed a modificarne l’ordine (pulsanti [ ] e [¯ ]).
Una volta completata la definizione della lista, viene visualizzato il grafico che rappresenta le corse afferenti alle fermate selezionate con linee di colore diverso per turni diversi. Facendo click con il mouse su di una corsa vengono evidenziati sia la corsa stessa che il turno corrispondente, e vengono visualizzate le relative informazioni sulla barra di stato. È inoltre possibile ingrandire, ridurre e spostare l’area visualizzata mediante gli appositi controlli.
I colori con cui vengono rappresentati i vari elementi delle rappresentazioni grafiche (barre/titoli/linee) sono definiti nel file TURNI.DEF presente nella directory contenente il programma TI.EXE, e possono essere modificati da un utente esperto mediante un editor di testi (p.e. Notepad) come descritto all’interno dello stesso file. Si consiglia in ogni caso di effettuare una copia di backup del file originale.
Modalità testo
L’ultima voce del menu vista, File completo, lancia l’applicazione Write (editor di testo) sul file soluzione aperto, che viene quindi visualizzato in modo testo.
Il file prevede una stampa dei singoli turni, divisi per gruppo di residenza e sequenziati in modo da agevolarne la successiva vestizione. Per ciascun turno vengono evidenziate le caratteristiche principali (tempo di lavoro, nastro, ecc.), nonché l’efficienza percentuale del turno calcolata dividendo il tempo di lavoro per la somma delle durate delle corse di copertura richiesta o suggerita. Eventuali trasferimenti tecnici o vuoti generati dal programma vengono riportati come corse contrassegnate dalla dicitura "VUOTO+" (il segno + indica che la corsa non era presente nel file INPUT.COR ma è stata generata in base al tempo di trasferimento ricavato dal file delle DISTANZE). Una riga separa le varie fasi di lavoro: la riga doppia "==========" segnala una sosta in residenza, mentre una riga semplice "----------------" individua una sosta fuori residenza. Prima di ogni corsa viene riportato il tempo di attesa T-ATT rispetto alla corsa precedente; in caso di sosta, invece, viene riportato il tempo di sosta (al netto dei tempi di pre e di post) intercorso prima dell’inizio della corsa.
Per ciascuna delle viste descritte è possibile richiedere la stampa dal menu File; la stampa del file in formato dettagliato (testo) deve essere attivata dalla vista "Testo", dato che la vista "File Completo" passa il controllo all’editor WordPad.
La finestra di stampa permette di impostare la stampante da utilizzare (una qualunque stampante definita in ambiente Windows) e l’orientamento della pagina (portrait o landscape). Per i grafici è possibile inoltre specificare (i) quante ore stampare per ogni pagina; (ii) la richiesta di stampare turni di gruppi diversi su pagine separate; (iii) la richiesta di stampare una pagina aggiuntiva con le statistiche sui turni della soluzione. Per la modalità testo è possibile troncare le righe troppo lunghe (senza spezzarle andando a capo).
I restanti documenti (Linee e Forzature) non presentano particolarità di rilievo.
FUNZIONAMENTO DEL PROGRAMMA TURNI
Il programma TURNI può essere eseguito direttamente, come applicazione MS-DOS, oppure mediante l’interfaccia grafica TI descritta nella sezione successiva attivando il pulsante "Avvia Ottimizzazione" della maschera di ottimizzazione.
Per eseguire direttamente TURNI direttamente da ambiente (o finestra) MS-DOS è invece sufficiente eseguire il comando
C:\Turni\Bin> TURNI
nella directory di lavoro (quella che contiene il programma).
L’elaborazione effettuata dal programma TURNI è articolata in Passate, in ciascuna delle quali si tenta di migliorare la soluzione correntemente disponibile.
Tipicamente le soluzioni ottimali vengono determinate durante le primissime passate, ma in alcuni casi particolarmente difficili anche le passate successive possono individuare soluzioni via via migliori.
Durante ciascuna passata si alternano ciclicamente due distinte fasi di elaborazione: la fase di generazione dei turni (in cui viene generato un insieme di turni "candidati") e la fase di selezione (in cui vengono selezionati i turni che definiscono la soluzione). Se richiesto, durante la fase di generazione dei turni vengono anche generate opportune corse a vuoto. Entrambe le fasi utilizzano internamente algoritmi di ottimizzazione (proprietari) particolarmente efficienti, basati su opportuni modelli matematici che permettono di quantificare in modo molto preciso l’utilità di possibili nuovi turni in base alle caratteristiche della soluzione corrente. Tipicamente, durante la fase di generazione vengono implicitamente valutati milioni di turni possibili, e durante la fase di selezione vengono considerate e valutate decine di migliaia di soluzioni alternative.
Durante una stessa passata, le due fasi di generazione e selezione vengono applicate per un certo numero di iterazioni, aggiornando di volta in volta la miglior soluzione individuata dal programma. Viene quindi attivata una opportuna procedura di fissaggio che sceglie alcuni turni ritenuti particolarmente "efficienti" e decide di fissarli come facenti parte della soluzione definitiva. Il procedimento viene quindi ripetuto sulle corse non coperte dai turni fissati: si alternano nuovamente le fasi di generazione e di selezione, si fissano nuovi turni, ecc.
In questo modo si individuano tipicamente soluzioni sempre migliori, fino ad arrivare ad un punto in cui la soluzione corrente non risulta ulteriormente migliorabile. In questa situazione il programma termina la Passata corrente, e procede con la Passata successiva: il contatore delle Passate viene incrementato di 1, vengono "liberati" i turni fissati, ed il programma viene riapplicato sulle corse scoperte.
La successione di Passate continua finché non viene raggiunto il tempo di esecuzione massimo specificato dall’utente.
L’utente può interrompere in qualsiasi momento l’esecuzione del programma (mediante la combinazione di tasti Ctrl-C, oppure con il controllo [X] in alto a destra della maschera MS-DOS) se ritiene soddisfacente la soluzione corrente. In ogni caso, è sconsigliabile interrompere il programma prima che sia terminata la Passata n. 1, cioè prima che il contatore delle Passate che compare sul video non abbia raggiunto il valore 2.
Questo schema di elaborazione ha il vantaggio di individuare rapidamente soluzioni molto buone del problema (tipicamente già dopo i primi fissaggi le soluzioni sono paragonabili a quelle manuali), e di migliorarle man mano che l’elaborazione procede.
La migliore soluzione individuata è in ogni caso disponibile nel file di output TURNI.SOL, ove TURNI rappresenta il nome base per le soluzioni specificato dall’utente. Il programma memorizza inoltre le migliori K soluzioni individuate, scrivendole nei file di output TURNI-*.SOL (il numero K di soluzioni da memorizzare è definibile da parte dell’utente).
Viene inoltre riportata nel file TURNI-X.SOL la soluzione, fra quelle costruite dal programma, che utilizza il minimo numero di turni (anche in presenza di vincoli violati). L’analisi di questa soluzione, che viola tipicamente alcuni dei vincoli del problema, può risultare utile per avere un’indicazione di quali siano i vincoli più stringenti del problema allo studio.
Per esempio, se K=3 ed il nome base per le soluzioni è Prova, il programma memorizzerà le 3 migliori soluzioni individuate nei file di output Prova-1.sol, Prova-2.sol e Prova-3.sol. Inoltre, se la miglior soluzione utilizza p.e. 59 turni, il programma memorizzerà nei file Prova-59.sol, Prova-60.sol e Prova-61.sol le migliori soluzioni con 59, 60 e 61 turni, rispettivamente. Eventuali soluzioni (anche se non ammissibili) con meno di 59 turni sarebbero memorizzate nei file Prova-58.sol, Prova-57.sol ecc. Infine, la soluzione con il numero minimo di turni (anche se non ammissibile) verrà memorizzata in Prova-X.sol.
In alcune versioni personalizzate del programma, le soluzioni vengono memorizzate anche nei file TURNI.OUT, e TURNI-*.OUT secondo il formato personalizzato richiesto dall’Azienda.
Inoltre, il programma memorizza internamente un numero molto elevato di turni (circa 150.000, scelti fra quelli più efficienti) e di corse a vuoto (fino ad alcune migliaia). Questi turni/vuoti possono essere memorizzati ed utilizzati, insieme alla miglior soluzione ottenuta, come base di partenza per una successiva elaborazione.
Valutazione di una soluzione manuale
Il programma TURNI è inoltre in grado di valutare la bontà e l’ammissibilità di una eventuale soluzione "manuale" fornita in input. Il programma valuta automaticamente la soluzione "manuale", evidenziando nel file TURNI-E.SOL eventuali errori (o turni incongruenti in quanto non associabili ai depositi) e stampando nel file TURNI-V.SOL e TURNI-M.SOL i turni letti e le relative competenze. Il file TURNI-V.SOL riporta esattamente i turni manuali forniti, mentre nel file TURNI-M.SOL vengono eliminati eventuali spezzoni di turno inutili e la sequenza dei turni stessi viene ridefinita calcolandone una rotazione settimanale indicativa. Dopo aver valutato la soluzione manuale, il programma memorizza internamente i turni manuali che risultino ammissibili in base ai parametri specificati, ed avvia il modulo di ottimizzazione nel tentativo di individuare nuovi turni che migliorino la soluzione manuale.
È altresì possibile memorizzare in un file con estensione .CRS ogni soluzione individuata dal programma e salvata in un file con estensione .SOL. I file con estensione .CRS hanno il medesimo formato dei file di input delle corse, ma contengono le corse nella sequenza corrispondente ai turni in soluzione. In questo modo è possibile iniziare una nuova elaborazione partendo dalla soluzione memorizzata in un qualunque file .CRS, semplicemente definendola come "soluzione manuale" di partenza.
Scheda riassuntiva (finestra MS-DOS)
Durante l’elaborazione compare sul video una finestra MS-DOS con una "scheda riassuntiva" relativa alla miglior soluzione individuata.
È importante verificare che la finestra MS-DOS (quella a sfondo nero rappresentata in figura) da cui viene eseguito il programma TURNI non ne sospenda l’esecuzione quando la finestra stessa non è in primo piano. A tal fine è sufficiente controllare che il secondo pulsante da destra evidenziato sulla parte alta della finestra (quello a sinistra del pulsante A) appaia "premuto" come in figura.
La schermata MS-DOS riporta, fra l’altro:
Eventuali vincoli violati vengono evidenziati con la dicitura " <---- vincolo violato". In alcuni casi la schermata riporta anche il costo ed il numero di turni della soluzione "non ammissibile" attualmente memorizzata nel file TURNI-X.SOL.
Il file di output TURNI.LOG contiene un breve riassunto dei dati letti, ed in particolare riporta eventuali errori o incongruenze riscontrati durante la lettura dei dati di input, nonché una stampa dei principali pesi/parametri letti. Eventuali errori e commenti vengono evidenziati con la dicitura "ERRORE" o "ATTENZIONE", in modo da poter essere facilmente individuati usando il comando Trova dell’editor utilizzato.
FILE DI INPUT
Il programma TURNI legge i dati di input dai file di testo descritti nel seguito (si veda il manuale completo per informazioni dettagliate).
Questo file contiene le corse da coprire, ciascuna delle quali è identificata dalle fermate (capolinea) e dai tempi di partenza e di arrivo, nonché da informazioni aggiuntive relative a vincoli particolari.
Questo file (opzionale) agisce come "filtro" sulle corse e permette di ridefinirne alcune caratteristiche in base al "codice della linea" specificato nel file INPUT.COR.
Questo file contiene i codici e gli identificativi delle fermate dove è possibile effettuare il cambio di autista.
Questo file contiene la descrizione dei gruppi di residenza per gli autisti.
Questo file contiene le distanze "a vuoto" fra le fermate ed è indispensabile se si vogliono generare automaticamente le corse a vuoto ed i trasferimenti tecnici necessari per gli allacciamenti.
Ogni riga di questo file (opzionale) contiene un allacciamento forzato fra due corse (o con i depositi).
Questo file contiene i seguenti valori che controllano il tipo di esecuzione richiesta:
Analisi ed uso dei turni in input
Generazione dei vuoti
Autisti come passeggeri
Applicare Passata n. 0
Generazione dei turni
Lettura/memorizzazione turni/vuoti/sol.
Cancellazione t/v/sol. precedenti
Avvisi sonori
Pausa in caso di diagnostici
Memorizzare le soluzioni .CRS
Saltare i vuoti 'P' in input
Verifica errori sol. riferimento
Tempo massimo di esecuzione in minuti
Numero minimo di passate
Numero massimo di passate
Numero di soluzioni da memorizzare
Questo file contiene i parametri che definiscono i vincoli normativi ed aziendali, nonché un insieme di pesi che permettono di quantificate il costo associato a ciascun turno e quindi alla soluzione complessiva.
I parametri gestiti sono descritti nel seguito. Si noti che la maggior parte di questi parametri viene di solito definita in fase di installazione e non viene modificata dall'utente (questi parametri possono essere mascherati in modo da non creare confusione all'utente).
TEMPI DI LAVORO E DI NASTRO
Massima media tempo di lavoro (globale)
Massimo tempo di lavoro (default)
Massimo tempo di lavoro per un turno *non* lungo
Inizio della fascia per il calcolo dello scarto rispetto al tempo di lavoro ottimale
Fine della fascia per il calcolo dello scarto rispetto al tempo di lavoro ottimale
Massimo tempo di nastro (default)
Massimo tempo di nastro per un turno *non* lungo (default)
Massima media del tempo di nastro (globale)
Numero massimo (o numero esatto, se negativo) di turni in soluzione
Istante di inizio della fascia per penalità nastro n. 1
Istante di inizio della fascia per penalità nastro n. 2
Istante di inizio della fascia per penalità nastro n. 3
Istante di inizio della fascia per penalità nastro n. 4
Istante di inizio della fascia per penalità nastro n. 5
Istante di inizio della fascia per penalità nastro n. 6
Istante di inizio della fascia per penalità nastro n. 7
Istante di inizio della fascia per penalità nastro n. 8
Istante di inizio della fascia per penalità nastro n. 9
Istante di inizio della fascia per penalità nastro n. 10
PERCENTUALI MASSIME
Percentuale massima di turni con nastro lungo
Percentuale massima di turni con nastro lungo in ciascun gruppo
Percentuale massima di turni con molte soste
Percentuale massima di turni con buono pasto
Percentuale massima di turni con tempo di lavoro lungo
Percentuale massima di turni disagiati
Percentuale massima di turni senza pulizia autobus
Percentuale massima di cuscinetti mancati
TEMPI DI ALLACCIAMENTO, CUSCINETTI E SOSTE
Tempo minimo per allacciamento corse di tipo "normale" (in minuti)
Tempo minimo per allacciamento corse di tipo "a vuoto" (in minuti)
Tempo minimo per allacciamento corse di tipo "disponibilità / scorta" (in minuti)
Numero massimo di cuscinetti mancati in un turno
Massimo numero di soste
Numero di soste considerato eccessivo
Limite *oltre* il quale si ha sosta non retribuita (in min.)
TEMPI MINIMI DI LAVORO E TURNI PART TIME
Minimo tempo di lavoro in un turno full time
Minimo tempo di lavoro pagato ad un full time
Minimo tempo di lavoro in un turno part time
Numero massimo di turni part time
SOSTE FUORI RESIDENZA E TURNI DISAGIATI
Massima sosta fuori residenza
Massima sosta fuori residenza *non* lunga
Massima sosta fuori residenza con retribuzione ridotta
Percentuale riconosciuta per soste fuori residenza
Percentuale riconosciuta per soste in residenza
Numero minimo di soste in un turno disagiato
Minimo tempo di nastro in un turno disagiato
VINCOLI SULLE VARIE FASI DI LAVORO
Istante minimo per l’inizio di un turno
Tempo di lavoro minimo in una fase di lavoro
Tempo lavoro minimo 1a fase
Tempo lavoro minimo 1a fase (se inizia prima delle 6:00)
CAMBI DI AUTOBUS E CORSE FUORI GRUPPO
Numero massimo di corse fuori gruppo in un turno
Numero massimo di cambi di targa in un turno
Numero massimo di cambi di tipo di bus in un turno
Tempo minimo per cambio autobus, in minuti
Durata massima di un vuoto implicito per cambio autobus, in minuti (negativo = no zona)
TEMPI DI PRE / POST E TEMPI ACCESSORI
Tempo di pre standard (in min.)
Tempo di post standard (in min.)
Tempo extra di pre ad inizio turno (in min.)
Tempo extra di post a fine turno (in min.)
Tempo di lavoro extra su base forfetaria (in min.)
Tempo di lavoro forfetario extra per sosta n. 1
Tempo di lavoro forfetario extra per sosta n. 2
Tempo di lavoro forfetario extra per sosta n. 3
Tempo di lavoro forfetario extra per sosta n. 4
Tempo di lavoro forfetario extra per sosta n. 5 e successive
Tempo lav. extra per allacciamenti cuscinetto nullo (in min.)
Fattore di amplificazione per la diaria ridotta secondo Art. 21a (= 0 se non si applica)
INTERVALLO PASTO
Inizio della fascia per intervallo pranzo
Fine della fascia per intervallo pranzo
Inizio della fascia per intervallo cena
Fine della fascia per intervallo cena
Durata pasto per il calcolo del buono pasto (in min.)
Durata minima del pasto per vincolo pasto (in min.)
COMPENSAZIONE PER ROTAZIONE TURNI
Tempo lavoro minimo giornaliero per compensazione
Tempo lavoro massimo giornaliero per compensazione
Minimo intervallo fra due turni in rotazione
PULIZIA AUTOBUS
Inizio della fascia per la pulizia autobus
Fine della fascia per la pulizia autobus
Durata minima della sosta per pulizia autobus (in min.)
Tempo di lavoro forfetario extra per mancata pulizia autobus (in min.)
GUIDA CONTINUATIVA E VARIE
Massimo tempo di guida continuativa
Durata 1 attesa sufficiente interruzione guida continuativa (in min.)
Durata 2 attese sufficienti interruzione guida continuativa (in min.)
Durata 3 attese sufficienti interruzione guida continuativa (in min.)
Conteggiare i tempi di PRE/POST come guida (=1 sì, =0 no)
Velocità a vuoto (in km/h)
Considerare come coincidenti tutte le fermate di una stessa zona (=1 sì, =0 no)
Limite percentuale oltre il quale le variazioni devono essere considerate eccessive
Inizio della fascia di lavoro notturno
Fine della fascia di lavoro notturno
PESI ( DETERMINANO LA BONTA` DI UNA SOLUZIONE )
Costo di un turno full time
Costo di un turno part time
Costo di un minuto di lavoro
Costo di un minuto di trasferimento a vuoto
Costo aggiuntivo per ogni minuto di supero nastro
Costo di un buono pasto
Costo aggiuntivo per la mancata copertura delle corse "consigliate"
Costo aggiuntivo per la mancata copertura delle corse "sconsigliate"
Costo aggiuntivo di un turno senza pulizia autobus
Costo aggiuntivo per ogni autobus aggiuntivo
Costo aggiuntivo per ogni minuto di lavoro lungo
Costo aggiuntivo per ogni minuto di lavoro sotto il minimo pagato
Costo aggiuntivo per ogni passaggio da una fermata afferente ad altre Unità Operative
Costo aggiuntivo per ogni cambio di tipo di autobus
Costo aggiuntivo per i turni con corse abilitate autobus di tipo ‘A’
Costo aggiuntivo per ogni mancato cuscinetto in un turno
Costo aggiuntivo per un turno disagiato
Costo aggiuntivo per scarto tempo lavoro rispetto alla fascia ottimale
Costo aggiuntivo per ogni minuto di sosta fuori residenza
Penalità per ogni trasferimento come passeggero
Fattore di penalità per violazione vincolo riposo minimo in compensazione (intero fra 0-1000)
Fattore di penalità per violazione vincolo massima media lavoro in compensaz. (intero fra 0-1000)
Costo fisso relativo alla fascia-nastro n. 1
Costo fisso relativo alla fascia-nastro n. 2
Costo fisso relativo alla fascia-nastro n. 3
Costo fisso relativo alla fascia-nastro n. 4
Costo fisso relativo alla fascia-nastro n. 5
Costo fisso relativo alla fascia-nastro n. 6
Costo fisso relativo alla fascia-nastro n. 7
Costo fisso relativo alla fascia-nastro n. 8
Costo fisso relativo alla fascia-nastro n. 9
Costo fisso relativo alla fascia-nastro n. 10
Costo fisso relativo ai turni con 0 soste
Costo fisso relativo ai turni con 1 sosta
Costo fisso relativo ai turni con 2 soste
Costo fisso relativo ai turni con 3 soste
Costo fisso relativo ai turni con 4 soste
Costo fisso relativo ai turni con 5 soste
Costo fisso relativo ai turni con 6 soste
Costo fisso relativo ai turni con 7 soste
Costo fisso relativo ai turni con 8 soste
Costo fisso relativo ai turni con 9 o più soste
Costo aggiuntivo per ogni minuto di lavoro notturno
Costo aggiuntivo per ogni cambio di "targa" in un turno
Costo aggiuntivo per ogni corsa fuori gruppo in un turno
Penalità per ogni spezzone sovracoperto
Costo aggiuntivo per ogni turno variante (rispetto alla soluzione di riferimento)
Costo aggiuntivo per ogni punto percentuale di variazione rispetto ad un turno della sol. di riferim.
Costo aggiuntivo per ogni turno con variazione eccessiva
COSTI AZIENDALI (DETERMINANO IL COSTO AZIENDALE DI UNA SOLUZIONE)
Costo aziendale per un turno full time
Costo aziendale per un turno part time
Costo aziendale per un minuto di lavoro
Costo aziendale aggiuntivo per un minuto di lavoro lungo
Costo aziendale per un minuto di trasferimento a vuoto
Per maggiori informazioni, contattateci al seguente indirizzo:
Double-Click
s.r.l.Consulenze e Software per l'Ottimizzazione
Via PARUTA 8 - 35126 PADOVA
e-mail:
turni.bus@gmail.comURL:
http://www.turni.it