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.

Примеры

Пример 1

Мы преобразовываем симплексную таблицу доменного типа 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:

Пример 2

Мы запишем другой симплексный стандартный 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

Симплексная таблица доменного типа

Возвращаемые значения

Двумерная матрица, представляя данную симплексную таблицу 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.

Для просмотра документации необходимо авторизоваться на сайте