File: simplex.texi

package info (click to toggle)
maxima 5.21.1-2squeeze
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 94,928 kB
  • ctags: 43,849
  • sloc: lisp: 298,974; fortran: 14,666; perl: 14,325; tcl: 10,494; sh: 4,052; makefile: 2,975; ansic: 471; awk: 24; sed: 7
file content (143 lines) | stat: -rw-r--r-- 5,370 bytes parent folder | download | duplicates (4)
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