Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Forum :: Programmazione.it :: Java :: Scheduling con JAVA
Scritto da Adriano Messina a.k.a. furiaceca il 25-05-2012 ore 18:28
Ciao a tutti, avrei bisogno di un aiuto: devo creare un programma Java che pianifichi l'attività di una scuola di volo. Ovvero ho delle risorse quali Aerei, istruttori e alunni e devo pianificare le attività in base alla disponibilità di aerei e istruttori, incastrando i vari orari delle varie lezioni in modo da ottimizzare l'intera giornata. Come posso improntare l'algoritmo?
Grazie
Ciao a tutti
Precedente: Diplomati/Neolaureati da formazione in Programmazione J2EE
Successiva: Client web service (WSDL, SOAP, PHP/JAVA)
Intervento di Fabio Degl'innocenti a.k.a. fabiowin98 del 25-05-2012 ore 23:24, Pistoia (PT)
Plebeo
Plebeo
(39 interventi)
Iscritto il 20-06-2011
Ciao, per cominciare ti consiglio di schemattizare il problema dividendo le informazioni in tuo possesso (come il testo di un problema) in modo tale da ottenere una serie di "Ingressi", che possono essere semplici digitazioni a file o record di database, ed una serie di "Uscite", che possono essere scritte a schermo, file o report elettronici. Ciò che lega in modo logico gli ingressi per tramutarli in uscita è un elemento fondamentale per la stesura del tuo algoritmo.

L'analisi di un problema è la cosa più difficile e più sottovalutata quando si affronta un problema ed è quindi necessario prestare la massima attenzione in questa fase delicata.
Intervento di Adriano Messina a.k.a. furiaceca del 26-05-2012 ore 13:27, Catania (CT)
Plebeo
Plebeo
(8 interventi)
Iscritto il 21-07-2010
Ok, capito, intanto ti ringrazio per la risposta. Diciamo che io sto già creando i db con i relativi dati, ora in java devo trovare il modo di creare le classi che leggono da questi db e infine l'algoritmo che pianifichi lo scheduling. Giusto?
Intervento di Fabio Degl'innocenti a.k.a. fabiowin98 del 26-05-2012 ore 13:51, Pistoia (PT)
Plebeo
Plebeo
(39 interventi)
Iscritto il 20-06-2011
L'algoritmo fará in modo di utilizzare i dati a tua disposizione nell'output voluto.

Non preoccuparti per lo scheduler.. Pensa prima di tutto a pensare all'algoritmo.. E non a scrivere un mucchio di istruzioni.. Usa il buon vecchio foglio di carta! Non buttarti subito nello sviluppo senza nemmeno aver capito bene cosa fare.. Questo puó andare bene nei primi programmi che fai ma ti consiglio di imparare fin da subito a dedicare il giusto tempo ad analizzare il problema..
Intervento di Adriano Messina a.k.a. furiaceca del 26-05-2012 ore 14:13, Catania (CT)
Plebeo
Plebeo
(8 interventi)
Iscritto il 21-07-2010
Ok, grazie, ma quindi mi consigli prima di tutto di trovare il modo di leggere, in java, i file del db che ho creato o di concentrarmi sin da subito sull'algoritmo e pensare a quello dopo?
Intervento di Marco Vitrano a.k.a. marcolomeo del 26-05-2012 ore 23:51, Brescia (BS)
Nobile
Nobile

(90 interventi)
Iscritto il 07-05-2003
Ciao,
assomiglia a una procedura per la schedulazione del carico macchine a capacità finita. Ma bando alle ciance, ti spiego a grandi linee come lo risolverei:

1 ANAGRAFICA E CALENDARIO AEREI
Crei una tabella con l'anagrafica aerei.
Dopodiché crei una tabella dove definisci il calendario giornaliero per ogni aereo sviluppata come segue:
AEREO | GIORNO | ORE DISPONIBILI NELLA GIORNATA
Es:
Piper A | 26/05/2012 | 8
Piper A | 27/05/2012 | 0
Piper B | 27/05/2012 | 8
...
Certamente potresti creare una formula che calcola al momento le ore disponibili di un giorno (es. tutti i venerdì 8 ore, tutti i sabati 0 ore), però date tutte le possibili eccezioni (manutenzione, rotture, vacanze...) ti consiglio di fare una tabella per il calendario.

2 ANAGRAFICA E CALENDARIO ISTRUTTORI
Esattamente come per gli aerei: crei una tabella anagrafica e una tabella per il calendario giornaliero di ogni istruttore:
ISTRUTTORE| GIORNO | ORE DISPONIBILI NELLA GIORNATA
Es:
Pippo | 26/05/2012 | 4
Pippo | 27/05/2012 | 0
Pluto | 27/05/2012 | 8
...

3 ANAGRAFICA ALUNNI
Crei una tabella anagrafica alunni. In questa tabella definisci anche una colonna denominata PRIORITA'. In questa colonna definirai l'ordine di schedulazione degli alunni (per data di iscrizione, per tipo studente, per nome, manualmente...)

4 LEZIONI
Crei una tabella dove definisci tutte le lezioni per ogni alunno come segue:
ALUNNO | NUMERO LEZIONE | ORE LEZIONE | GIORNO | ORA INIZIO | ORA FINE | AEREO | OPERATORE
Es:
Tizio | Lez. 1 | 2 | null | null | null | null | null
Tizio | Lez. 2 | 3 | null | null | null | null | null
Caio | Lez. 1 | 2 | null | null | null | null | null
...
Ovviamente tutti i null sono i dati che verranno calcolati dallo schedulatore

5 SCHEDULAZIONE
Ecco arrivato il nodo cruciale.
a) Prima di tutto ti costruisci una lista degli alunni ordinati in base alle priorità sopracitate
b) ciclando per ogni alunno carichi tutte le sue lezioni ordinate dalla prima all'ultima.
c) crei un metodo ("Disponibilità()") dove gli passi come parametri "Giorno" e "n ore della lezione". Il metodo verifica:
- se per quel giorno c'è un aereo disponibile per n ore
- se per quel giorno c'è un istruttore disponibile per n ore
Se lo trova, compila sul record della lezione istruttore, aereo, giorno, ora inizio e ora fine altrimenti passa al giorno successivo.
d) ciclando per ogni lezione dell'alunno, viene richiamato il metodo sopracitato
- per la prima lezione: partendo dal giorno di schedulazione (oggi o domani)
- per le lezioni successive: partendo dal termine della lezione precedente + un giorno

Al termine dei cicli dovresti aver schedulato tutto.

6 VINCOLI
Potresti anche pensare di vincolare certi alunni a certi istruttori o a certi giorni. In questo caso dovresti prima schedulare le lezioni VINCOLATE, dopodiché schedulatore le lezioni restanti.


Spero di averti dato un'idea da sfruttare. Fammi sapere com'è andata poi.
CIAO
Intervento di Adriano Messina a.k.a. furiaceca del 27-05-2012 ore 11:43, Catania (CT)
Plebeo
Plebeo
(8 interventi)
Iscritto il 21-07-2010
Ok, grazie tantissimo per le dritte, mi metto subito a lavoro su questa scia che mi hai dato e ti farò sapere.
Ancora grazie, a presto, ciao ;)
Intervento di Adriano Messina a.k.a. furiaceca del 04-07-2012 ore 13:48, Catania (CT)
Plebeo
Plebeo
(8 interventi)
Iscritto il 21-07-2010
Ciao sto provando a trovare la soluzione corretta. Ho già creato il db da dove caricare le varie tabelle che sono : lezioni, allievi, istruttori, aerei, aule, corsi, allieviLezioni (che indica le lezioni che ogni allievo deve seguire) e istruttoriLezioni (che indice le lezioni che un istruttore deve insegnare).
I vincoli sono i seguenti:
- ogni allievo segue un solo corso
- ogni allievo deve seguire tutte le lezioni
- ogni lezione sarà di tipo aereo o aula, nel primo caso verrà seguita da un allievo per volta(il quale utilizzerà l'aereo), nel secondo caso verrà seguita da tutti gli allievi contemporaneamente.
- ogni lezione fa parte di un solo corso
- ogni istruttore può insegnare in un solo corso
- ogni istruttore può insegnare più lezioni, indipendentemente dal fatto che essa sia in aula o in aereo

La tabella delle lezioni comprende un tipo che indica se aereo o aula, e la durata di ogni lezione.
Questo è importante perchè devo sistemare tutte le lezioni per tutti gli allievi, incastrandole in base alla loro durata. Se la lezione è di tipo aereo dovrò programmare tante lezioni quanti sono gli allievi, se è di tipo aula ne programmerò una sola che sarà seguita da tutti gli allievi in contemportanea.
Intervento di Adriano Messina a.k.a. furiaceca del 04-07-2012 ore 13:49, Catania (CT)
Plebeo
Plebeo
(8 interventi)
Iscritto il 21-07-2010
Io ho caricato le tabelle dal db in vari ArrayList con la seguente istruzione:
List lezioni = db.eseguiQuery("SELECT * FROM Lezioni");
ovviamente così per tutte le tabelle.
Ho già creato una classe Database.java che mi permette di connettermi e disconnettermi dal db, aggiungere query, aggiornarle ecc...
Ho creato inoltre, per il calcolo della disponibilità delle risorse, 3 classi:
Calendario.java con all'interno un ArrayList comprendente i vari giorni della settimana.
Giorno.java con all'interno un ArrayList comprendente tutte le fasce orarie di ciascun giorno e inoltre comprende i metodi per verificare che un'aula e/o un aereo e/o un istruttore e/o un allievo sia già stati scelti.
Ora.java con all'interno i metodi get e set per restituirmi, data, tipo(aereo/aula), id dell'aereo o aula, id istruttore e id allievo, ovvero tutti i dati per quella lezione che si sta selezionando.
Se vuoi te li posto queste classi.

Ora il mio problema è creare quest'algoritmo per inserirli all'interno del calendario, cioè scorrere tutte le lezioni, inserirle man mano in base alla loro durata e creare quindi l'orario definitivo della settimana. Spero mi puoi aiutare e spero di essere stato chiaro! Grazie in anticipo.
Intervento di Marco Vitrano a.k.a. marcolomeo del 09-07-2012 ore 18:23, Brescia (BS)
Nobile
Nobile

(90 interventi)
Iscritto il 07-05-2003
Per la parte relativa alla programmazione in Java, mi spiace ma non posso aiutarti: uso altri linguaggi simili come sintassi ma ogni linguaggio ha le sue funzioni e quelle di Java non le conosco.

Per la parte relativa all'analisi di progettazione, devi definire meglio il rapporto tra le ore AULA e le ore VOLO:
- lo studente dopo quante lezioni AULA può fare una lezione VOLO?
- lo studente può fare nello stesso giorno una lezione AULA e una lezione VOLO?
- le lezioni AULA le fanno tutti insieme gli studenti? E se no, le ore AULA sono tutte uguali oppure cambiano(es. lo studente che non ha fatto alcuna lezione, può andare con chi ha già fatto 3 lezioni AULA )?

Se gli studenti devono fare tutti insieme la lezione AULA e non ci sono vincoli tra i 2 tipi di corsi, farei come segue:
1) calcolo il primo giorno/ora disponibile per una lezione AULA dove partecipano tutti gli studenti
2) calcolo una lezione VOLO per tutti gli studenti come nel post precedente
3) terminato la schedulazione del punto 2, se ci sono altre lezioni AULA ricalcolo una nuova lezione come al punto 1 altrimenti ricalcolo tutte le rimanenti lezioni VOLO

Spero di essere stato chiaro. Ciao
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 1.07 secondi.