Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: Programmazione lineare

  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    Programmazione lineare

    Questa è la mia ultima spiaggia non so più dove sbattere la testa.. Qui ci sono un paio che in matematica sono davvero bravi...

    Come si trasforma dalla forma generale alla forma canonica un benedetto problema di PL??? E poi, PERCHE' si drovebbre fare mai una cosa del genere?

    Allora inizio a scrivere "quello che ho capito" io... una tragedia:

    Portare un problema in forma standard mi pare di aver capito che vuol dire portarlo nella forma:

    Ax = b
    x >= 0

    dove

    "A" è la matrice dei coefficenti dei vincoli
    "x" è il vettore delle variabili (quelle da calcolare)
    "b" è il vettore delle costanti dei vincoli

    Andiamo per esempi che è l'unico modo in cui capisco le cose...

    min x_1 + 3 x_2 + 4 x_3

    x_1 + 3 x_2 + x_3 >= 5
    2 x_1 + 3 x_2 + x_3 = 6
    x_1, x_2, x_3 >= 0

    Intanto non ho capito se quel "min" va bene o se devo farlo diventare un "max"... alcuni testi dicono di si... altri no... mah!?!?!

    Ponendo il caso che non ci sia di bisogno, a quanto ho capito devo aggiungere della variabili di surplus (Ma PERCHE'?????)

    Non sto capendo NULLA.... Io lo risolverei così invece e non ridete :

    max -x_1 - 3 x_2 - 4 x_3

    x_1 + 3 x_2 + x_3 >= 5
    2 x_1 + 3 x_2 + x_3 = 6
    x_1, x_2, x_3 >= 0


    Il primo dei tre vincoli rimane uguale perchè è >= e non <= altrimenti avrei dovuto fare come per la F.O. (Giusto??? )

    Quindi credo che poi diventi (nella forma Ax = b)
    codice:
    |  1   2    1  |        | 5 |
    |              |  x  =  |   |
    |  2   3    1  |        | 6 |
    Finora è corretto??? O è tutto sbagliato come suppongo?

    Grazie

    P.S.:
    Se molti di voi si chiedono...
    perchè non cerco sui libri??? Sui libri ho trovato tante info e in tanti casi diverse... il risultato è quello che vedete su...

    perchè non chiedo al prof?? Frequento l'università a Messina, vivo a Roma e la prof. sa è diventata irraggiungibile nè per telefono nè per email...

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La forma standard si usa per poi applicare il metodo del simplesso per risolvere il problema.
    Devi usare il metodo del simplesso?

    Veniamo al dunque, la forma standard è con = per le equazioni dei vincoli, il min va bene.
    Il tuo esempio

    min x1 + 3 x2 + 4 x3

    x1 + 3 x2 + x3 >= 5
    2 x1 + 3 x2 + x3 = 6
    x1, x2, x3 >= 0

    diventa

    min x1 + 3 x2 + 4 x3

    x1 + 3 x2 + x3 - x4 = 5
    2 x1 + 3 x2 + x3 = 6
    x1, x2, x3, x4 >= 0

    dove x4 è una variabile di surplus che è la differenza non negativa tra il primo e il secondo membro del vincolo con la disuguaglianza.
    Non negativo perché è richiesto poi x4 >= 0.

    A questo punto il metodo del simplesso non è ancora applicabile, c'è bisogno della fase1 per sistemare ancora il problema.
    Non vado avanti perché non so se ti interessa o meno il metodo del simplesso.

  3. #3
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da Alhazred
    La forma standard si usa per poi applicare il metodo del simplesso per risolvere il problema.
    Devi usare il metodo del simplesso?

    Veniamo al dunque, la forma standard è con = per le equazioni dei vincoli, il min va bene.
    Il tuo esempio

    min x1 + 3 x2 + 4 x3

    x1 + 3 x2 + x3 >= 5
    2 x1 + 3 x2 + x3 = 6
    x1, x2, x3 >= 0

    diventa

    min x1 + 3 x2 + 4 x3

    x1 + 3 x2 + x3 - x4 = 5
    2 x1 + 3 x2 + x3 = 6
    x1, x2, x3, x4 >= 0

    dove x4 è una variabile di surplus che è la differenza non negativa tra il primo e il secondo membro del vincolo con la disuguaglianza.
    Non negativo perché è richiesto poi x4 >= 0.

    A questo punto il metodo del simplesso non è ancora applicabile, c'è bisogno della fase1 per sistemare ancora il problema.
    Non vado avanti perché non so se ti interessa o meno il metodo del simplesso.

    Ah perfetto... perfetto... no no... non c'è bisgno di andare avanti... faccio frullare un pò il cervello... se mi riblocco torno qui.... grazie mille...erano giorni che stavo bloccato qui... sei stato gentilissimo

    EDIT.: Si mi interessa il mitodo del simplesso

  4. #4
    non sapete quanto vi ammiri.....
    "ci vorrebbero anche più persone come quaestio (a reb verrà un brivido)" wallrider, 22/10/2012

    "Se hai una vita di merda facebook non può essere molto meglio...". kalosjo, 16/10/2012

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da quaestio
    non sapete quanto vi ammiri.....
    cioè... perchè sanno bene la matematica?

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Originariamente inviato da Il Pazzo
    cioè... perchè sanno bene la matematica?
    Forse per la disponibilità
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da Alhazred
    A questo punto il metodo del simplesso non è ancora applicabile, c'è bisogno della fase1 per sistemare ancora il problema.
    Non vado avanti perché non so se ti interessa o meno il metodo del simplesso.
    Vediamo la quantità di cavolate che posso sparare in un altro post... Dunque...

    Dal punto in cui era rimasto Alhazred continuo così:

    1. Mi creo il tableau
    codice:
              a1       a2       a3     a4     |    b
               1        3       1      -1     |    5
               2        3       1       0     |    6
              ________________________________|_______
      F.O.    -1       -3      -4       0     |    0
    Ecco... questo è il tableau iniziale.... L'ultima riga non è molto chiara... Ho invertito tutti i segni... ma al solito alcuni testi l'invertono, altri no... Forse i segni sono da invertire solo quando la funzione è da minimizzare????

    Ora devo trovare il pivot...
    La colonna del pivot è quella che contiene l'indicatore (ultima riga) negativo più grande in valore assoluto. Se non contiene valori negativi il tablea è quello finale.
    Secondo questa affermazione la colonna del pivot è "a3"...

    La riga del pivot è la riga con il quoziente non negativo b / a_x più piccolo.
    Dunque la riga dovrebbe essere l'ultima (o meglio... quella di mezzo)... Dunque il pivot vale 1...

    Ora dovrei avere 1 / pivot che nel mio caso è 1 / 1 = 1, e dividere tutti i valori dell'ultima riga (quella del pivot) per il risultato, cioè 1...
    Se fino a qui è giusto (e non è pura fantasia) , non capisco come andare avanti... vedo qui sui testi che dovrebbe cambiare la riga della F.O. ma non capisco secondo che criterio....

  8. #8
    Originariamente inviato da Il Pazzo
    cioè... perchè sanno bene la matematica?
    si
    ho fatto il classico e filosofia.
    "ci vorrebbero anche più persone come quaestio (a reb verrà un brivido)" wallrider, 22/10/2012

    "Se hai una vita di merda facebook non può essere molto meglio...". kalosjo, 16/10/2012

  9. #9
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da quaestio
    si
    ho fatto il classico e filosofia.
    e tu con un pò di filosofia non riesci a risolvere quella cosa che ho scritto su?

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Il metodo del tableau non lo conosco, io faccio con vettori e matrici.
    Spero di non aver sbagliato qualche conto:

    Allora, come detto c'è bisogno della Fase1 perché nelle equazioni dei vincoli non è ricavabile la matrice identità (tra i coefficienti delle variabili), quindi si introducono le variabili alfa, ne servono 2.
    codice:
    min alfa1 + alfa2
     x1 + 3x2 + x3 - x4 + alfa1         = 5
    2x1 + 3x2 + x3              + alfa2 = 6
    xi>=0 alfai>=0
    Ora la matrice identità è ricavabile dalle alfa

    Il problema sotto forma matriciale è
    codice:
              |alfa1|             |x1|
    min (1 1) |     | + (0 0 0 0) |x2|
              |alfa2|             |x3|
                                  |x4|
    
    |alfa1|   |1 3 1 -1| |x1|   |5|
    |     | + |        | |x2| = | |
    |alfa2|   |2 3 1  0| |x3|   |6|
                         |x4|
    Passami che queste sono matrici e vettori e non determinanti, le parentesi tonde non posso farle.
    Do un nome ai vettori e matrici importanti in modo che sia più facile identificarle:
    codice:
    - dalla Funzione min -
    il vettore dei coefficienti delle variabili in base
    Cb(T) = (1 1)
    
    il vettore dei coefficienti delle variabili fuori base
    Cn(T) = (0 0 0 0) è sempre nullo alla prima iterazione della fase1
    
    (T) = trasposto
    userò anche in seguito la stessa notazione per identificare matrici e vettori trasposti
    
    - dai vincoli -
    la matrice dei coefficienti delle variabili fuori base
    |1 3 1 -1|
    |        | = (B^-1)N
    |2 3 1  0|
    è questa alla prima iterazione solo perché si parte dalla matrice identità
    come matrice dei coefficienti in base (le alfa)
    Ora devo verificare il criterio di ottimalità, non so se tu fai allo stesso modo, ma io faccio con il vettore dei costi ridotti gamma(T)
    codice:
    gamma(T) = Cn(T) - Cb(T)(B^-1)N
    
                                |1 3 1 -1|
    gamma(T) = (0 0 0 0) - (1 1)|        | = - (3 6 2 -1) = (-3 -6 -2 1)
                                |2 3 1  0|
    Il criterio di ottimalità non è soddisfatto, ci sono coefficienti negativi.
    Il criterio di illimitatezza si può non verificare, durante la fase1 il problema, per costruzione, non può essere illimitato.

    Ora si calcola il pivot.
    h sarà l'indice della variabile entrante in base e k quello della variabile uscente.

    h è la posizione del coefficiente minimo in assoluto, non in valore assoluto.
    Il valore minimo è -6 che si trova in posizione 2, quindi h=2

    k è la posizione del minimo dei coefficienti del vettore dei termini noti divisi per i rispettivi coefficienti della colonna che entrerà in base, ovvero, in questo caso, la 2.
    codice:
    min {5/3 , 6/3} = 5/3
    dunque k=1

    Entra in base x2 esce alfa1

    I nuovi vettori sono
    codice:
    Cb(T) = (0 1)
    il primo coefficiente è ora stato sostituito dal secondo di Cn(T) (il Cn(T) precedente)
    
    Cn(T) = (0 1 0 0 0)
    il secondo coefficiente è stato sostituito dal primo di Cb(T) (il Cb(T) precedente)
    Ora bisogna calcolare la nuova (B^-1)N
    codice:
        |3 # 1 1 1 -1 # 5|
    M = |  #          #  |
        |3 # 2 0 1  0 # 6|
    questa è una matrice è formata da:
    - prima colonna -> è la colonna che esce da (B^-1)N del passo precedente (in questo caso la seconda)
    - matrice (B^-1)N del passo precedente al quale si è sostituita la colonna uscente con quella entrante
    - ultima colonna -> i termini noti dei vincoli
    i # sono solo per separare le varie parti della matrice

    I passi da fare ora sono questi:
    la prima colonna deve diventare la colonna della matrice identità corrispondente all'indice k, quindi (1 0)(T)
    per fare questo come prima cosa si divide la prima riga in modo da far diventare il 3 un 1, quindi divido per 3
    codice:
        |1 # 1/3 1/3 1/3 -1/3 # 5/3|
    M = |  #                  #    |
        |3 #  2   0   1    0  #  6 |
    ora il 3 della seconda riga deve diventare uno 0
    per fare questo si applica la riduzione di Gauss
    faccio seconda riga meno nuova prima riga moltiplicata per 3 (sembra stupido, ma è perché nella prima colonna c'erano numeri uguali)
    codice:
        |1 # 1/3 1/3 1/3 -1/3 # 5/3|
    M = |  #                  #    |
        |0 #  1   -1  0    1  #  1 |
    La prima colonna non è più importante
    il blocco centrale è la nuova (B^-1)N
    l'ultima colonna è il nuovo valore dei termini noti

    Bene, adesso abbiamo tutto per scrivere il problema che darà il via alla seconda iterazione della fase1
    codice:
             | x2  |            | x1  |
    min (0 1)|     | + (0 1 0 0)|alfa1|
             |alfa2|            | x3  |
                                | x4  |
    
    | x2  |   |1/3 1/3 1/3 -1/3|| x1  |   |5/3|
    |     | + |                ||alfa1| = |   |
    |alfa2|   | 1  -1   0    1 || x3  |   | 1 |
                                | x4  |
    xi>=0 alfai>=0

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 © 2024 vBulletin Solutions, Inc. All rights reserved.