Algoritmo per la pianificazione di una serie di attività della vita reale che vengono inserite dall'utente

4

Sto provando a scrivere del codice per pianificare un insieme di attività della vita reale che vengono inserite dall'utente. Queste attività sono memorizzate in un database SQLite. E al momento, gli unici parametri che sto prendendo in considerazione sono,

The project to which a task belongs to --> p 
The name of the task itself --> t
And the due date for this task --> d

I parametri project e due date sono facoltativi. Ma partendo dal presupposto che l'utente immetterà sempre almeno task name e due date per ogni attività. Mi chiedevo se è possibile pianificare l'insieme di attività utilizzando uno schedulatore come Completamente Fair Scheduler (CFS) . Mi rendo conto che il CFS è stato scritto per pianificare compiti con granularità molto più fine (nanosecondi) rispetto all'insieme di compiti proposti per questo scopo ... Ma ho capito che potrebbe essere possibile e forse più efficiente se posso modificarlo per lavorare con compiti che sono sulla stessa scala temporale della nostra percezione del tempo.

Una voce tipica nel database dovrebbe essere nel formato (p, t, d). 'p' è facoltativo. Ecco alcuni esempi:

(_, 'Call home', 29/2/2012)
(Work, 'Meet boss', 14/3/2012)
(Work, 'Ask for raise', 18/3/2012)
(_, 'Book tickets', 10/3/2012)
(Work, 'Quit', 14/4/2012)
(Personal, 'Get botox injections', 10/3/2012)
(Personal, 'Get breast implants', 10/10/2012)
(_, 'Dad bday', 7/10/2012)

Ecco una situazione da considerare. Mi piacerebbe svegliarmi al mattino. Esegui questo algoritmo "ancora da codificare" sull'insieme di compiti .. come quelli sopra indicati .. e vorrei ricevere un programma per il resto del giorno, che massimizzi il rendimento. In una fase successiva, vorrei passare argomenti a questi algoritmi che mi consentiranno di controllare lo scheduler per restituire una serie di attività a seconda della mia situazione attuale. Come se fossi al lavoro, voglio essere in grado di passare argomenti all'algoritmo, per chiedergli di restituire solo le attività che possono essere completate al lavoro ..

Spero di essere in grado di trasmettere il succo di ciò. Comprendo che il due date da solo non è sufficiente per pianificare attività che utilizzano CFS, ad esempio ... ma se ci sono altri parametri che dovrei prendere in considerazione, per favore fatemelo sapere. E qualsiasi suggerimento per il tipo di algoritmo di pianificazione da utilizzare sarebbe utile.

    
posta Jay 01.03.2012 - 17:42
fonte

4 risposte

4

Questo è qualcosa che desideravo da tanto tempo. Ma uno scheduler del kernel deve solo decidere quale task eseguire adesso , non quando in futuro per eseguire altre attività. Quindi quegli scheduler possono aiutarti con parte del problema, ma qui c'è molto di più di quello che risolvono. E hanno un po 'di informazioni chiave che non stai tenendo; vale a dire se un'attività è bloccata o meno. (In realtà, il kernel traccerà gli stati del processo, qui sto semplificando la procedura.) Avrai bisogno di sapere su cosa sta bloccando un'attività, in modo che l'utente possa dirti se l'attività è sbloccata.

Se vuoi essere in grado di pianificare la tua giornata, dovrai includere una stima del tempo rimanente per un'attività.

Dovrai collegare anche le dipendenze delle attività. E questo non significa nemmeno programmare cose con eventi esterni come "order book" - > "aspetta che arrivi" - > 'leggi il libro' prima di ordinare il libro.

Penso che scoprirai che il problema si fa rapidamente e che avere un'interfaccia utente e sempre con te ben pensata sarà fondamentale.

    
risposta data 01.03.2012 - 18:04
fonte
0

Ok, ci ho pensato. Ecco come immagino di realizzarlo ..

Supponendo che ci sia un insieme di attività ... dove ogni attività ha,

A deadline
Time taken for completion
Time spent on the task so far

Intendo rappresentare questi set di compiti come un cromosoma genetico. Ogni cromosoma sarà codificato con un numero arbitrario di compiti. La forma fisica di ciascun cromosoma sarà determinata da una funzione fitness che premia i cromosomi che hanno una serie di compiti prossimi alla scadenza e ancora incompleti. Ricompensa anche compiti a cui non è stata data alcuna attenzione nel recente passato.

La funzione fitness punisce quei compiti la cui scadenza è lontana e quelle attività che hanno avuto molto più accesso alla mia attenzione (supponendo che io sia la CPU) nel recente passato.

La mia comprensione è che .. la conseguenza di eseguire i passaggi precedenti è che dopo alcune generazioni potrebbe essere possibile arrivare a un cromosoma che ha un insieme di compiti che è ...

  • prossimi alla scadenza
  • non ha ricevuto attenzione nel recente passato
  • ha la maggiore probabilità di essere completato nel tempo stabilito (ciò che intendo è che, se chiedo al algo di darmi un programma per 3 ore, allora il cromosoma vincente deve contenere compiti che possono essere compiuti in quel momento frame)

Qualcuno potrebbe commentare il mio approccio? Pensi che potrebbe funzionare? Non intendo prendere in considerazione le dipendenze tra i vari compiti al momento. Mi piacerebbe avere un prototipo funzionante in una fase di lavoro, dopo di che posso migliorare ricorsivamente l'algoritmo ...

Grazie.

    
risposta data 03.03.2012 - 16:16
fonte
-1

Per trovare un ordine ottimale del tuo compito, dovresti almeno includere i parametri prima ora di avvio e durata . Se disponi di queste finestre temporali , puoi definire ulteriormente una finestra temporale per ciascun progetto. Per impostazione predefinita, la finestra temporale del progetto potrebbe essere l'intera giornata.

Consideriamo ad esempio la sezione "Lavoro": se si trova tra le 8 e le 17 l'applicazione può filtrare tutte le attività che si trovano tra l'intervallo di tempo. Se si desidera pianificare un'intera giornata, è necessario scrivere un algoritmo, che tenta di trovare una soluzione in cui non si verifichino violazioni temporali. Puoi anche costruire un criterio di ottimizzazione come: "minimizzare la distanza tra l'ora di inizio effettiva di un'attività e il suo orario di inizio più precoce"

    
risposta data 01.03.2012 - 20:56
fonte
-2

Che ne dici di renderlo semplice: la pianificazione del primo deadline (EDF) meno recente. È stato ben studiato e contiene una semplice teoria che ti consente anche di calcolare l'utilizzo e la fattibilità.

    
risposta data 04.03.2012 - 11:00
fonte

Leggi altre domande sui tag