1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
@c /simplex.texi/1.2/Mon May 15 07:55:16 2006//
@menu
* Introdu@value{cedilha}@~ao a simplex::
* Defini@value{cedilha}@~oes para simplex::
@end menu
@node Introdu@value{cedilha}@~ao a simplex, Defini@value{cedilha}@~oes para simplex, simplex, simplex
@section Introdu@value{cedilha}@~ao a simplex
@code{simplex} @'e um pacote para optimiza@value{cedilha}@~ao linear usando o algoritmo simplex.
Exemplo:
@c ===beg===
@c load("simplex")$
@c minimize_sx(x+y, [3*x+2*y>2, x+4*y>3]);
@c ===end===
@example
(%i1) load("simplex")$
(%i2) minimize_sx(x+y, [3*x+2*y>2, x+4*y>3]);
9 7 1
(%o2) [--, [y = --, x = -]]
10 10 5
@end example
@node Defini@value{cedilha}@~oes para simplex, , Introdu@value{cedilha}@~ao a simplex, simplex
@section Defini@value{cedilha}@~oes para simplex
@defvr {Vari@'avel de op@value{cedilha}@~ao} epsilon_sx
Valor por omiss@~ao: @code{10^-8}
Epsilon usando para c@'alculos num@'ericos em @code{linear_program}.
Veja tamb@'em: @code{linear_program}.
@end defvr
@deffn {Fun@value{cedilha}@~ao} linear_program (@var{A}, @var{b}, @var{c})
@code{linear_program} @'e uma implementa@value{cedilha}@~ao do algoritmo simplex.
@code{linear_program(A, b, c)} calcula um vetor @var{x} para o qual @code{c.x} @'e o m@'{@dotless{i}}nimo
poss@'{@dotless{i}}vel entre vetores para os quais @code{A.x = b} e @code{x >= 0}. O argumento
@var{A} @'e uma matriz e os argumentos @var{b} e @var{c} s@~ao listas.
@code{linear_program} retorna uma lista contendo o vetor minimizado @var{x} e o
valor m@'{@dotless{i}}nimo @code{c.x}. Se o problema for n@~ao associado, @'e retornado "Problem not bounded!" e
se o problema for n@~ao vi@'avel, @'e retornado "Problem not feasible!".
Para usar essa fun@value{cedilha}@~ao primeiramente chame o pacote @code{simplex} com @code{load(simplex);}.
Exemplo:
@c ===beg===
@c A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
@c b: [1,1,6]$
@c c: [1,-2,0,0]$
@c linear_program(A, b, c);
@c ===end===
@example
(%i2) A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
(%i3) b: [1,1,6]$
(%i4) c: [1,-2,0,0]$
(%i5) linear_program(A, b, c);
13 19 3
(%o5) [[--, 4, --, 0], - -]
2 2 2
@end example
Veja tamb@'em: @code{minimize_sx}, @code{scale_sx}, e @code{epsilon_sx}.
@end deffn
@deffn {Fun@value{cedilha}@~ao} maximize_sx (@var{obj}, @var{cond}, [@var{pos}])
Maximiza a fun@value{cedilha}@~ao linear objetiva @var{obj} submetida a alguma restri@value{cedilha}@~ao linear
@var{cond}. Veja @code{minimize_sx} para uma descri@value{cedilha}@~ao detalhada de argumentos e valores de
retorno.
Veja tamb@'em: @code{minimize_sx}.
@end deffn
@deffn {Fun@value{cedilha}@~ao} minimize_sx (@var{obj}, @var{cond}, [@var{pos}])
Minimiza uma fun@value{cedilha}@~ao linear objetiva @var{obj} submetida a alguma restri@value{cedilha}@~ao
linear @var{cond}. @var{cond} @'e uma lista de equa@value{cedilha}@~oes lineares ou
desigualdades. Em desigualdades estritas @code{>} @'e substituido por @code{>=}
e @code{<} por @code{<=}. O argumento opcional @var{pos} @'e uma lista de
vari@'aveis de decis@~ao que s@~ao assumidas como sendo positivas.
Se o m@'{@dotless{i}}nimo existir, @code{minimize_sx} retorna uma lista que cont@'em
o menor valor da fun@value{cedilha}@~ao objetiva e uma lista de valores de vari@'aveis de
decis@~ao para os quais o m@'{@dotless{i}}nimo @'e alcan@value{cedilha}ado. Se o problema for n@~ao associado,
@code{minimize_sx} retorna "Problem not bounded!" e se o problema for
n@~ao vi@'avel, @'e retornado "Ploblem not feasible!".
As vari@'aveis de decis@~ao n@~ao s@~ao assumidas para serem n@~ao negativas por padr@~ao. Se todas
as vari@'aveis de dicis@~ao forem n@~ao negativas, escolha @code{nonegative_sx} para @code{true}.
Se somente algumas das vari@'aveis de decis@~ao forem positivas, coloque-as ent@~ao no argumento
opcional @var{pos} (note que isso @'e mais eficiente que adicionar
restri@value{cedilha}@~oes).
@code{minimize_sx} utiliza o algoritmo simplex que @'e implementado na fun@value{cedilha}@~ao
@code{linear_program} do Maxima.
Para usar essa fun@value{cedilha}@~ao primeiramente chame o pacote @code{simplex} com @code{load(simplex);}.
Exemplos:
@c ===beg===
@c minimize_sx(x+y, [3*x+y=0, x+2*y>2]);
@c minimize_sx(x+y, [3*x+y>0, x+2*y>2]), nonegative_sx=true;
@c minimize_sx(x+y, [3*x+y=0, x+2*y>2]), nonegative_sx=true;
@c minimize_sx(x+y, [3*x+y>0]);
@c ===end===
@example
(%i1) minimize_sx(x+y, [3*x+y=0, x+2*y>2]);
4 6 2
(%o1) [-, [y = -, x = - -]]
5 5 5
(%i2) minimize_sx(x+y, [3*x+y>0, x+2*y>2]), nonegative_sx=true;
(%o2) [1, [y = 1, x = 0]]
(%i3) minimize_sx(x+y, [3*x+y=0, x+2*y>2]), nonegative_sx=true;
(%o3) Problem not feasible!
(%i4) minimize_sx(x+y, [3*x+y>0]);
(%o4) Problem not bounded!
@end example
Veja tamb@'em: @code{maximize_sx}, @code{nonegative_sx}, @code{epsilon_sx}.
@end deffn
@defvr {Vari@'avel de op@value{cedilha}@~ao} nonegative_sx
Valor por omiss@~ao: @code{false}
Se @code{nonegative_sx} for verdadeiro (true) todas as vari@'aveis de decis@~ao para @code{minimize_sx}
e @code{maximize_sx} s@~ao assumidas para serem positivas.
Veja tamb@'em: @code{minimize_sx}.
@end defvr
|