Indice del forum
 FAQ   Cerca   Lista utenti   Gruppi   Registrati   Profilo   Messaggi privati   Log in 
Scheduling con JAVA

 
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript...
Precedente :: Successivo  

Autore

Messaggio

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Ven Mag 25, 2012 4:35 pm    Oggetto: Scheduling con JAVA

Rispondi citando


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

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Ven Mag 25, 2012 6:44 pm    Oggetto:

Rispondi citando


Ciao, intanto suppongo che tu abbia fatto già le classi per i vari oggetti. Poi che requisiti hai? Ci sono particolari associazioni tra aereo, istruttore e alunno oppure è indifferente? Diversi tipi di aereo ecc? Dacci maggiori informazioni!

Top

Profilo Invia messaggio privato Invia e-mail

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Sab Mag 26, 2012 11:31 am    Oggetto:

Rispondi citando


Ciao, si in effetti non sono stato chiarissimo. Io ho creato già i db con i relativi dati, ovvero aerei, istruttori, aule, alunni, lezioni, corsi ecc..
Devo creare in java le classi che leggono da questi db.
Infine dovrò trovare l'algoritmo che pianifichi lo scheduling. Gli unici vincoli sono il fatto che aerei ed istruttori devono essere sfruttati alla stessa maniera, nel senso che devo evitare che un istruttore venga sfruttato al massimo e magari altri due non lavorino quasi, e stesso discorso per gli aerei, cioè evitare che si utilizzi solo un aereo, piuttosto che un altro.

Top

Profilo Invia messaggio privato

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 11:53 am    Oggetto:

Rispondi citando


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.

Io ho caricato le tabelle dal db in vari ArrayList con la seguente istruzione:
List<ArrayList> 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.

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Lug 04, 2012 12:34 pm    Oggetto:

Rispondi citando


Se non ci sono vincoli del tipo max lezioni al giorno per alunno, puoi cominciare intanto ad associare alunni e insegnanti a ciascun corso. Fatto questo, puoi scorrere la lista delle lezioni per ogni corso e associarle ai giorni. Se la lezione è di tipo aula, associ tutti gli alunni a quel giorno, se è aereo, scorri i giorni e per ogni alunni metti una lezione di tipo aereo. Ovviamente controlli che aule, se le consideri, e aerei, non siano già usati. Se posti un pò di codice possiamo vedere.

Top

Profilo Invia messaggio privato Invia e-mail

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 1:27 pm    Oggetto:

Rispondi citando


Grazie intanto per la risposta. Allora con le tabelle già create gli allievi e gli istruttori sono già associati a ciascun corso (queste tabelle sono fatte con MySql tramite XAMPP). L'algoritmo infatti deve fare esattamente quello che hai scritto tu, quindi per ogni lezione si vede se è di tipo aula o aereo e si assegnano gli allievi e si inserisce la lezione all'interno dell'orario.
Inizio con il codice per la creazione dei metodi che mi controllano la disponibilità delle risorse:
Calendario.java è :
public class Calendario {
ArrayList<Giorno> Giornaliero;
public Calendario(){
Giornaliero = new ArrayList<Giorno>();
}
public void InsertGiorno(Giorno giorno){
Giornaliero.add(giorno);
}
public boolean DeleteGiorno(Giorno giorno){
return Giornaliero.remove(giorno);
}
public Giorno getGiorno(int i){
return Giornaliero.get(i);
}
}

Top

Profilo Invia messaggio privato

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 1:27 pm    Oggetto:

Rispondi citando


Giorno.java è :
public class Giorno {
ArrayList<Ora> Orario;
public Giorno(){
Orario = new ArrayList<Ora>();
}
public void InsertOra(Ora ora){
Orario.add(ora);
}
public boolean DeleteOra(Ora ora){
return Orario.remove(ora);
}
public boolean ContainsAula(int id_aula){
for(int i=0; i<Orario.size(); i++){
if(Orario.get(i).getAula() == id_aula)
return true;
}
return false;
}
public boolean ContainsAereo(int id_aereo){
for(int i=0; i<Orario.size(); i++){
if(Orario.get(i).getAereo() == id_aereo)
return true;
}
return false;
}
public boolean ContainsIstruttore(int id_istruttore){
for(int i=0; i<Orario.size(); i++){
if(Orario.get(i).getIstruttore() == id_istruttore)
return true;
}
return false;
}
public boolean ContainsAllievo(int id_allievo){
for(int i=0; i<Orario.size(); i++){
if(Orario.get(i).getAllievo() == id_allievo)
return true;
}
return false;
}
}

Top

Profilo Invia messaggio privato

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 1:28 pm    Oggetto:

Rispondi citando


Ora.java è :
public class Ora {
private Date Data;
private String Flg;
private int id_aereo;
private int id_aula;
private int id_lezione;
private int id_istruttore;
private int id_allievo;

public Ora() { }

public Date getData(){
return Data;
}
public void setData(Date d){
Data = d;
}
public String getFlg(){
return Flg;
}
public void setFlg(String f){
Flg = f;
}
public int getAereo(){
return id_aereo;
}
public void setAereo(int l){
id_aereo = l;
}
public int getAula(){
return id_aula;
}
public void setAula(int l){
id_aula = l;
}
public int getLezione(){
return id_lezione;
}
public void setLezione(int l){
id_lezione = l;
}
public int getIstruttore(){
return id_istruttore;
}
public void setIstruttore(int i){
id_istruttore = i;
}
public int getAllievo(){
return id_allievo;
}
public void setAllievo(int a){
id_allievo = a;
}
}

Top

Profilo Invia messaggio privato

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 1:35 pm    Oggetto:

Rispondi citando


Questi metodi come detto mi controllano cosa ho usato delle varie risorse, per evitare che vengano usate nuovamente e contemporaneamente.
Ho provato ad inserire manualmente le date, gli orari e tutte le varie risorse e funziona. Ora il problema è l'algoritmo in sè perchè non riesco a scrivere il codice per inserire tutti i dati del DB e creare l'orario per tutta la settimana (ad esempio).
Questo è quello che ho scritto finora:
public static void main(String[] args) {
boolean esito = db.connetti();
if (esito) {
List<ArrayList> corsi = db.eseguiQuery("SELECT * FROM Corsi");
List<ArrayList> aerei = db.eseguiQuery("SELECT * FROM Aerei");
List<ArrayList> aule = db.eseguiQuery("SELECT * FROM Aule");
List<ArrayList> istruttori = db.eseguiQuery("SELECT * FROM Istruttori");
List<ArrayList> allievi = db.eseguiQuery("SELECT * FROM Allievi");
List<ArrayList> lezioni = db.eseguiQuery("SELECT * FROM Lezioni");
List<ArrayList> lezioniAllievi = db.eseguiQuery("SELECT * FROM LezioniAllievi");
List<ArrayList> lezioniIstruttori = db.eseguiQuery("SELECT * FROM LezioniIstruttori");



//ALGORITMO CHE DEVO CREARE
// scorro le lezioni //
for(int i=0; i<lezioni.size(); i++) {

if(tipoLezione.compareTo("V") == 0 ){
// caso aereo //

???????? ISTRUZIONE PER INSERIRE I DATI

}
else if(tipoLezione.compareTo("A") == 0){
// caso aula //

???????? ISTRUZIONE PER INSERIRE I DATI

}

}
}
}

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Lug 04, 2012 2:51 pm    Oggetto:

Rispondi citando


Ma il problema è l'istruzione per inserire i dati nel database o l'algoritmo?

Top

Profilo Invia messaggio privato Invia e-mail

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 3:01 pm    Oggetto:

Rispondi citando


l'algoritmo Sad
Facendo scorrere con il for tutte le lezioni come faccio a creare l'orario (sempre in base al fatto che sia aereo o aula)?
In poche parole mi sono fermato a quelle istruzioni che ho scritto nel main.

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Lug 04, 2012 3:27 pm    Oggetto:

Rispondi citando


Dovresti creare delle funzioni per ottenre il primo giorno in cui non hai lezioni, quindi ad esempio:

Codice:
Giorno GetNextFreeDay()
{
  // prendi il giorno occupato più grande e se ha un'ora libera, torni quello, altrimenti ne crei uno (il giorno successivo)
}


fatto questo, scorri le lezioni, e aggiungi la lezione alla prima ora libera del giorno ottenuto sopra. Devi poi aggiungere anche gli allievi alla lezione, nella tabella LezioniAllievi

Intanto fai questo sopra, poi vediamo.

Top

Profilo Invia messaggio privato Invia e-mail

furiaceca
Bravino


Registrato: 21/07/10 16:06
Messaggi: 11

MessaggioInviato: Mer Lug 04, 2012 3:36 pm    Oggetto:

Rispondi citando


e questo metodo devo aggiungerlo all'interno della classe Calendario.java, giusto??

Top

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Lug 04, 2012 3:43 pm    Oggetto:

Rispondi citando


Si, direi che è il posto giusto.

Top

Profilo Invia messaggio privato Invia e-mail

Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript... Tutti i fusi orari sono GMT
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
Forum del sito TuttoMontefalco.it - Umbria - Italy topic RSS feed 


Torna al sito TuttoMontefalco.it


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it

SoftGreen 1.1 phpBB theme by DaTutorials.com
Copyright © DaTutorials 2005