1
Zastosowanie Matlaba – programowanie liniowe - studenci
Zastosowanie Matlaba –zadanie programowania liniowego ZPL.
Zadanie programowania liniowego:
Znajdź min funkcji , przy ograniczeniach: .
gdzie – macierze, – wektory.
Wykorzystujemy funkcję linprog.
Składnia
x = linprog(c,A,b)
x = linprog(c,A,b,Aeq,beq)
x = linprog(c,A,b,Aeq,beq,lb,ub)
Funkcjia linprog rozwiązuje zagadnienie programowania liniowego (ZPL).x = linprog(c,A,b) – rozwiązuje zdania: , z ograniczeniami typu .
x = linprog(c,A,b,Aeq,beq) – rozwiązuje powyższe zadanie z dodatkowymi ograniczeniami równościowymi: . Jeśli nie występują ograniczenia nierównościowe wstawiamy A=[] oraz b=[] .
x = linprog(c,A,b,Aeq,beq,lb,ub) – pozwala określić zakresy dopuszczalnych wartości dla zmiennych decyzyjnych x, wtedy rozwiązanie spełnia warunek
. Jeśli nie występują ograniczenia równościowe wstawiamy Aeq=[] oraz beq=[] .
[x,z] = linprog(...) – zwraca wartość funkcji celu dla uzyskanego rozwiązania
Zastosowanie programu Matlab
Zad.1. Wyznacz wartość funkcji à max
przy ograniczeniach bilansowych: i brzegowych .Odp. Wykorzystamy do obliczeń funkcję linprog o składni:
[x, fval] = linprog(c, A, b, Aeq, beq, lb, ub)
w wyniku jej działania otrzymamy wektor x z rozwiązaniem oraz zysk pod zmienną fval.
Przygotujmy dane wejściowe do funkcji linprog:
1) wektor c – wektor współczynników funkcji celu: c = [ 1 3 2 ];
2) macierz A – macierz współczynników lewej strony nierówności:
A=[ 1 2 1; 1 1 1; 0 1 2 ];
3) wektor b – wektor liczb znajdujących się po prawej stronie: b = [ 5 , 4, 1];
4) Macierz Aeq i wektor beq dotyczy równości – w naszym wypadku pozostawiamy je puste: Aeq = []; beq = [];5) Wektor lb: Wektor ograniczeń dolnych rozwiązania. Każda zmienna rozwiązania ma być większa od 0: lb = [ 0 0 0 ];6) Wektor ub: Wektor ograniczeń górnych rozwiązania. Nie nakładamy ograniczeń górnych na zmienne rozwiązania: ub = [] lub ub = [inf inf inf]; inf – nieskończenie duża liczba.
Wstawienie danych do funkcji linprog:
Zapis [x, fval] możemy zastąpić [x, z] , wtedy zapisujemy wywołanie w postaci:
[x, z] = linprog(–c, A, b, Aeq, beq, lb, ub)Ponieważ standardowo funkcja linprog liczy minimum funkcji celu, musimy wektor c wstawić ze znakiem minus – wówczas funkcja wyliczy minimum funkcji . Wynik z funkcji: x =[3.0000 , 1.0000, 0.0000] = – 6.0000 Wstawiliśmy znak minus przed wektor c dzięki czemu uzyskaliśmy minimum funkcji celu ale dlatego też uzyskaliśmy zysk ze znakiem minus. Licząc maximum funkcji celu czytamy wartość z pomijając minus: , zysk = 6.
Wygodnie jest wywołać funkcję następującą: [x, z]= linprog(–c, A, b, Aeq, beq, lb, ub)
amigo47