Этот пример решает типичную задачу линейного программирования
Загрузите sc50b.mat
файл, который содержит матрицы и векторы A
, Aeq
B
, beq
F
, и нижние границы lb
.
load sc50b
Проблема имеет 48 переменных, 30 неравенств и 20 равенств.
disp(size(A))
30 48
disp(size(Aeq))
20 48
Установите опции использовать dual-simplex
алгоритм и итеративное отображение.
options = optimoptions(@linprog,'Algorithm','dual-simplex','Display','iter');
Проблема не имеет никакой верхней границы, таким образом, устанавливает ub
к []
.
ub = [];
Решите задачу путем вызова linprog
.
[x,fval,exitflag,output] = ...
linprog(f,A,b,Aeq,beq,lb,ub,options);
LP preprocessing removed 2 inequalities, 16 equalities, 16 variables, and 26 non-zero elements. Iter Time Fval Primal Infeas Dual Infeas 0 0.036 0.000000e+00 0.000000e+00 1.305013e+00 8 0.052 -1.587073e+02 3.760622e+02 0.000000e+00 33 0.053 -7.000000e+01 0.000000e+00 0.000000e+00 Optimal solution found.
Исследуйте выходной флаг, значение целевой функции в решении и количество итераций, используемых linprog
решать задачу.
exitflag,fval,output.iterations
exitflag = 1
fval = -70
ans = 33
Можно также найти значение целевой функции и количество итераций в итеративном отображении.