Come risolvere un problema di soddisfazione dei vincoli per la pianificazione

0

Questa presentazione descrive diversi algoritmi per la risoluzione di un CSP per la pianificazione.

Dire che ho alcuni processi con alcuni vincoli:

a before c
c before b
b after d
c 50% more important than e
give d at least 20% of the total running time
f before and after d
g after f only if b is still running
run h if there is at least 20% free memory available.
interrupt h with i for a minute if h runs longer than 5 minutes.
etc.

Mi chiedo come faccio a scrivere questo in termini di vincoli, se possono essere scritti come vincoli binari (non sono sicuro che tutti siano binari), e l'idea approssimativa di come "risolvere" il sistema. Cioè, capire un ordine e la durata dei processi che soddisfa tutti i vincoli. Ho cercato di includere vari tipi di variabili per renderlo più realistico:

  • Ora.
  • Risorse. (memoria disponibile).
  • priorità. (50% più importante).

Se dovessi scrivere i vincoli, farei:

a.start < c.start
c.start < b.start
b.start > d.start
e.priority = 0.5 * c.priority
d.duration = 0.2 * system.duration
f.start < d.start && f.end > d.end
g.start > f.start if b.running
if system.memory < system.memory.total * 0.2 then start h (this one is trickier)
if h.duration > 5 min then interrupt h && start i && stop i when i.duration == 1 min

Non sono sicuro di come scrivere start i e stop i come vincoli e le istruzioni if-then.

Direi che le variabili sono:

a.start
b.start
c.start
d.start
f.start
g.start
d.end
f.end
c.priority
e.priority
d.duration
h.duration
i.duration
system.duration
system.memory
system.memory.total

Quindi il dominio delle variabili di cui non sono sicuro. I tempi possono essere qualsiasi timestamp intero, quindi forse è all'interno di qualche milione di interi con risoluzione ms. Quindi la priorità è una percentuale. E c.priority sembra essere di sola lettura, quindi non è sicuro se abbiamo bisogno di inizializzare alcune delle variabili precedenti.

Quindi abbiamo le 3 componenti di un CSP = (V, D, C), variabili, domini e vincoli. Non sono sicuro di averle fatte correttamente.

Dopo averli definiti correttamente, sto cercando di capire come funziona l' algoritmo di controllo in avanti . Non vedo ancora approssimativamente come si naviga il "grafico dei vincoli" per assegnare valori alle variabili. Sto solo cercando una spiegazione di base usando i pezzi dell'esempio sopra riportato.

Per riassumere, le mie domande sono:

  1. Se modifico i componenti CSP = (V, D, C) correttamente. O cosa ho sbagliato.
  2. Una rapida spiegazione di come funziona uno qualsiasi degli algoritmi usando come esempio il V / D / C dall'alto. Mi piacerebbe vedere da qualcosa di pratico come andare effettivamente a "risolvere" il sistema dei vincoli ad alto livello, così posso quindi avere gli strumenti per capire come risolvere questo specifico problema.
posta Lance Pollard 22.06.2018 - 04:45
fonte

1 risposta

3

Ci sono un paio di problemi con la modellazione di questo problema.

In primo luogo, CSP funziona meglio come formalismo se esiste un numero di valori noto per determinare. La descrizione del problema indica che h potrebbe dover essere interrotto e riavviato un numero sconosciuto di volte, quindi non c'è un un valore da calcolare per h , ma diversi (ora di inizio, tempo di arresto e un numero sconosciuto di ciascuno).

Allo stesso modo, valori come system.memory cambieranno durante l'attività: non è tanto un valore da determinare come un'intera serie storica. Ancora una volta, non è nemmeno chiaro quanti valori dovrebbe essere rappresentato come.

Sembra anche presumere che il tempo di esecuzione di ogni attività non possa essere determinato in anticipo, ma come fai tu lo determini, allora? Puoi solo decidere "Darò d 120 secondi CPU per l'esecuzione, e se non si completa, sfortuna"? In tal caso, cosa impedisce all'algoritmo di assegnare semplicemente il tempo a tutto e di produrre un programma banale? Presumibilmente ci sono condizioni aggiuntive del modulo "completa quante più attività possibili", ma ciò significa che questo non è più un CSP, ma un problema di ottimizzazione dei vincoli .

Nel complesso, non sono sicuro che questo problema sia modellato al meglio come soddisfazione dei vincoli. Probabilmente è meglio utilizzare la logica dei vincoli solo per calcolare l'ordine delle attività da eseguire e utilizzare un metodo di pianificazione più generale per determinare la soluzione concreta.

    
risposta data 22.06.2018 - 06:39
fonte

Leggi altre domande sui tag