3.2 Algoritmo di Moore per la minimizzazione dei lavori in ritardo
Massimo numero pezzi in tempo Algoritmo di Moore J1 J2 J3 J4 Jn d1 d2 d3=d4 dn 1) Si scelgono gli indici in ordine EDD (non sempre è unico: es. J3 e J4 sopra)
J3 Jn J1 J2 J4 d1 d2 d3=d4 dn 1’) La sequenza ottenuta è la sequenza corrente S1 (la prima) ; si pone i=1 2) Si individua il primo lavoro in ritardo Jl(i) nella sequenza corrente, se non esiste: stop
J3 Jn J1 J2 J4 d1 d2 d3=d4 dn 3) Si individua il lavoro più lungo Jr(i) con r l(i), nella sequenza corrente Si 4) Si ottiene una nuova sequenza corrente Si+1 escludendo Jr(i) e si torna al passo 2), con i:= i+1
Traduzione logica dell’intuizione Moore costruisce una sequenza con il massimo numero di lavori terminati in tempo e con il minimo tempo totale di processamento Sn Moore e’ ottima. sK : = { i1… ik } indici di una generica sequenza dei primi k lavori Nk : = massimo numero di lavori in tempo, rispetto a tutte le possibili Sk IP d1 d2 … dn ( i lavori sono ordinati secondo EDD )
Sk di Moore e’ tale che: - il numero di lavori processati in tempo e’ pari ad Nk - il tempo di processamento totale e’ minimo Praticamente Moore trova l’ottimo per i primi k lavori Dimostriamo per INDUZIONE che Sn e’ ottima S1 e’ banalmente ottima. Sk assumiamola ottima. Sk+1 e’ ottima?
Sk+1 e’ ottima? Costruiamo la sequenza Sk+1 a partire da Sk - se jk+1 e’ processato in tempo ottengo ancora una sequenza ottima, in cui i lavori che arrivano in tempo sono ( Nk + 1 ). - se jk+1 non e’ processato in tempo, elimino il lavoro con tempo di processamento più lungo, fra gli ( Nk + 1 ). Ottengo una sequenza di k+1 lavori, di cui Nk+1 = Nk arrivano in tempo, con tempo di processamento totale minimo.
nT numero di pezzi che vanno rifiutati Algoritmo di Moore min nT S 1968 nT numero di pezzi che vanno rifiutati (T: Tardiness) Ipotesi di lavoro: S0 ottima Sempre: S0: A0 R0 ammessi o in anticipo rifiutati o in ritardo
Si può posticipare Jr(k) mantenendo l’ottimalità Sempre: S0: A0 R0 Infatti se Ja(1) ... ... Jr (k) Ja (z) Jr (1) ... Jr (l) S0: Si può posticipare Jr(k) mantenendo l’ottimalità
Infatti in A0: Lmax £ 0, inoltre: EDD S0 : A0 R0 scelti gli indici dei lavori secondo una qualsiasi S EDD i < j di dj Si può sempre riordinare A0 come la EDD scelta: h<k a(h) < a(k) Infatti in A0: Lmax £ 0, inoltre: EDD min Lmax S Il riordino può essere necessario solo se $ di = dj
Algoritmo di Moore Definizione di l(1): Jr(1) : max ph = pr(1) min nT S Definizione di l(1): S1: J1 Ja(1) Ja(2) Jr(1) Jl(1) Ja(z) Jl(i) Jn dl(1) Jr(1) : max ph = pr(1) h=1,l(1)
Definizione ricorsiva di Jr (k) , da k=2 k £ i Jr(k-1)-1 Jr(k) Jl(k) Ak: Jr(k-1)+1 dl(k) Jr (h) con h < k non ci sono in Ak Jl (k) ultimo lavoro in Ak; unico in ritardo Jr (k) Ak : max ph = pr (k) h: Jh Ak
m 1 := numero lavori di { J1 ....Jl(1) } = :A1 assenti in A0 Ja(1) Ja(2) Jl(1) Ja(z) presenti in A0 assente in A0 m 1 := numero lavori di { J1 ....Jl(1) } = :A1 assenti in A0 m 1 > 0 (almeno uno è assente, altrimenti Jl(1) sarebbe presente e in ritardo, cosa impossibile, per definizione di A0)
Algoritmo di Moore Jq(1) : max ph = pq (1) min nT S pq(1) £ pr(1) q(1) £ l(1) h=1,l(1) h ¹ a (·) £ l(1) pq(1) £ pr(1) Lavoro di peso massimo fra quelli in J1 ....Jl(1) assenti in A0 q(1) può coincidere con r(1)
Passo i-esimo: 1 < k £ i Definizione ricorsiva di l(k), iniziando da k=2: J1 Ja(1) Ja(2) Jr(k-1)-1 Jr(k-1)+1 Jl(k) Jn Sk: dl(k) Jr (h) con h < k, rifiutati al passo h, non ci sono in Sk Sk : sequenza corrente al passo k
Sn +1 (sequenza corrente) : J1 Ja(1) Jr(n)-1 Jr(n)+1 Jl(n) Jn Se l(n+1) non esiste Ultimo passo: i = n +1 Sn : J1 Ja(1) Jr(n)-1 Jr(n) Jr(n)+1 Jl(n) Jn pr(n) dl(n) dn Sn +1 (sequenza corrente) : pr(n) pr(n) J1 Ja(1) Jr(n)-1 Jr(n)+1 Jl(n) Jn dl(n) dn
mk : numero lavori in J1 ....Jl(k) assenti in A0 Jq(k) è un lavoro di peso massimo tra i mk in J1 … Jl(k) fuori da A0 , non già abbinati J1 ....Jl(k) A0 Jq(k)
Definizione ricorsiva di Jq(k) : J1 ....Jl(k) A0 Ï {Jq(1) ... Jq(k-1) } Bk Jq(k) => h £ l(k) Jq(k) => ÏA0 È {Jq(1) ... Jq(k-1)} Jq(k) : pq(k) = ph q(k) £ l(k) max h £ l(k) Jh Ï Bk abbinato a Jr(k)
Algoritmo di Moore Ipotesi: Tesi: min nT S Passo i-esimo: a) mi ³ i b) $ Jq(1) ... Jq(i) : pq(k) £ pr(k) Ipotesi: A) mi+1 ³ i +1 B) $ Jq(i+1) : pq (i+1) £ pr (i+1) Tesi:
A) mi+1 ³ i +1 B) $ Jq(i+1) : pq (i+1) £ pr (i+1) Tesi: Se la tesi è dimostrata, m1 ³ 1 mn ³ n dimostra che l’algoritmo dà un ottimo Mu con nu è il numero di lavori rifiutati nell’ipotetica ottima da giei uno a giei nu
Se mi >i mi+1 ³ mi ³ i +1 Se mi = i i Jq(1) ... Jq(i), abbinati a Jr (1) ... Jr(i) q (k) £ l (k) pq(k) £ pr(k) k = 1,…,i sono esattamente tutti i lavori assenti in A0 tra J1 ... Jl(i)
ritardati di ( å h pr (h) - å h pq (h)) Ja(1) Ja(2) Jr(i) Jl(i) Jl(i+1) Ja(z) J1 Si dl(i) dl(i+1) Ja(1) Ja(2) Jl(i) J1 Jl(i+1) Ja(z) Si+1 dl(i) dl(i+1) Ja(1) Ja(2) Jl(i) Jl(i+1) Ja(z) A0 I lavori da giei elle i in poi vengono anticipati di somma di pi qu di acca nell’ipotetica ottima e di somma di pi erre acca in esse i più uno ritardati di ( å h pr (h) - å h pq (h)) rispetto a Si+1 i i 1 1 mi = i
Jr (h) con h < k non ci sono in Ak Tesi B) $ Jq(i+1) : pq (i+1) £ pr (i+1) Jr (k-1)-1 Jr (k) Jl(k) Ak: Jr (k-1)+1 dl(k) Jr (h) con h < k non ci sono in Ak con l (i) < q(i+1) £ l (i+1) perché mi = i
$ Jr (h’) “nasconde” Jq(i+1) = Jr (h’) tempo di processo massimo dei lavori in A i+1 Jq(i+1) Î A i+1 pq(i+1) £ pr(i+1) Jq (i+1) Ï A i+1 $ Jr (h’) “nasconde” Jq(i+1) = Jr (h’) Jq(k) è un lavoro di peso massimo tra i mk in J1 ....Jl(k) fuori da A0 ,non già abbinati
pq(i+1) £ pq(h’) £ pr(h’) = pq(i+1) h’’’ < h’’ < h’ £ i A h’’’ Jr (h’’’) A h” Jr (h’’) Jq (h’) pq (h’) = A h’ pq(i+1) £ pq(h’) £ pr(h’) = pq(i+1) q(i+1) £ l(h’) A i+1 pq (i+1) Jq (i+1) Jr (h’) Jr (i+1) Jq(h”) Ï A i+1 Jq(h’) Ï A i+1 sono indicati solo i lavori rifiutati in Ak o assenti in A0 Jq (h) pq (h) = Jq (h’’) pq (h’’) = Sia h il valore per cui $ Jr =Jq(h) ($ h sempre,perché i Jq sono più dei Jr): allora Jq(h) Î A i+1 pq(i+1) = pq(h) £ pr(i+1)