Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    7

    SchedulazioneLavori-Backtracking

    Ciao a tutti,sto lavorando ad un progetto per l'universita'che tratta di schedulazione di lavori in presenza di vincoli ed in cui si consiglia di utilizzare la tecnica del backtracking....siccome sto trovando grandi difficolta'volevo chiedere qui se qualcuno ne sa'qualcosa e sa'darmi delle dritte visto che non riesco a risolvere il problema
    le specifiche del problema sono pressapoco queste:




    Un’attività è svolta mediante l’esecuzione, da parte di più persone, di alcuni lavori elementari di cui è nota la durata in unità di tempo (giorni, mesi etc.). L’esecuzione dei lavori può comportare l’esistenza di vincoli temporali: un lavoro, ad esempio, non può cominciare se non è finito un altro (o altri) e cosi via. Si vuole progettare e realizzare un’applicazione per controllare la correttezza di attività lavorative e per proporre una schedulazione dei lavori, se esiste, che sia rispettosa dei vincoli posti. In input si forniscono i dei lavori e i vincoli associati. L’output atteso è la schedulazione dei lavori. La specifica di un lavoro elementare consiste della coppia

    <id-lavoro, durata>

    Un vincolo, invece, è espresso mediante una tupla del tipo

    <I/F, id-lav1, P/D, I/F, id-lav2>

    cioè l’inizio(I) o la fine(F) di un lavoro id-lav1, deve avvenire prima(P)/dopo(D) dell’inizio(I)/fine(F) del lavoro id-lav2.
    Se tra alcuni lavori non sussistono dipendenze, allora i lavori vanno eseguiti prima possibile, ossia in parallelo.

    Quale semplice esempio, si consideri l’input:
    #lavori
    ( 0, 3 )
    ( 1, 4 )
    ( 2, 5 )
    ( 3, 3 )
    ( 4, 3 )

    #vincoli
    ( I, 1, D, F, 0 )
    ( I, 4, D, F, 2 )

    Possibile output:

    t 0 1 2 3 4
    0 * - * * -
    1 * - * * -
    2 * - * * -
    3 - * * - -
    4 - * * - -
    5 - * - - *
    6 - * - - *
    7 - - - - *

    In alternativa l’output può essere prodotto generando una successione di tuple che indicano l’istante di inizio, il lavoro e la sua durata: <tInizio, id-lav, durata>.

    Una possibile soluzione (inefficiente) può essere basata sulla tecnica backtracking. Come punti di scelta si utilizzano gli istanti temporali (nel caso peggiore la durata complessiva dell’attività è la somma delle durate dei lavori, conseguente ad una esecuzione totalmente sequenziale), come scelte i lavori che possono eseguire nell’stante considerato.






    se qualcuno puo'e vuole aiutarmi posso anche postare il codice da me scritto finora....l'approccio che sto usando e'questo:scrivere una classe astratta Backtracking che implementi il solo metodo risolvi() ,ereditare da essa una classe GestioneSchedulazioni che implementi i metodi astratti (secondo lo schema del "template method"),scrivere una classe Lavoro ed una Vincolo adatte a rappresentare tali oggetti come richiesto,infine una classe di Test(con il main) ed una per raccogliere in input i dati....ma il mio problema e'sostanzialmente nella classe GestioneLavori che stabilisce in che maniera assegnare i lavori a seconda degli istanti e dei vincoli.....vi prego se sapete aiutarmi rispondetemi perche'sono ad un punto che non so'piu'che fare!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    7
    RISOLTO!!!!
    praticamente ho ribaltato i concetti....ovvero la traccia consiglia di utilizzare come punti di scelta gli istanti e come scelte i lavori...ma cosi'facendo la funzione "risolvi()" finisce troppo presto,cioe'quando l'istante viene messo a 0 facendo backtracking...e quindi non si produce l'output atteso.....ebbene facendo il contrario(usando come scelte gli istanti e dunque modificando di poco il programma) sono riuscito a risolvere l'importante e'scrivere bene la funzione booleana "assegnabile(Scelta s,PuntoScelta ps)" che controlla se il lavoro ps sia gia'inserito in soluzione ed in caso contrario si guardano i suoi vincoli(se ce ne sono) e si controlla che assegnandolo all'istante s questi non vengano violati

  3. #3
    ciao..ankio ho il tuo stesso progetto....
    come scelte ho preso gli istanti temporali (integer),e come punti di scelta gli id dei lavori (integer)...
    ho salvato la collezione dei lavori e dei vincoli in 2 LinkedList...
    mi manca solo il metodo assegnabile....non so proprio come verificare se assegnando l'istante temporale all'id del lavoro vengano rispettato i vincoli..
    Potresti darmi qualche idea.
    grazie...

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    7
    Originariamente inviato da robaro
    RISOLTO!!!!
    praticamente ho ribaltato i concetti....ovvero la traccia consiglia di utilizzare come punti di scelta gli istanti e come scelte i lavori...ma cosi'facendo la funzione "risolvi()" finisce troppo presto,cioe'quando l'istante viene messo a 0 facendo backtracking...e quindi non si produce l'output atteso.....ebbene facendo il contrario(usando come scelte gli istanti e dunque modificando di poco il programma) sono riuscito a risolvere l'importante e'scrivere bene la funzione booleana "assegnabile(Scelta s,PuntoScelta ps)" che controlla se il lavoro ps sia gia'inserito in soluzione ed in caso contrario si guardano i suoi vincoli(se ce ne sono) e si controlla che assegnandolo all'istante s questi non vengano violati
    ciao,allora innanzitutto hai fatto bene ad usare come scelte gli istanti e punti scelta i lavori(al contrario di quanto dice la traccia che probabilmente puo'anche essere sbagliata),ma ci sei arrivato da te?
    cmq sia il cuore del programma e'proprio "assegnabile",tu devi mantenere una struttura di vincoli,che per ogni id di lavoro contiene i relativi vincoli.....quindi tu quando vai a verificare se l'istante x e'assegnabile al lavoro y(con durata z) prelevi i vincoli relativi ad y e fai dei copntrolli in base al tipo di vincolo che analizzi....ad esempio se io ho il lavoro 0 che dura 3 istanti ed il lavro 1 che dura 2 istanti un possibile vincolo puo' essere <i,1,d,0,f> cioe'che 1 inizi dopo la fine di 0,quindi quando tu farai una schedulazioni controlli che l'istante di inizio di 1 nn sia prima di quello di fine di 0(in proposito ti conviene memorizzarti,magari in una struttura,anche queste informazioni)...importante e'anche settare il giusto numero di istanti massimi....tipo per l'esempio fatto il numero di istanti massimo dovrebbe essere 5(3+2) ....prova e fammi sapere

  5. #5
    allora..per quanto riguarda le scelte e i punti di scelta avev intuito che bisognava fare nel modo che hai fatto tu...poi sono andato dal professore e mi ha dato la conferma...
    ho scelto come ultima scelta la durata massima dei lavori....coe hai fatto tu..
    il problema piu grande è il controllo dei vincoli...non so proprio come fare..io ho usato come struttura le linked list...
    se hai msn o una mail possiamo parlarne..cosi magari puo essere che pure ci conosciamo,,,.
    fammi sapere...

  6. #6
    salve ho anche io questo progetto, chi me lo può mandare via email per confrontarlo...? grazie aspetto vostre risp

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142

    UNICAL

    Ma di quale dei due corsi siete ^_^ ?
    <esistono cose che non esistono>

  8. #8
    Sono all'Ama Mater e ho un problema simile. Di che corso siete??

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Questo forum non è una chat in cui si possono risollevare discussioni ferme da anni per chiacchierare con gli utenti che hanno partecipato: c'è un uso consono del mezzo, descritto nel Regolamento.

    Per le comunicazioni dirette esistono inoltre i messaggi privati.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.