Algoritmo di scheduling dinamico

2

Recentemente mi sono interessato ai problemi di pianificazione o al problema di pianificazione dinamica. Il problema è che voglio sviluppare un qualche tipo di strato nella mia applicazione che effettuerà il polling di circa 50-100 caselle e-mail su base regolare. Non ho alcun controllo sui server IMAP / POP3, non posso personalizzarli o modificarli in alcun modo in modo da ricevere qualche tipo di evento sulla posta in arrivo - e questo è il nocciolo del mio problema. Devo interrogare queste caselle di posta elettronica per scoprire se ci sono alcune mail da recuperare e processare o meno. La cosa importante è che quelle caselle di posta differiscono in termini di rapporto tra il numero di messaggi in arrivo nell'unità di tempo, quindi vorrei controllarli su basi diverse e ottimizzate, e. g. la casella di posta più stressata che vorrei controllare più spesso e quella che non è così popolare controllerei raramente.

Ho fatto alcune ricerche di alto livello per conto mio e stavo pensando di usare:

  • Coda prioritaria
  • Algoritmo genetico
  • Previsione dei dati in arrivo sulla base di dati storici (una sorta di regressione?)

Ma sono bloccato - non sono sicuro di scegliere la soluzione migliore, perché l'algoritmo genetico sembra essere il più attraente per me, ma ho dei dubbi. Il mio genoma sarebbe un insieme di intervalli di tempo per i lavori (controlla casella di posta elettronica singola) potrebbe essere inizializzato da valori casuali in un primo momento e una funzione di fitness potrebbe utilizzare le statistiche del risultato della precedente iterazione (numero di mail effettive nella casella di posta sul controllo , tempo impiegato dall'elaborazione di tali e-mail). Ma mi chiedo se questo approccio è abbastanza buono, perché si "evolvere" molto lentamente.

Sto progettando un flusso di lavoro relativamente semplice:

  1. Controlla regolarmente le caselle di posta utilizzando la pianificazione dinamica
  2. Metti evento su una coda
  3. I lavoratori ricevono eventi ed elaborano email in una determinata casella postale
  4. La voce storica relativa alle dimensioni del batch, il tempo totale di elaborazione è inserita nel DB.
  5. Scheduler regola priorità / intervalli di tempo in base ai dati storici.

Hai qualche esperienza con questo tipo di problema? Devo trattarlo come problema di CSP o Job Shop Scheduling? Sarei grato per qualsiasi intuizione!

    
posta Apple Pie 09.02.2017 - 22:07
fonte

1 risposta

1

Penso che un approccio più semplice potrebbe essere sufficiente. Determinare innanzitutto il tempo di attesa minimo e massimo tra il controllo di una casella di posta, ad esempio 5 minuti e 1 ora.

Inizia con un periodo di attesa di 10 minuti per ogni casella di posta. Quando viene trovata una nuova posta, ridurre il tempo del 50%, quando nessuna posta trovata aumenta il tempo del 10%. E assicurati che i tempi rimangano compresi nell'intervallo consentito.

Questo algoritmo risponde rapidamente ai nuovi dati e controllerà queste fonti più frequentemente e ridurrà lentamente il carico quando non è necessario elaborare alcun dato.

Puoi regolare le percentuali di aumento / diminuzione in modo che corrispondano al comportamento desiderato.

    
risposta data 09.08.2017 - 23:14
fonte