Podręcznik
1. Wprowadzenie.
Podstawowe informacje
Klasą zadań, dla których najwcześniej podano algorytm prosty i skuteczny (i w zasadzie do dzisiaj najlepszy) są zadania liniowe optymalizacji. Zajmiemy się teraz krótko tymi zadaniami.
Zapisując te zadania i przedstawiając ich podstawowe własności będziemy posługiwać się notacją wektorowo macierzową, w której duże litery, np. A, oznaczają macierze, małe litery np. b, to w zasadzie wektory kolumnowe, małe litery z indeksami, np. xi oraz litery greckie to liczby, a znak T oznacza transpozycję.
Określmy formalnie przedmiot rozważań tego modułu.
Funkcja oceny jest tu liniowa, a nie afiniczna, bo jest oczywiste, że dodanie do niej dowolnej liczby nie zmienia rozważań (zmienia wartość funkcji wyboru w punkcie minimalizującym, która jest oczywiście od tej liczby zależna, ale rozwiązaniem zadania jest punkt minimalizujący, który się nie zmienia!).
Wprowadzenie
Narysujmy zbiór dopuszczalny i wykres poziomicowy funkcji wyboru dla prostego zadania liniowego (zapiszemy go w trochę inny sposób niż dotychczas, aby oswoić się z różnymi wariantami zapisu stosowanymi w literaturze).
przy ograniczeniach (p.o.)

Z rysunku wynika, że ograniczenie (c) nie jest potrzebne, oraz że zbiór dopuszczalny jest wielokątem Linie poziomicowe funkcji liniowej to proste, zatem rozwiązanie leży w wierzchołku wielokąta (albo rozwiązań jest wiele i leżą na brzegu wielokąta, gdy poziomice są równoległe do stosownego ograniczenia).
Te wnioski można uogólnić na dowolne zadanie liniowe. Trzeba tylko wielokąt zastąpić wielościanem, a prostą – płaszczyzną. Zatem:

Wróćmy do naszego opowiadania o Algorytmie. Przyjmijmy, że przekazaliśmy mu powyższą wiedzę. Co Algorytm może wymyślić? Odpowiedź jest oczywista:
Musi znaleźć jakiś wierzchołek,
potem sprawdzić jego sąsiadów (dla minimalizacji, sprawdzić czy funkcja celu maleje),
wybrać najkorzystniejszy, i procedurę powtórzyć.

Na płaszczyźnie taki algorytm będzie działać, bo każdy wierzchołek ma tylko dwu sąsiadów, ale przy większej liczbie wymiarów będzie to bardzo powolne i nie wiadomo, czy algorytm się nie zapętli.
Pierwsze zadania optymalizacji, które obecnie zaliczamy do zadań liniowych sformułowano pod koniec lat trzydziestych XX w. (matematycy J. von Neumann z Princeton i L. Kantorowicz, wtedy z Leningradu). Różne zadania związane z optymalnym przydziałem zasobów sformułowano na potrzeby armii amerykańskiej w czasie drugiej wojny światowej. Wtedy też zaczęto intensywne prace nad opracowaniem metod pozwalających na znalezienie rozwiązań, jak wtedy zaczęto mówić, zadań programowania liniowego. W roku 1947 G.B. Dantzig opublikował swój algorytm znajdowania rozwiązania zadania liniowego optymalizacji. Nazwał go metodą SIMPLEX. W Polsce, nie bardzo wiadomo dlaczego, algorytm Dantziga nazywa się metodą sympleks, simpleksową, a nawet metodą sympleksów.
Nie będziemy szczegółowo prezentowali tego algorytmu, odsyłając Czytelnika do literatury (np. podręczników: A. Stachurski: Wprowadzenie do optymalizacji, Oficyna Wydawnicza PW 2009, rozdział 2, lub W. Findeisen, J. Szymanowski, A. Wierzbicki: Teoria i metody obliczeniowe optymalizacji, PWN 1977 (część I rozdział 4)). Przedstawimy tylko główną ideę jego działania.
Ponieważ w metodzie Simplex wykorzystuje się pojęcia i metody, które powstały dla rozwiązywania układu równań liniowych, pierwszą czynnością jaką trzeba wykonać jest przekształcenie otrzymanego zadania liniowego do tzw. postaci kanonicznej (standardowej). Zbiór dopuszczalny w postaci kanonicznej jest określony tylko przez ograniczenia równościowe i ograniczenia znaku.
oraz 
Jeżeli oznaczymy
a także przyjmiemy skrócony zapis
na ograniczenia znaku, to określenie zbioru dopuszczalnego zadania w postaci kanonicznej możemy zapisać następująco
Pokażemy teraz jak przejść z postaci ogólnej do kanonicznej.
- Nie w każdym zadaniu PLin konieczne jest ograniczenie znaku zmiennych. Ponieważ zmienne zadania w postaci kanonicznej muszą mieć ograniczony znak, to warunek ten spełnia się przez następujące podwojenie zmiennych:
jest „wolna” – nie ma ograniczenia znaku, a definicja zadania
PLin_K taką sytuację wyklucza. Wobec tego musimy dokonać jej
przekształcenia na różnicę dwu zmiennych nieujemnych. Wprowadźmy zatem
dwie zmienne
oraz
i dodajmy równanie 

Omówimy teraz podstawowe zasady konstrukcji algorytmu Simplex.















![[a_j^T w≤β_j∧w∈\mathbb{R}^q]⇔[a_j^T w+x_(q+j)=β_j∧x_(q+j)≥0]. [a_j^T w≤β_j∧w∈\mathbb{R}^q]⇔[a_j^T w+x_(q+j)=β_j∧x_(q+j)≥0].](https://esezam.okno.pw.edu.pl/filter/tex/pix.php/445c5c7e03d76fa8880072a1b306e525.gif)

![w^o=[w_1^o,w_2^o]^T=\mathrm{argmin}_{w∈D}(z^T x= [5\,⋮-7]\begin{bmatrix}w_1\\w_2 \end{bmatrix} w^o=[w_1^o,w_2^o]^T=\mathrm{argmin}_{w∈D}(z^T x= [5\,⋮-7]\begin{bmatrix}w_1\\w_2 \end{bmatrix}](https://esezam.okno.pw.edu.pl/filter/tex/pix.php/7bfed12afed985554518f373bcc07d97.gif)








![[0\,⋮\,0\,⋮-7\,⋮\,7\,⋮-5]\begin{bmatrix}w_3\\w_4\\w_5\\w_6\\w_7 \end{bmatrix} [0\,⋮\,0\,⋮-7\,⋮\,7\,⋮-5]\begin{bmatrix}w_3\\w_4\\w_5\\w_6\\w_7 \end{bmatrix}](https://esezam.okno.pw.edu.pl/filter/tex/pix.php/4c3dd44747bd466a78993b9369439c64.gif)

![x^o=[x_1^o,...,x_5^o]^T=\mathrm{argmin}_{x∈DK)}(c^T x= [0\,⋮\,0\,⋮\,-7\,⋮\,7\,⋮\,-5]\begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix} x^o=[x_1^o,...,x_5^o]^T=\mathrm{argmin}_{x∈DK)}(c^T x= [0\,⋮\,0\,⋮\,-7\,⋮\,7\,⋮\,-5]\begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix}](https://esezam.okno.pw.edu.pl/filter/tex/pix.php/7a5005b42ee70458fd848f32578340aa.gif)