Этот пример показывает решение типичной линейной проблемы программирования. Проблема
Можно загрузить матрицы и векторы A
, Aeq
, b
, beq
, f
и нижние границы lb
в рабочую область MATLAB® с
load sc50b
Проблема в sc50b.mat
имеет 48 переменных, 30 неравенств и 20 равенств.
Используйте linprog
, чтобы решить проблему:
options = optimoptions(@linprog,'Algorithm','dual-simplex','Display','iter'); [x,fval,exitflag,output] = ... linprog(f,A,b,Aeq,beq,lb,[],options);
Поскольку итеративное отображение было установлено с помощью optimoptions
, отображенные результаты
LP preprocessing removed 2 inequalities, 16 equalities, 16 variables, and 26 non-zero elements. Iter Time Fval Primal Infeas Dual Infeas 0 0.001 0.000000e+00 0.000000e+00 1.305013e+00 8 0.001 -1.587073e+02 3.760622e+02 0.000000e+00 33 0.001 -7.000000e+01 0.000000e+00 0.000000e+00 Optimal solution found.
Значение exitflag
положительно, говоря вам, linprog
сходился. Можно также получить итоговое значение функции в fval
и количестве итераций в output.iterations
:
exitflag,fval,output exitflag = 1 fval = -70 output = struct with fields: iterations: 33 constrviolation: 3.1264e-13 message: 'Optimal solution found.' algorithm: 'dual-simplex' firstorderopt: 2.3082e-14