linopt
::Transparent::convert
Преобразуйте данную таблицу в структуру, печатаемую на экране
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
linopt::Transparent::convert(tableau
)
linopt::Transparent::convert
преобразует tableau
в двумерную матрицу, которая соответствует экранной таблице. Можно теперь получить доступ к элементу в i-th строка и j-th столбец симплексной таблицы путем доступа к соответствующему элементу массива.
Внутренне данный tableau
из доменного типа linopt::Transparent
содержит большую больше информации, чем симплексная таблица, которая распечатана некоторыми функциями linopt
библиотека, например, linopt::Transparent::simplex
, и который отображается на экране. Кроме того, не возможно получить доступ к элементу в i-th строка и j-th столбец tableau
получить соответствующий элемент из симплексной таблицы, которая отображается на экране.
В то время как внутренняя структура tableau
не известен структура двумерной матрицы четко определена. Таким образом, это может легко использоваться в собственных процедурах. Смотрите Пример 2.
Мы преобразуем симплексную таблицу доменного типа linopt::Transparent
в двумерную матрицу:
k := [{x + y >= 2}, x, NonNegative]: t := linopt::Transparent(k): a := linopt::Transparent::convert(t): t, domtype(t); a, domtype(a)
delete a, k, t:
Мы запишем другой симплексный стандартный mysimplex
для решения линейной программы. Для этого мы задаем функциональный eigenpivot
для нахождения элемента центра данной симплексной таблицы. eigenpivot
принимает, что симплексная таблица дана как двумерная матрица.
Вот является процедура eigenpivot
, который не закодирован в каждых деталях, например, проверка ошибок не реализована полностью:
eigenpivot := proc(T: DOM_ARRAY) local i,j,m,n,k,l,mini; begin m := op(T,[0,2,2]): n := op(T,[0,3,2]): k := 0: l := 0: mini := unbesetzt: for j from 3 to n do if T[2,j] < 0 then l := j: break end_if: end_for: if l=0 then return(OPTIMAL) end_if: for i from 3 to m do if T[i,l] > 0 and (mini=unbesetzt or T[i,2]/T[i,l] < mini) then k := i: mini := T[k,2]/T[k,l] end_if end_for: if k=0 then return(UNBOUNDED) end_if: return(T[k,1],T[1,l]): end_proc:
Это - новый симплексный алгоритм mysimplex
который использует eigenpivot
и некоторая функция от linopt
библиотека:
mysimplex := proc(P) local T; begin T := linopt::Transparent(P): T := linopt::Transparent::phaseI_tableau(T): piv := eigenpivot(linopt::Transparent::convert(T)): while piv <> OPTIMAL and piv <> UNBOUNDED do T := linopt::Transparent::userstep(T,piv): piv := eigenpivot(linopt::Transparent::convert(T)) end_while: if piv = UNBOUNDED then error(" Phase I unbounded ?!?") end_if: if T[2,2] <> 0 then return(EMPTY) end_if: T := linopt::Transparent::clean_basis(T): T := linopt::Transparent::phaseII_tableau(T): piv := eigenpivot(linopt::Transparent::convert(T)): while piv <> OPTIMAL and piv <> UNBOUNDED do T := linopt::Transparent::userstep(T,piv): piv := eigenpivot(linopt::Transparent::convert(T)) end_while: if piv = OPTIMAL then return(linopt::Transparent::result(T)) else return(UNBOUNDED) end_if end_proc:
Мы теперь применяем mysimplex
к линейной программе:
k := [{2*x + 2*y >= 4, -2*x + 4*y >= -2, -2*x + y>= -8, -2*x + y <= -2, y <= 6}, -x - y]: k := append(k, NonNegative): mysimplex(k);
delete k, eigenpivot, mysimplex:
|
Симплексная таблица доменного типа |
Двумерная матрица, представляя данную симплексную таблицу tableau
.
Papadimitriou, Christos H; Steiglitz, Кеннет: комбинаторная оптимизация; алгоритмы и сложность. Prentice Hall, 1982.
Nemhauser, Джордж Л; Wolsey, Лоуренс А: целочисленная и комбинаторная оптимизация. Нью-Йорк, Вайли, 1988.
Салкин, Харви М; Mathur, Kamlesh: основы целочисленного программирования. Северная Голландия, 1989.
Нейман, Клаус; Morlock, Мартин: исследование операций. Мюнхен, Hanser, 1993.
Duerr, Уолтер; Kleibohm, Клаус: Исследование операций; Lineare Modelle und ihre Anwendungen. Мюнхен, Hanser, 1992.
Зуль, Уве Х: MOPS - математическая система оптимизации. Европейский журнал исследования операций 72 (1994) 312-322. Северная Голландия, 1994.
Зуль, Уве Х; Сзыманский, Ральф: обработка суперузла смешанных целочисленных моделей. Бостон, Kluwer академические издатели, 1994.