Problemă primară standard

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

O problemă în formă primară standard este o problemă matematică tipică teoriei programării liniare , o problemă în care vrem să maximizăm valoarea unei anumite funcții respectând în același timp constrângeri suplimentare exprimate sub formă de inegalități liniare.

Această schematizare pentru o problemă de optimizare este utilizată pe scară largă, deoarece există o versiune a algoritmului simplex care se aplică unei probleme de acest tip pentru a găsi o soluție optimă. Ansamblul spațiului soluțiilor posibile ale problemei ( domeniului ) se numește poliedru primar ( politop ), în timp ce funcția care este maximizată se numește „ funcție obiectivă ”.

Scrierea cu care este obișnuit să se reprezinte o problemă în format primar este

Care poate fi scris în formă scalară ca

(funcție obiectivă)
(constrângeri)

Prin urmare, problema primară standard este constituită de o anumită funcție care trebuie maximizată, funcția obiectivă și o serie de constrângeri (poliedrul primar); problema în ansamblu este indicată cu (P) , valoarea optimă a problemei (P) este indicată cu v (P) în timp ce P este simbolul asociat cu poliedrul primar.

Funcția obiectivă

Primul element important care este introdus atunci când vorbim despre probleme în formă primară este tocmai funcția obiectivă, adică o funcție care reprezintă modelul matematic al ceea ce vrem să maximizăm. În realitate, este posibilă transformarea unei cereri de maximizare în minimizare, pur și simplu prin amintirea conceptului că a căuta minimul unei funcții este ca și cum ai căuta opusul maximului opusului său, adică: si invers.

Deoarece avem de-a face cu probleme de programare liniară, este clar că funcția de mai sus trebuie să fie neapărat liniară, adică poate fi exprimată pur și simplu prin produse scalare între constante și variabile (de gradul I). De fapt, pentru a scrie funcția folosim notația cx , care este scrisă mai formal ca:

Acesta este produsul scalar al vectorului coloană al variabilelor x , de dimensiune și vectorul rând (apoi transpus) al coeficienților c (în general „costuri”) a funcției obiective a dimensiunii .

Numărul n , care apare de mai multe ori, se referă la numărul de variabile implicate în problemă, adică la dimensiunea spațiului soluției: de exemplu, dacă există două variabile atunci n va fi 2. În general spunem că n este dimensiunea vectorului variabil al problemei:

De exemplu, dacă luăm în considerare funcția obiectivă în 4 variabile

reprezentarea sa ca produs scalar va fi

Poliedrul primar

Setul de puncte (vectori) care sunt admisibile pentru problemă în format primar standard, adică cele care satisfac toate constrângerile de tip este nevoie, după cum am spus, de numele de poliedru primar sau politop primar.

După cum sa văzut deja pentru funcția obiectivă, scrierea completă a constrângerilor m , în n variabile, care formează poliedrul primar este

În scris A este o matrice , numită matrice tehnologică , care are dimensiune , unde m este numărul de constrângeri de inegalitate definite de problemă.

În mod similar cu ceea ce s-a spus pentru funcția obiectivă, forma în termeni de inegalități a constrângerilor problemei nu este foarte restrictivă: de fapt, permite, de asemenea, să traducă constrângeri de egalitate sau inegalitate în acest format, dar în direcția opusă. O constrângere liniară generică de fapt, poate fi redat cu două constrângeri de inegalitate:

În dreapta simbolului mai mic sau egal găsim vectorul b , este așa-numitul vector al termenilor cunoscuți , al dimensiunii , așa cum se poate observa și din produsul vector matrice.

Asociat cu conceptul de constrângere al problemei primare este și cel al variabilelor deșeurilor : în practică este un vector de numere care se obține făcând diferența între vectorul termenilor cunoscuți și cel obținut prin dezvoltarea produsului între matricea tehnologică. și variabile (care trebuie cunoscute).

În formă analitică, acest lucru este scris ca:

Unde cu ne referim la soluția cu privire la care vrem să cunoaștem diferențele.

Abaterile unei soluții sunt o metodă excelentă pentru a recunoaște dacă o soluție este fezabilă sau nu pentru poliedrul P : dacă o soluție generează abateri non-negative este admisibilă, în timp ce dacă chiar și o abatere este mai mică de 0 atunci acel punct nu aparține la poliedru. Prin urmare, se va spune că un punct al poliedrului primar este admisibil pentru problema atașată atunci când fiecare dintre ele este respectată prin substituirea componentelor sale în constrângeri, sau în mod similar atunci când abaterile asociate sunt întotdeauna pozitive sau nule.

Interpretare analitică

Analitic, un poliedru este definit ca , adică ca un set de soluții ale unui sistem de inegalități m liniare în n variabile.

Tratamentul analitic al poliedrelor este foarte util atunci când se iau în considerare problemele care au un număr mare de variabile, cum ar fi să nu permită localizarea constrângerilor în spațiul tridimensional.

Dacă, de exemplu, domeniul problemei noastre primare este dat de sistem

aceasta poate fi reprezentată în formă În felul următor:

Interpretarea geometrică

Geometric un poliedru primar este intersecția unui număr finit de jumătăți închise - spații (numite jumătăți de plan, cu n = 2), care totuși poate fi și mulțimea goală.

Această afirmație pare mai evidentă atunci când amintim că forma analitică ne spune că poliedrul este ansamblul soluțiilor unui sistem de inegalități m liniare în n variabile: de fapt, întrucât un semi-spațiu închis al poate fi descris algebric ca ansamblul soluțiilor unei inegalități liniare în n variabile, este clar că un poliedru, intersecția sa, va fi ansamblul soluțiilor unui sistem de inegalități liniare.

Un poliedru P poate fi limitat sau nelimitat, dar va fi întotdeauna convex , adică dacă conține două puncte, atunci conține tot segmentul care le are ca extreme. De fapt, dacă ne amintim că intersecția a două sau mai multe mulțimi convexe este o mulțime convexă, atunci deoarece jumătățile închise sunt mulțimi convexe la fel este și poliedrul.

Un poliedru care este, de asemenea, un con se numește con poliedric (con poliedric) și poate fi interpretat ca ansamblul soluțiilor unui sistem omogen de inegalități liniare.

Trebuie făcută o mică clarificare lingvistică: în matematică poliedrul este de fapt un obiect, o intersecție a jumătăților de spații (cu spațiu în 3 dimensiuni), aparținând spațiului real, adică cel tridimensional. În practică, poliedrul este o extensie a noțiunii de poligon din plan la spațiul obișnuit.

Pentru a fi precis, familia obiectelor matematice care au proprietățile descrise puțin mai devreme este aceea, așa cum am menționat deja, a politopilor ; în tratamentul următor, totuși, vom continua să folosim termenul de poliedru.

Vârfuri și direcții

Dacă ne gândim la un poligon, politop în 2 dimensiuni, putem vedea cu ușurință modul în care posedă unele elemente geometrice, cum ar fi marginile laterale și vârfurile : totuși, atunci când trebuie dată o definiție non-geometrică a vârfului unui poliedru , dificultate.

Presupunând că sunt cunoscute conceptele de set convex, combinație convexă și anvelopă convexă , putem defini un vârf al unui poliedru P ca un punct care nu poate fi exprimat ca o combinație convexă proprie altor puncte aparținând lui P.

În practică, un vârf al unui poliedru este un punct al acestuia care nu se află într-un segment care aparține poliedrului. Mulțimea vârfurilor unui poliedru P este notată cu

Conceptul de vârf va fi foarte important mai târziu, când ne vom ocupa de metodologiile pentru identificarea soluțiilor optime ale problemelor de programare liniară pentru probleme în formă primară standard.

Să vedem acum conceptele de direcție de recesiune și liniaritate, utile pentru a întocmi câteva prime caracteristici ale poliedrelor și vârfurilor.

O direcție de recesiune pentru un poliedru P este un vector d astfel încât

În practică, un vector d este o direcție de recesiune pentru un poliedru dacă conține toate jumătățile de direcție d care ies din punctele aparținând P.

Setul de direcții de recesiune a lui P este notat cu .

Este ușor de observat că un poliedru limitat nu are direcții de recesiune (diferite de zero).

Un alt concept foarte util în studiul poliedrelor este cel al direcției de liniaritate : o direcție de liniaritate pentru un poliedru P este un vector d astfel încât

.

Aceasta înseamnă că o direcție d este liniară pentru un poliedru dacă conține toate liniile de direcție d care trec prin puncte care îi aparțin: mulțimea tuturor direcțiilor de liniaritate a lui P este notată cu .

Acum , să vedem o teorema care justifică introducerea acestor două concepte: „Pentru fiecare poliedru P non-gol că avem "

În practică, teorema este echivalentă cu a spune că o condiție necesară și suficientă pentru ca un poliedru să aibă vârfuri este aceea că nu conține linii drepte.

Teorema lui Weyl

Să vedem acum o teoremă de programare liniară foarte importantă, cunoscută și sub numele de teorema reprezentării poliedrelor, care ne va permite să definim un poliedru prin conceptele de anvelopă conică și anvelopă convexă a două subseturi de puncte.

Oficial:

Este un poliedru primar

dacă P nu este gol

atunci există un subgrup finit de puncte ale lui P

și un set finit de direcții de recesiune

, posibil și gol, astfel încât

În practică, ceea ce face teorema este să „descarce” structura poliedrului într-o combinație finită de puncte aparținând a două mulțimi distincte.

Este necesar să acordați o atenție deosebită sumei definite între cele două mulțimi E și V : este de fapt o sumă directă, adică o sumă în sensul mulțimii, care este alcătuită din toate sumele posibile a două elemente, unul din V și unul din E. Deci grafic punctele poliedrului vor fi cele rezultate din toate sumele posibile dintre combinațiile convexe ale punctelor lui V și combinațiile conice ale elementelor lui E.

Există, de asemenea, o lemă foarte utilă pe vârfuri și poliedre care ne garantează că, dacă poliedrul P are vârfuri, toate și numai elementele unei mulțimi O , atunci . Cu alte cuvinte, lema ne garantează că dacă un poliedru cu vârfuri este descompus așa cum este garantat de teorema lui Weyl, atunci setul de pornire pentru combinațiile convexe este exact cel al vârfurilor.

Condiții de optimitate

Vom vedea acum o serie de teoreme, definiții și algoritmi care vor prezenta mai întâi caracteristicile soluțiilor optime ale unei probleme în format primar

și apoi vor lega conceptul de punct optim de poliedru, sugerând cum să procedăm la rezolvarea problemei de optimizare de mai sus.

Caracterizarea elementară a optimității

Prezentăm acum o teoremă fundamentală care ne prezintă câteva caracteristici fundamentale ale unei soluții optime a unei probleme de programare liniară în cazul primar:

Este dată o problemă în formatul primar standard

  • de sine atunci fiecare soluție optimă nu este internă poliedrului
  • de sine atunci problema are o singură soluție optimă sau are infinite
  • Soluțiile optime locale sunt, de asemenea, optime la nivel global
Demonstrație

Deoarece există trei teze, atunci trebuie să facem trei dovezi separate:

  • Dacă o soluție optimă ar fi internă poliedrului, atunci gradientul funcției obiective ar trebui să fie zero de teorema lui Fermat ; dar întrucât gradientul funcției este , c exact, atunci acest lucru este fals, cu excepția cazului în care c este 0.
  • Să încercăm să spunem că dacă există mai multe soluții optime, de exemplu 2, atunci există infinit. Să numim cele două soluții optice generice ale problemei .
    Deoarece poliedrul primar P este convex , prin însăși definiția sa de intersecție a jumătăților închise (convexe), atunci pentru definiția convexității luăm oricare două puncte aparținând acestui set convex, mulțimea conține tot segmentul care le unește.
    Scriem această condiție analitic pentru P și punctele sale .
    Acum scriem valorile pe care le asumă funcția obiectivă cx și trebuie să le asumăm, deoarece punctele aparțin poliedrului, pe punctele unuia dintre segmentele menționate mai sus și apoi dezvoltăm: .
    Fiind totuși Și două soluții optime, atunci funcția obiectivă pe ele trebuie să își asume aceleași valori, adică , egalitate pe care o exploatăm în expresia de mai sus:
    Prin urmare, am constatat că funcția obiectivă își asumă aceleași valori ca soluțiile optime, adică valori optime, pe toate punctele infinite ale segmentului analizat, pentru care există infinite soluții optime.
  • Raționăm în mod absurd : să presupunem că există un punct al poliedrului care este o soluție maximă locală, dar nu globală, și să-l numim z ; atunci, ca maxim local, dincolo de un anumit vecinătate va fi mai puțin de cel puțin un punct aparținând poliedrului, adică .
    Să luăm acum în considerare segmentul care unește cele două puncte de mai sus, pe care îl vom numi : întrucât poliedrul primar este întotdeauna convex și extremele segmentului considerat aparțin lui P , atunci , care este echivalent cu scrierea .
    În acest moment, studiem comportamentul funcției obiective de-a lungul tuturor punctelor acestui segment: .
    Anterior am procedat , deci îl putem folosi așa cum am scris înainte: .
    Expresia tocmai obținută ne spune că în fiecare punct al segmentului, cu excepția z , funcția obiectivă capătă o valoare mai mare decât în z , adică:
    Dar din această afirmație rezultă că în fiecare vecinătate a z de -a lungul unui anumit segment funcția obiectivă crește, deci z nu poate fi o soluție optimă locală: aceasta contrazice ipoteza și, prin urmare, deoarece am procedat în mod absurd, teza noastră este demonstrată.

Observații

Ceea ce tocmai a fost afirmat este una dintre cele mai importante teoreme ale programării liniare : permite, de fapt, să producă o serie de simplificări asupra studiului și să caute soluții optime ale unei probleme în formă primară standard.

Prima teză ne spune că, dacă funcția obiectivă nu este constantă, soluția optimă se află la frontiera poliedrului. De fapt, dacă funcția este constantă, gradientul c = 0. Este foarte util deoarece restricționează căutarea punctelor optime numai la marginile poliedrului, chiar dacă vom vedea mai târziu că o simplificare suplimentară poate fi efectuată în anumite condiții.

A doua teză este la fel de importantă, deși mai mult din punct de vedere conceptual decât practic: datorită acesteia putem spune întotdeauna care sunt toate soluțiile optime ale unei probleme primare. De fapt, suntem fie în cazul în care există o singură soluție, fie în cel în care există infinit, astfel încât orice cerere de a le găsi pe toate cade pe auz.

În cele din urmă, observăm a treia teză garantată de teorema elementară de caracterizare a optimității: dacă o soluție este un maxim local, atunci este și o soluție optimă globală. Aceasta înseamnă că, dacă găsim un punct al poliedrului care este mai mare decât toate punctele din vecinătatea sa din domeniul problemei, atunci nu este necesar să facem alte verificări, acel punct este excelent! Similar cu prima teză, această parte a teoremei este extrem de utilă pentru reducerea drastică a lungimii procedurii optime de căutare.

Teorema fundamentală a LP

Afirmație

Cea mai importantă teoremă pentru rezolvarea problemelor în formă primară standard, care ne oferă o bază teoretică solidă pentru a găsi o procedură de căutare rapidă și corectă pentru a optimiza o funcție este următoarea:

Este dată o problemă în formatul primar standard

de sine

  • are vârfuri

asa de

Există cel puțin un vârf optim.

Demonstrație

Pentru început, să luăm în considerare un punct generic , care, datorită teoremei lui Weyl , putem scrie prin conceptele de combinație conică și combinație convexă , adică

De asemenea, ne amintim că, prin definiție

Deoarece teza necesită o relație cu o soluție optimă a problemei LP, scriem funcția obiectivă a acesteia în punctul nostru generic:

Primul și al doilea pas au fost posibile datorită proprietății de liniaritate a produsului scalar și apoi datorită celui distributiv .

După ce am „descărcat” structura problemei într-o combinație finită de puncte, să analizăm exact această expresie.

Privind la toate produsele scalare (presupunând că există) prezente în însumări, înmulțite cu orice coeficienți non-negativi, mă pot gândi să găsesc al doilea, cei derivați din combinația conică, având un semn pozitiv, adică .

În acest moment m-aș putea gândi să găsesc și coeficientul corespunzător : dar având ca singură limită aceea de a fi non-negativ, îmi pot imagina atât de mare încât să trimit suma la valori infinit de mari, adică .

Acum observăm că însumarea nu poate fi trimis la valori foarte mari (negative), pentru a „compensa” celălalt: acest lucru se datorează faptului că coeficienții săi sunt limitați cu .

Această situație ne face să spunem că, dacă prima însumare este trimisă la valori mari, funcția obiectivă devine:

Totuși, acest lucru contrazice ipoteza .

Deci, singura modalitate de a „ieși” din această problemă este angajarea ; de fapt, așa cum am spus deja, ar fi suficient ca chiar și unul să fie pozitiv pentru a putea acționa foarte bine asupra rudei sale pentru a-și maximiza valoarea și a face funcția obiectivă să „stropească” la nesfârșit.

În acest moment mă întorc să observ teza pe care trebuie să o dovedim: întrucât încercăm să găsim o soluție optimă, încercăm să maximizăm funcția obiectivă pentru problemă

Așadar, trebuie să maximizăm ; a doua însumare este alcătuită din aditivi non-pozitivi, deoarece coeficienții sunt toți non-negativi prin definiție, iar produsele scalare sunt toate non-pozitive așa cum sa menționat anterior. Dacă maximizăm o sumă de termeni non-pozitivi, rezultatul este evident că devine nul, adică presupunem .

În lumina acestei operații scriem:

Următorul pas este să eliminați suma prin dezvoltarea acesteia: , dove ricordiamo che i k prodotti scalari sono numeri veri e propri.

Di questi k numeri prendiamo il maggiore, che chiamiamo , ovvero .

Quindi se sostituiamo questo prodotto scalare al posto di tutti gli altri k , sicuramente otterremo una maggiorazione della sommatoria, cioè

Adesso sviluppiamo la somma ricordando che :

Ma dal momento che è un numero preciso, costante, la sua massimizzazione è se stesso, cioè

Sfruttando quindi il fatto che questo valore era maggiore del valore in un generico punto della funzione obiettivo si può scrivere che .

Possiamo ora sfruttare un lemma associato al teorema di Weyl che ci garantiva che se il poliedro P ha vertici, tutti e soli gli elementi di un insieme O , allora V = O , cioè il sottoinsieme di punti di cui si cerca l' involucro convesso è quello che contiene i vertici. Alla luce di questo si deduce che ; da questo si trova infine: .

Abbiamo quindi scoperto che è uno dei vertici del poliedro primale.

Consideriamo adesso la funzione obiettivo: essa, in quanto funzione definita su un certo dominio, segue la regola per cui il valore che assume in un generico punto è sicuramente uguale o minore al massimo dei valori che può assumere, analiticamente ; questo, considerando che la nostra funzione cx è definita sul poliedro primale P significa che .

Questa proprietà vale anche per , che in quanto vertice appartiene al poliedro; quindi si ha che .

Per concludere è sufficiente mettera a sistema le due disuguglianze trovate: e . Appare chiaro come affinché esse valgano contemporaneamente deve risultare .

Abbiamo così provato la nostra tesi, esiste un vertice del poliedro che è soluzione ottima del problema primale standard.

Osservazioni

Un facile errore di interpretazione del teorema fondamentale della programmazione lineare è quello di considerare la tesi nel senso che tutti gli ottimi sono vertici: è bene ricordare come il teorema ci garantisca che uno dei vertici, anche se potrebbero essere due o più (anche tutti), è ottimo. Tra l'altro questa condizione è sufficiente per risolvere un problema primale, in quanto, ai fini della ricerca operativa non ci interessa trovare tutte le soluzioni ottime, ma una sola, e inoltre per il teorema di caratterizzazione elementare dell'ottimalità le soluzione ottime locali di (P) sono anche ottime globali.

L'importanza del teorema è notevole, ma bisogna prestare attenzione ai casi nei quali non si può applicare, in pratica quando almeno una delle ipotesi non è rispettata:

  • Il poliedro può essere vuoto, ovvero ci sono troppi vincoli , non in senso solo numerico, ma anche solo perché in teoria bastano due semispazi per generare un' intersezione vuota
  • Il problema può non assumere un valore ottimo, ovvero la funzione può divergere verso valori positivi e infiniti
  • Il poliedro potrebbe non avere vertici, quindi perché quest'ipotesi sia verificata, P non deve contenere rette . Si può facilmente vedere che anche se P non ha vertici non è possibile escludere l'esistenza di un valore ottimo (che in questo caso sarebbe eventualmente raggiunto sull'insieme dei punti appartenenti a una certa retta).

Basi e soluzioni di base

Il teorema fondamentale della programmazione lineare indica la strada da seguire per ottimizzare problemi in forma primale standard: analizzare i vertici, dato che nelle condizioni determinate dalle ipotesi del suddetto teorema almeno uno di essi è v(P) , cioè un ottimo.

Supponendo che il problema abbia ottimo finito, dominio non vuoto e almeno un vertice se si vuole scrivere un algoritmo che trovi una soluzione ottima è chiaro che per prima cosa è necessario avere a disposizione un procedimento per trovare, dato il poliedro P , i suoi vertici.

Geometricamente si potrebbe pensare che essi siano tutte le intersezioni tra i vincoli (semispazi chiusi) del problema, ma non è così, anche se in questo insieme ci sono anche i vertici: è necessario quindi introdurre il concetto di base .

Considerando un problema di programmazione lineare nella forma primale chiameremo base un insieme B di n indici di riga, , tale che la sottomatrice quadrata di lato n , ottenuta da A estraendo le righe con indici , sia invertibile , cioè .

La matrice prende il nome di matrice di base , gli sono detti indici di base mentre si indicherà con N l'insieme degli mn indici di riga ( indici non di base ) che non appartengono a B .

In pratica si prende un certo numero, n , di vincoli, e se ne fa l'intersezione costruendo la matrice con le righe corrispondenti agli indici: se la matrice così ottenuta è invertibile allora significa che i vincoli presi non erano paralleli, quindi che si intersecavano.

A questo punto si deve trovare la suddetta intersezione, e per farlo si calcola la soluzione del sistema di n equazioni in n incognite formato dalle righe di B ; il sistema produrrà una soluzione, che prenderà il nome di soluzione di base . Questo punto , ottenuto tramite un'intersezione di vincoli, è candidato a essere vertice: per controllare che lo sia veramente è necessario sostituire le coordinate del punto all'interno degli altri vincoli non utilizzati e vedere se esso risulta ammissibile per essi. Se il punto (la soluzione di base) risulta ammissibile per tutti i vincoli non di base allora il punto trovato prende il nome di soluzione di base ammissibile .

La procedura risulta facilmente intuibile pensando a un poliedro in due dimensioni: si prendono tutti i vincoli (rette) a due a due ( n =2) e si controlla, attraverso il determinante della relativa matrice , se si intersecano (se non sono rette parallele, quindi zero intersezioni, o coincidenti, con infiniti punti di intersezione); in caso affermativo si trova il punto, che è una soluzione di base. Per vedere se quest'ultima è anche ammissibile si guarda se rispetta gli altri vincoli, cioè se il punto appartiene al poligono corrispondente alla regione ammissibile.

La procedura descritta in precedenza permette di individuare tutti e soli i vertici del poliedro primale, infatti esiste un teorema che dice che condizione necessaria e sufficiente affinché un punto sia un vertice è che sia una soluzione di base ammissibile.

Per quanto riguarda i vertici esiste anche un'altra loro possibile classificazione: una soluzione di base (vertice) si dice degenere se soddisfa almeno un vincolo non di base con l'uguaglianza: gli altri vertici che non soddisfano tale proprietà vengono detti non degeneri . Ritornando all'esempio di poliedro in due dimensioni una soluzione di base degenere è un vertice individuato dall'intersezione di tre ( n +1) o più rette .

Ecco la procedura analitica per trovare il vertice corrispondente a una base data ( n indici) per un problema del tipo :

  1. Si costruisce da A la sottomatrice quadrata selezionando le n righe di B
  2. Si seleziona da b il vettore scegliendo le n righe di B
  3. Si suppone che
  4. Si calcola
  5. La soluzione di base è
  6. x si dice:
    • Ammissibile se
    • Non ammissibile se
  7. x si dice:
    • Degenere se
    • Non degenere se

Algebra della PL

Una volta trovati i vertici, per utilizzare il teorema fondamentale della programmazione lineare si deve vedere quali di essi sono soluzioni ottime del problema. Per fare questo serve un test di ottimalità, cioè un procedimento di verifica che, applicato a un vertice, dica se esso può essere considerato un ottimo del problema; fondamento teorico necessario per arrivare a questo punto è quello della teoria delle dualità.

La teoria della dualità

La dualità nella ricerca operativa può essere interpretata come una corrispondenza tra due problemi formalizzati in un modello di programmazione lineare . La forma di dualità più importante e più conosciuta è quella che associa due problemi di Programmazione Lineare ( dualità lineare ), ed è quella che serve per stabilire condizioni di ottimalità per problemi in forma primale standard; tuttavia esistono anche altri tipi di dualità: ad esempio, in presenza di problemi di programmazione quadratica si parla di dualità quadratica , mentre in presenza di problemi di Programmazione lineare intera si parla di dualità lagrangiana .

La coppia di problemi che studieremo è la seguente:

Problema primale standard
Problema duale standard
(funzione obiettivo)
(vincoli)

Quindi se consideriamo un problema di PL in formato primale standard possiamo associarvi un problema di PL in una forma duale standard; sfruttando i concetti di matrici e vettori possiamo scrivere questa corrispondenza così:

Ai fini della creazione di un test di ottimalità introduciamo solamente alcuni brevi elementi teorici a propositi del problema duale standard (rimandando la trattazione alla pagina apposita ):

  • mentre il problema in forma primale standard si scriveva con (P) , quello in forma duale standard si scrive (D)
  • il valore ottimo del duale è indicato con v(D)
  • il poliedro duale è definito come:
  • per minimizzare il problema duale si ricercano delle soluzioni di base (avendo una base B ),

che saranno quelle trovate risolvendo il sistema prendendo solo le variabili relative agli indici in base (e le altre nulle), o analogamente le componenti del vettore e

  • le soluzioni di base, relative a una base B , possono essere ammissibili, nel caso rispettino , prendendo il nome di vertici del poliedro duale
  • I vertici duali possono essere degeneri o no, nel caso rispettino o meno la condizione

Un'importante proprietà dei problemi duali lineari è che il duale del duale è il primale, cioè riconducendo il problema duale alla forma primale e applicando la corrispondenza di cui sopra si riotterrà una formulazione equivalente del problema primale.

Questo significa che l'operazione di associazione primale-duale è un' operazione involutoria , cioè se applicata a se stessa torna la situazione di base.

Ottimalità duale e primale

Grazie alle conoscenze acquisite in precedenza adesso si è in grado di formulare il procedimento che dice quali vertici del problema primale standard sono soluzioni ottime; esiste infatti un teorema che ci garantisce le condizioni sufficienti di ottimalità per soluzioni di base (non soli del problema primale ma anche di quello duale): date due soluzioni di base si ha che se esse sono ammissibili (sono vertici dei rispettivi poliedri ) rispettivamente per (P) e (D) allora sono ottime rispettivamente per (P) e (D) .

La dimostrazione di questo fondamentale teorema prevede la conoscenza di un importantissimo teorema della programmazione lineare , molto utile per costruire i fondamenti teorici dell'algoritmo del simplesso , il teorema degli scarti complementari .

Dimostrazione

Alla luce del teorema degli scarti complementari, che ci garantisce che se si hanno , ammissibili rispettivamente per (P) e (D), allora si ha che esse sono ottime se e solo se .

Quindi per dimostrare la tesi basta dimostrare che dati due vertici, primale e duale (associati), essi soddisfano sempre , e quindi sono ottime.

Prendiamo due generiche soluzioni di base ammissibili, ; sappiamo, per la struttura dei vertici duali, che perché le variabili corrispondenti agli indici non in base sono nulle. Sappiamo inoltre che il vettore di tali soluzioni è un vettore riga di dimensione .

Adesso consideriamo gli scarti della generica soluzione, ammissibile, del problema primale standard: essi saranno del tipo , cioè un vettore colonna, di dimensione , con gli scarti generati dai vincoli in base e da quelli non in base. Ma dal momento che sappiamo che gli scarti di base di una soluzione di base sono nulli (essendo il vertice di P ottenuto proprio dal sistema che annulla la matrice con le righe corrispondenti agli indici di base), allora il vettore degli scarti diventa .

A questo punto possiamo vedere se : operazione possibile dal momento che il vettore delle soluzioni del primale ha m componenti, n in base e le altre altri no, e analogamente gli scarti del primale sono uno per vincolo, m , e n di questi sono scarti di base.

Svolgiamo quindi il prodotto riga-colonna che ci interessa: . Abbiamo così dimostrato, per il teorema degli scarti complementari , la tesi.

Ora siamo in grado di formulare il procedimento che ci dice quali vertici siano soluzioni ottime, ovvero possiamo scrivere il cosiddetto test di ottimalità: dato un problema in forma primale (P) e l'associato problema duale (D) e dato un vertice si opera così:

  • Si trova la soluzione di base duale con la stessa base usata per x , soluzione che chiameremo y
  • Se y è una soluzione di base ammissibile allora x è ottima per il problema primale (e anche y per il duale)

Come si vede il procedimento semplifica moltissimo le operazioni da fare per massimizzare un problema in forma primale, ma è comunque assai lungo perché richiede, nel peggior caso, tante verifiche di ottimalità quanti sono i vertici, e nel caso medio (per problemi con moltissimi vincoli e variabili) un numero improponibile operativamente di passi.

Se allora ai fini pratici il test di ottimalità, pur essendo molto utile, necessita di conoscere in teoria tutti i vertici del poliedro in questione, o comunque una gran parte, e dal momento che nei problemi di produzione industriale vengono fuori moltissimi vincoli e moltissimi vertici, bisogna trovare un modo intelligente per procedere tra i vertici del poliedro, e questo sarà proprio l'algoritmo del simplesso primale , caso particolare del simplesso generico.

Voci correlate

Matematica Portale Matematica : accedi alle voci di Wikipedia che trattano di matematica