Beruflich Dokumente
Kultur Dokumente
Abstract
Operations Research is a scientific method of decision making, being much in demand in recent
years and has as one of its main tools to study the Linear Programming. Linear Programming is a
mathematical formula that determines a fixed amount of resources that satisfy some demand so that
an objective function is optimized and still satisfy the other conditions pre-defined problem. Given
2
v. 1, n. 1, p. 02-39, jan./jul. 2015
the list of software available to address issues and topics of Operational Research, included
hundreds of names. However, most of these software is proprietary use, ie your code is not free (the
user has no access) and its use (full or partial) happens upon payment. These characteristics limit
their use in public education and/or research. This paper describes in detail the Simplex method
and how a function can be programmed in R language aimed at teaching and problem analysis and
optimization of Operational Research.
Keywords: Operational Research. Free Software. Linear Programming.
1. Introduo
A Pesquisa Operacional (PO) uma cincia que objetiva fornecer ferramentas quantitativas
ao processo de tomada de decises. constituda por um conjunto de disciplinas isoladas, tais como
Programao Linear, Teoria das Filas, Simulao, Programao Dinmica, Teoria dos Jogos, entre
outras.
No conjunto de disciplinas que constituda, tem-se a Programao Linear, que uma
tcnica de planejamento que vem se constituindo como uma das mais poderosas em quase todo
ramo da atividade humana. Seus benefcios so exatamente aqueles procurados por qualquer
empresa: diminuio dos custos e aumento dos lucros. A sobrevivncia de empresas dependente
da busca de vantagens competitivas em relao a suas concorrentes, para criarem atividades
diferenciadas com maior eficincia e menor custo.
Dentro da Programao Linear pode-se destacar o mtodo simplex, que uma tcnica
utilizada para se determinar, numericamente a soluo tima para um determinado modelo.
O uso de softwares para a resoluo de Problemas de Programao Linear indispensvel,
pois a maioria dos problemas podem apresentar funes de vrias variveis, o que tornaria quase
impossvel resolver tal problema com papel e caneta. Mas muitos desses softwares apresentam
cdigo fechado e deixam de apresentar uma soluo de forma didtica para o usurio.
Portanto o objetivo desse trabalho apresentar a construo da funo simplex no software
R que um software livre, sendo essa funo de carter didtico e analtico do mtodo simplex por
trazer todos os quadros passo a passou do mtodo auxiliando tal usurio a fim de conferir seus
clculos, e esta funo far parte de um pacote denominado PO.pt (Pesquisa Operacional em
portugus), destinado para a disciplina de Pesquisa Operacional a fim de atender as necessidades de
cursos de graduao que utilizam tal mtodo em suas disciplinas.
3
v. 1, n. 1, p. 02-39, jan./jul. 2015
Referencial Terico
O termo Pesquisa Operacional (PO) designa uma rea do conhecimento que consiste no
desenvolvimento de mtodos cientficos de sistemas complexos, com a finalidade de prever e
comparar estratgias ou decises alternativas, cujo objetivo dar suporte definio de polticas e
determinao de aes (CARDOSO, 2011).
Porm, outras definies de Pesquisa Operacional podem ser encontradas na literatura. Para
Ehrlich (1982), Pesquisa Operacional uma metodologia de estruturar processos aparentemente no
estruturados por meio da construo de modelos. Utiliza um conjunto de tcnicas quantitativas com
o intuito de resolver os aspectos matemticos dos modelos. J para Sacomano et al. (2004) a
aplicao do mtodo cientfico, por equipes interdisciplinares a problemas que dizem respeito ao
controle de sistemas organizados (homem-mquina), com a finalidade de obter as solues que
melhor satisfaam aos objetivos da organizao, como um todo.
Embora haja discordncias sobre sua definio, sua origem bem conhecida. Durante a
Segunda Guerra Mundial, um grupo de cientistas foi convocado na Inglaterra para estudar
problemas de estratgia e de ttica associados com a defesa do pas. O objetivo era decidir sobre a
utilizao mais eficaz de recursos militares limitados. A convocao deste grupo marcou a primeira
atividade formal de pesquisa operacional. Desenvolveram ento a ideia de criar modelos
matemticos, apoiados em dados e fatos, que lhes permitissem perceber os problemas em estudo,
simular e avaliar o resultado hipottico de estratgias bem como propor decises alternativas. Em
1941 a Inglaterra inaugura a Seo de Pesquisa Operacional do Comando da Fora Area de
Combate para trabalhar com problemas de operaes de guerra, manuteno e inspeo de avies,
melhoria da probabilidade de destruio de submarinos, controle de artilharia antiarea,
dimensionamento de comboios de frota, entre outros (CARDOSO, 2011).
Os resultados positivos conseguidos pela equipe de pesquisa operacional inglesa motivaram
os Estados Unidos a iniciarem atividades semelhantes. Apesar de ser creditada Inglaterra a origem
da Pesquisa Operacional, sua propagao deve-se principalmente equipe de cientistas liderada por
George B.Dantzig, dos Estados Unidos, convocada durante a Segunda Guerra Mundial.
Face ao seu carter multidisciplinar, atualmente as contribuies da PO (Pesquisa
Operacional) estende-se por praticamente todos os domnios da atividade humana. Os ramos mais
importantes desenvolvidos em PO so: Programao Matemtica, Programao Linear, Anlise
Estatstica, Programao No Linear, Teoria dos Jogos, Programao Dinmica, Teoria das Filas,
Programao Inteira, Simulao, Otimizao Global e Gesto de estoques.
4
v. 1, n. 1, p. 02-39, jan./jul. 2015
Segundo Gouveia (2005), nesse sentido a Pesquisa Operacional utilizada com ferramenta
para estudar operaes envolvidas nas atividades empresariais, com objetivo de oferecerem aos
gestores resultados quantitativos que auxiliem na tomada de decises a partir da criao de modelos
que permitem a simulao e avaliao de alternativas de ao que possam ser implantadas de modo
a alcanar vantagens competitivas.
Resumidamente, podemos dizer que o objetivo principal da PO determinar a programao
otimizada de atividades ou recursos, fornecendo um conjunto de procedimentos e mtodos
quantitativos para tratar de forma sistematizada problemas que envolvam a utilizao de recursos
escassos. Para apoiar a tomada de deciso, a PO busca a soluo de problemas que podem ser
representados por modelos matemticos (CARDOSO, 2011).
Segundo Lisboa (2002), o problema de programao linear (PPL) utilizado para otimizar
(maximizar ou minimizar) uma funo linear de variveis, chamada de funo objetivo, sujeita a
uma srie de equaes ou inequaes lineares, chamadas restries. A formulao do problema a
ser resolvido por programao linear segue alguns passos bsicos.
deve ser definido o objetivo bsico do problema, ou seja, a otimizao a ser alcanada.
Por exemplo, maximizao de lucros, minimizao de custos, de perdas, de tempo;
para que esta funo objetivo seja matematicamente especificada, devem ser definidas as
variveis de deciso envolvidas. Por exemplo, nmero de mquinas, a rea a ser explorada, as
classes de investimento disposio, etc. Normalmente, assume-se que todas estas variveis
possam assumir somente valores positivos;
estas variveis normalmente esto sujeitas a uma srie de restries, geralmente
representadas por inequaes. Por exemplo, quantidade de equipamento disponvel, tamanho da
rea a ser explorada, capacidade de um reservatrio, exigncias nutricionais para determinada dieta,
etc.
Todas essas expresses, entretanto, devem estar de acordo com a hiptese principal da
programao linear, ou seja, todas as relaes entre as variveis devem ser lineares. Isto implica
proporcionalidade das quantidades envolvidas.
5
v. 1, n. 1, p. 02-39, jan./jul. 2015
Maximizar (minimizar)
Sujeito a
so as restries,
Em que
so as restries do problema
da funo objetivo,
~ de = ou de
ou
j=1,...n so os coeficientes
Minimizar
Sujeito a
em que
em igualdades.
6
v. 1, n. 1, p. 02-39, jan./jul. 2015
se tornam
e o eixo vertical
, em que o
negatividade das variveis restringe a rea da regio de solues ao primeiro quadrante que se
encontra acima do eixo
e direita de
dessas duas metades satisfaz a desigualdade. Para determinar o lado correto, tome (0,0) como um
ponto de referncia. Se ele satisfizer a desigualdade, o lado no qual ele se encontra a meia-regio
vivel; caso contrrio, vivel o outro lado. A aplicao do procedimento do ponto de referncia a
todas as restries do modelo produz as restries. A regio de solues viveis do problema
representa a rea do primeiro quadrante na qual todas as restries so satisfeitas simultaneamente.
Considere o exemplo que apresenta o grfico do conjunto de solues viveis de um
determinado problema de maximizao.
7
v. 1, n. 1, p. 02-39, jan./jul. 2015
Maximizar
Sujeito a
Onde as restries (1), (2), (3), (4),(5) e (6) retas no grfico da Figura 1.
A regio vivel da Figura 1 delimitada pelos segmentos de reta que unem os pontos A, B,
C, D, E e F. Qualquer ponto dentro ou sobre o contorno do espao ABCDEF vivel. Como a
regio vivel ABCDEF consiste em um nmero infinito de pontos, precisa-se de um procedimento
sistemtico para identificar a soluo tima.
A determinao da soluo tima requer a identificar a direo na qual a funo objetivo do
problema aumenta (lembrando que um problema de maximizao). Um procedimento para
identifica a direo na qual a funo objetivo est aumentando est em encontrar a direo em que
aponta o vetor gradiente da funo objetivo, ou seja,
vetor a medida que ele aumenta. A soluo tima ocorre no ponto C, que o ponto na regio de
8
v. 1, n. 1, p. 02-39, jan./jul. 2015
solues alm do qual qualquer aumento adicional levar z para fora dos contornos ABCDEF,
como descrito na Figura 2.
Os valores de
com
Uma caracterstica importante da soluo de Problemas Lineares que ela sempre est
relacionada com um ponto extremo da regio de solues, O Teorema que afirma isso :
Teorema do Ponto Extremo: Se um problema de programao linear admitir soluo tima, ento
pelo menos um ponto extremo (vrtice) do conjunto de pontos viveis uma soluo tima do
problema.
Se por acaso, a funo objetivo for paralela a uma restrio. Por exemplo, se a funo
objetivo for
C ou no ponto extremo D. Na verdade, qualquer ponto sobre segmento de reta CD ser uma
alternativa tima.
Para problemas de minimizao, o procedimento para a resoluo de forma grfica funciona
semelhante ao anterior. Inicialmente, encontre a rea da regio vivel de acordo com as restries
do problema. No momento de encontrar o vetor gradiente da funo objetivo, como estamos em um
problema de minimizao, ento queremos o ponto onde vamos gerar um menor valor para a funo
9
v. 1, n. 1, p. 02-39, jan./jul. 2015
objetivo, ento basta traar o vetor gradiente no sentido negativo, levando-o no ponto (0,0), e logo
aps traar retas perpendiculares a esse vetor no sentido que ele decresce.
A soluo para o problema o ponto onde qualquer decrscimo a mais da funo objetivo
levar z para fora do contorno em destaque que a regio vivel para o nosso problema.
Observe o exemplo.
Minimizar
Sujeito a
De acordo com a figura 3, podemos ver que a soluo tima ocorre no ponto (470.59,
329.41), que o ponto na regio de solues alm do qual qualquer decrescimento adicional levar
z para fora do contorno em destaque que a regio vivel do nosso problema.
10
v. 1, n. 1, p. 02-39, jan./jul. 2015
Os valores de
com
Programming).
Entretanto, a maior parte destes softwares de uso proprietrio, ou seja, seu cdigo no
livre (o usurio no tem acesso) e sua utilizao (total ou parcial) acontece mediante pagamento.
Tais caractersticas limitam seu uso em instituies pblicas de ensino e/ou pesquisa.
Entre os citados anteriormente, um dos mais utilizados o Solver, que um software de uso
gratuito, quando se utiliza no modelo BrOffice, e pago quando se utiliza o Office. Porm quanto no
BrOffice tanto no Office, esses softwares apresentam uma caracterstica em comum de no ser de
cdigo livre, o que faz com os usurios no tenham a liberdade de aperfeioarem tais softwares.
O Solver do Excel apresenta a resoluo de problemas de programao linear como ilustrado
na Figura 4. O que se pode notar que a soluo para tal problema
. Estes so
os valores timos para o problema de maximizao com o valor da funo objetivo igual a 100.
11
v. 1, n. 1, p. 02-39, jan./jul. 2015
12
v. 1, n. 1, p. 02-39, jan./jul. 2015
e o
valor da funo objetivo igual 26,777. Ele tambm apresenta o nmero de iteraes necessrias
para solucionar o problema, que neste problema foram 2 iteraes.
Alm de um software matemtico e estatstico, o software R um ambiente de programao
baseado na linguagem S. Das principais vantagens de tal software, destacam-se as caractersticas de
ser livre, de cdigo aberto e totalmente gratuito (R DEVELOPMENT CORE TEAM, 2011). No
surpreendente, portanto, que o R seja um dos softwares estatsticos mais utilizados nos dias de hoje.
O software R conta com alguns pacotes que tratam tpicos da Pesquisa Operacional, a saber:
orloca - Operations Research LOCational Analysis models (PALACIN; MARQUEZ,
2014);
linprog - Linear Programming/Optimization (HENNINGSEN, 2012);
quadprog - Functions to solve Quadratic Programming Problems (WEINGESSEL,
2013);
BB - Nonlinear Equations and High-Dimensional Nonlinear Objective Function
(VARADHAN; GILBERT, 2009);
boot - Bootstrap Functions (CANTY; RIPLEY, 2013);
kernlab - Kernel Methods (KARATZOGLOU et al., 2004);
limSolve - Linear Inverse Models (SOETAERT; MEERSCHE; OEVELEN, 2009);
LowRankQP - Low Rank Quadratic Programming Problems (ORMEROD; WAND,
2012);
rcdd - Computational Geometry (GEYER; MEEDEN, 2014);
Rglpk - R/GNU Linear Programming Kit Interface (THEUSS; HORNIK, 2014), dentre
outros.
Dois pacotes dos citados anteriormente, os quais pode-se exemplificar, que resolvem
problemas de Programao Linear, so o linprog e o Rglpk.
Na Figura 6, apresentado um exemplo de um modelo de programao linear (P.L.)
resolvido pelo pacote linprog - Linear Programming/Optimization. O problema trata de bois e vacas
e encontrado no help da funo linprog no software R.
13
v. 1, n. 1, p. 02-39, jan./jul. 2015
Pode-se notar que a soluo para tal problema a quantidade de vacas igual a 44 e bois
iguais a 24, o que faz a funo objetivo obter um mximo de 93600. Esse pacote no R tambm nos
da o nmero de iteraes que foram necessrias para determinar tal soluo que no caso so 2. Este
pacote nos d uma soluo mais detalhada para a anlise, mas em relao ao ensino, ele no nos d
um detalhamento de todos os quadros da resoluo via mtodo simplex, como ensinado nas salas
de aula na disciplina de Pesquisa Operacional.
O Rglpk - R/GNU Linear Programming Kit Interface faz uma interface com o software
Excel, utilizando a macro Solver do Excel para fazer determinados clculos, o qual ilustrado na
figura 7, que no caso um problema de maximizao que est contido no help da funo, e esse
exemplo do tipo,
Minimizar
Sujeito a
14
v. 1, n. 1, p. 02-39, jan./jul. 2015
,o
que faz a funo objetivo obter um mximo de 76,666. O mesmo apresenta um status que no caso
determina se a soluo a mais tima possvel que se pode obter. Sendo igual a 0 significa que a
soluo a mais tima possvel que se pode obter. Vemos que a so dada pelo Rglpk mais simples,
mas no h um detalhamento dos quadros do mtodo simplex, o que o torna desaconselhado para o
ensino.
O termo Software Livre se refere aos softwares que so fornecidos aos seus usurios com a
liberdade de executar, estudar, modificar e repassar (com ou sem alteraes) sem que, para isso, os
usurios tenham que pedir permisso ao autor do programa.
Em geral, Software Livre se assemelha a domnio pblico, embora haja certas diferenas,
apesar de que Software de Domnio Pblico tambm Software Livre.
Atualmente os softwares livres esto sendo implantados em grande parte das empresas no
Brasil e tambm no mundo. Isso possvel por que a maioria de suas distribuies livre, ou seja,
gratuitas e por oferecer os mesmos desempenhos de um software normal do segmento. Especialistas
em segurana em GNU/Linux, afirma ser mais seguro usar software livre, pois possvel modificar
o sistema de acordo com as necessidades de cada um (FIGUEREDO et al., 2005 apud MARCELO,
2004).
15
v. 1, n. 1, p. 02-39, jan./jul. 2015
2.5 Software R
16
v. 1, n. 1, p. 02-39, jan./jul. 2015
podem ser acessadas pelo utilizador, entre outras. Alm dos procedimentos estatsticos ele permite
operaes matemticas, e manipulao de vetores e matrizes, bem como construo de grficos.
Apesar de existirem muitas facilidades de ajuda na comunidade de utilizadores do R, este
tipo de linguagem no tem suporte tcnico assegurado (CAMPOS; SOUZA, 2009).
No Brasil, existem vrios cursos que utilizam Pesquisa Operacional (PO) como uma
disciplina, dentre eles esto: Sistema de Informao, Engenharia de Produo, dentre outras
engenharias, Cincia da Computao, Administrao, Matemtica, dentre outros. Na Universidade
Federal de Alfenas (UNIFAL-MG), essa disciplina compe a dinmica apenas dos cursos de
Licenciatura em Matemtica, e Cincia da Computao.
Quando se fala em ensino de PO a ateno se volta, principalmente, para a modelagem,
soluo e anlise de problemas decisrios, sendo que um estudo de caso completo corresponde
realizao de experimentos numricos com modelos lgico-matemticos. Este experimento envolve
o uso de frmulas e tcnicas matemticas, que se no forem bem explicadas, corre o risco da no
compreenso dos alunos.
E essa modelagem permite que o aluno possa aprender passo a passo cada fase de
construo da resoluo de certo problema.
Segundo Dvalos (2002), o ensino de PO deve dar ao estudante uma grande viso de
modelagem, soluo e anlise de problemas decisrios a partir dos conhecimentos adquiridos nas
disciplinas dos cursos, tais como Clculo, Economia, Probabilidade e Estatstica, Linguagens de
Programao e aquelas que esto destinadas a dar a base terica e aprofundamento dos problemas e
sistemas tpicos, abordados no ensino.
O ensino usa a teoria onde o aluno torne-se construtor do prprio conhecimento, onde o
professor deixa de ser o centro irradiador do conhecimento, e o aluno passa a ser o centro de
construo desse conhecimento.
Segundo Pimentel et al. (2014), o ensino matemtico ldico cria um ambiente atraente,
servindo de estmulo para o desenvolvimento integral da criana, agindo como facilitador,
colaborando para trabalhar bloqueios que os alunos apresentam em relao a alguns contedos
matemticos.
No ensino de PO muito utilizado o apelo visual com quem esta aprendendo, pois
importante o aluno saber o que est acontecendo em tal problema graficamente. Para problemas de
17
v. 1, n. 1, p. 02-39, jan./jul. 2015
Metodologia
O presente trabalho faz parte de um projeto maior que um pacote no software R para o
ensino de Pesquisa Operacional, que abordar os principais tpicos da ementa da disciplina que so:
O Mtodo Simplex, Programao Inteira, Anlise de Sensibilidade e Problemas de Transporte.
O projeto maior contou com trs Iniciaes Cientficas, um Trabalho de Concluso de
Curso, e um Programa de Iniciao Cientfica Junior.
Particularmente, o presente trabalho trata do desenvolvimento da funo simplex, a qual
apresenta importante ramo da disciplina de Pesquisa Operacional, pois em quase todos os outros
tpicos da disciplina utilizam o mtodo para solucionar problemas.
O mtodo utilizado descrito a seguir, sendo dividido em duas etapas: (3.1) Problemas na
forma padro: que contm apenas restries do tipo " "; (3.2) Problemas que no esto na forma
padro, que contm restries do tipo " " ou "=".
O Simplex pode ser entendido como um algoritmo cuja finalidade gerar solues bsicas
viveis cada vez melhores (BREGALDA et al., 1988). Em vez de enumerar todas as solues
bsicas do PPL, o mtodo Simplex investiga, de forma iterativa, somente algumas dessas solues,
potenciais candidatas soluo tima (TAHA, 2008).
De acordo com Cardoso (2011), o mtodo Simplex um procedimento algbrico que
fornece a soluo exata de qualquer PPL em um nmero finito de iteraes. O mtodo composto
por critrios especficos para escolha da soluo que melhorem o desempenho do modelo e de um
teste de otimalidade. tambm capaz de indicar se o problema tem soluo ilimitada, se no tem
18
v. 1, n. 1, p. 02-39, jan./jul. 2015
O algoritmo Simplex
, o mtodo
Fase I:
Determine inicialmente uma partio bsica factvel
bsicos e no-bsicos:
de vetores de ndices
19
v. 1, n. 1, p. 02-39, jan./jul. 2015
A varivel
sai da base.
coluna de
pela
coluna de
Nova matriz bsica:
Nova matriz no bsica:
Retorne ao Passo 1.
20
v. 1, n. 1, p. 02-39, jan./jul. 2015
problema considerado de minimizao. Ele ento faz uma mudana de vrtice na direo que mais
diminua a funo objetivo e verifica se este novo vrtice timo.
O processo termina quando estando num ponto extremo, todos os outros pontos extremos
adjacentes fornecem valores maiores para a funo objetivo.
Portanto, a troca de vrtice, faz uma varivel no bsica crescer (assumir valor positivo) ao
mesmo tempo em que zera uma varivel bsica (para possibilitar a troca) conservando a
factibilidade do Problema de Programao Linear.
Para isso, escolhe-se uma varivel, cujo custo relativo mais negativo (no regra geral),
para entrar na base, e as trocas de vrtices so feitas at que no exista mais nenhum custo relativo
negativo.
A varivel que sair da base aquela que ao se anular garante que as demais continuem
maiores ou iguais a zero, quando se aumenta o valor da varivel que entra na base (respeitando a
factibilidade).
O Mtodo Simplex compreender, portanto, os seguintes passos:
Empate na entrada
Quando houver empate na escolha da varivel que entra na base, deve-se tomar a deciso
arbitrariamente. A nica implicao envolvida que pode-se escolher um caminho mais longo ou
mais curto para se chegar soluo tima.
Empate na sada
Poder ocorrer que durante a escolha de uma varivel para sair da base, ter empate, isto ,
duas ou mais variveis se anulam com o crescimento da varivel que est entrando na base. Neste
21
v. 1, n. 1, p. 02-39, jan./jul. 2015
caso ocorre o que chama-se de degenerao (tem-se uma soluo bsica factvel degenerada). A
escolha tambm arbitrria (uma das variveis bsicas assume valor zero).
Tem-se ento, que a mesma soluo obtida atravs de bases diferentes. Isso ocorre devido
hiper determinao de pontos extremos.
possvel obtermos uma submatriz (identidade) com o auxilio das variveis de folga, e assim a
soluo inicial bvia.
Porm, quando no se tem uma soluo inicial bvia, ou seja, no consegue-se
uma submatriz base (identidade) assim necessrio um procedimento para desenvolv-la. Isto
ocorre quando o problema de Programao Linear tiver restries de "=" (igualdade) e ou restries
do tipo
(maior ou igual).
Exemplo:
Maximizar
Sujeito a
Minimizar
Sujeito a
Portanto, no tem soluo inicial bvia. Como obter a soluo inicial? Para resolv-lo
utiliza-se um procedimento chamado Fase 1 do Mtodo Simplex, que consiste em explorar um
problema auxiliar, equivalente ao PPL inicial, com regio factvel ampliada.
22
v. 1, n. 1, p. 02-39, jan./jul. 2015
No exemplo anterior:
Minimizar
Sujeito a
Obtm
uma
soluo
inicial
bvia
fazendo-se
com
a)
b)
a)
Se
ento
Se
ento
23
v. 1, n. 1, p. 02-39, jan./jul. 2015
b)
Se
ento
Se
ento
O Mtodo Simplex duas fases resolve o problema de programao linear relaxado (ou
auxiliar) at zerar as variveis artificiais (Fase 1), obtendo assim uma soluo factvel para o
problema de Programao Linear inicial, podendo ser a soluo tima caso no exista custo relativo
negativo (Fase 2).
Observaes:
1) O Problema de Programao Linear inicial tem soluo factvel se as variveis artificiais se
anularem.
sujeito a
(1)
sujeito a
(2)
Problema de Programao Linear inicial tem soluo tima se, e somente se,
De (1) tem-se
24
v. 1, n. 1, p. 02-39, jan./jul. 2015
De (2) tem-se
Ento:
4) Se atingirmos a soluo tima com as variveis artificiais diferentes de zero, portanto com o
valor da funo objetivo artificial diferente de zero, o problema original um problema
invivel.
A funo objetivo artificial formada pela soma das variveis artificiais, ou seja:
com
Resultados e discusso
25
v. 1, n. 1, p. 02-39, jan./jul. 2015
Caso o usurio no insera nenhuma destas opes o cdigo imprimir como default a
saida=3.
Dessa forma, o usurio roda a funo simplex da seguinte maneira: simplex(ob, cr, r,
direcao, max, saida), para a visualizao da resoluo de um problema de programao linear.
Para apresentao e visualizao da utilizao da funo simplex, vamos ilustrar um
exemplo inicialmente de problema de maximizao que contenha somente restries do tipo " ".
O cdigo se inicia com a criao de uma funo auxiliar, capaz de criar a matriz identidade
de ordem n. Tal matriz ser necessria mais adiante, no programa. O cdigo dessa funo pode ser
visto nas linhas de 1 a 5 do Apndice.
A partir destes dados o R percorrer o cdigo da funo simplex nas linhas 1 a 17, e nas
linhas 7 a 12 verifica se h alguma restrio negativa (linha 7), se isso ocorrer na inequao, a
desigualdade mudar se for " " passa a ser " " (linhas 8 e 9) e vice-versa, assim os coeficientes da
restrio e a restrio so multiplicados por menos um (linhas 10 e 11), resumindo as equaes e/ou
inequaes so multiplicadas por menos um. Esse caso foi verificado atravs de um problema
testado durante a segunda parte da programao, problemas de minimizao, em que feito este
processo. Desta forma foi orientado pela co-orientadora Andrea Cardoso em que todos os casos de
restrio negativa a equao/inequao devem ser transformadas.
Aps esta verificao, na parte verificando a dimenso da matriz de restries, o cdigo
ir criar a matriz para o quadro inicial, em que o nmero de restries (nr) ser a dimenso das
linhas da matriz e o nmero de variveis (nv) a dimenso das colunas atravs dos coeficientes de
restrio (cr) informado pelo usurio (linhas 13 e 14).
Nas linhas de 15 a 20 feita a contagem de sinais "=", " " e " " para determinar quantas
variveis de folga, de excesso e artificiais sero necessrias.
26
v. 1, n. 1, p. 02-39, jan./jul. 2015
Por ser um problema de maximizao com restries de " " a funo simplex ir percorrer
o cdigo a partir linha 58 onde verificado se as direes informadas esto de acordo com um
problema de maximizao, se ao verificar o vetor direo o nmero de = (ni) e o nmero de
(mi) forem iguais zero, ou seja, no constar nenhuma dessas restries nesse vetor, confirma que
um problema de maximizao e percorre somente esta parte do cdigo.
A partir da linha 24 feito um quadro inicial com as informaes dadas pelos usurios,
sendo elas: a linha da funo objetivo (ob) j transformada, as linhas dos coeficientes das restries
(cr) e coluna das restries (r), j contendo as variveis de folga.
Para a construo deste quadro requerida a funo auxiliar identidade (Id), para criar a
matriz identidade de acordo com o nmero de restries. Cada parte do quadro foi colado
juntamente com a matriz identidade e com um vetor numeric de zeros de acordo com o nmero de
restries, como ilustrado na Figura 10.
Figura 10: Quadro inicial com todos os dados inseridos pelo usurio
Fonte: Os autores
A partir deste quadro, feita uma lista, pois no software o comando lista oferece uma
estrutura em que h possibilidade de agrupar dados diferentes (numrico, matrix, vetor, caractere,
etc). Logo, ao inserir dados como a funo objetivo que um vetor, os coeficientes das restries
como matrizes e as restries como vetor, foram agrupados juntamente com um vetor de zeros e a
matriz identidade, e so colocados os nomes das linhas e colunas, permitindo tambm a iterao
entre os quadros a partir do algoritmo simplex.
Na lista foi atribudo
para variveis e b para restries (linhas 61 a 64), para colocar os ndices nos
nomes das variveis de folga e variveis ser feito de acordo com o nmero de restries (nr) e
nmero de variveis (nv) verificado pela dimenso da matriz (linhas 13 e 14), respectivamente.
27
v. 1, n. 1, p. 02-39, jan./jul. 2015
28
v. 1, n. 1, p. 02-39, jan./jul. 2015
(2) a matriz identidade que so as variveis de folga e excesso, para os casos " " e " ",
respectivamente;
(3) a matriz identidade das variveis artificiais;
(4) vetor coluna das restries juntamente com o nmero zero;
(5) a linha da funo objetivo transformada;
(6) e (7) dois vetores linhas de repetio do nmero zero;
(8) e (9) a linha da funo objetivo artificial que so vetores de repetio do nmero zero de
acordo com o nmero de variveis, variveis de folga e excesso e um vetor linha de repetio do
nmero um de acordo com o nmero de variveis artificiais mais o nmero zero.
Figura 11: Esquema para montar o quadro inicial Mtodo duas fases
Fonte: Os autores
Para construir a matriz 1 do esquema foram criadas a partir da funo auxiliar mencionada
neste relatrio. Porm, neste caso precisaramos somente de uma frao desta matriz, logo nas
linhas 24 a 26 primeiramente criada uma matriz identidade de acordo com o nmero de restries,
em seguida fi percorre o vetor direo e se houver e cria a matriz de acordo com a quantidade e
sendo essa linha multiplicada por menos um novamente percorre o vetor direo e verifica se tem
=. Caso tenha essa matriz identidade ser particionada de acordo com o nmero de iguais que
tiver.
Aps a criao desta matriz nas linhas 27 a 31 ocorre o agrupamento das parties deste
quadro de acordo com as informaes passadas pelo usurio. Assim, feita uma lista desse
agrupamento, onde so colocados os nomes das variveis em questo, onde neste caso foi atribudo
para variveis artificiais. Observe a figura 12 para visualizao deste quadro
inicial.
29
v. 1, n. 1, p. 02-39, jan./jul. 2015
Figura 12: Quadro inicial com todos os dados inseridos pelo usurio
Fonte: Os autores
Figura 13: Zerando os coeficientes das variveis artificiais na linha da funo objetivo artificial (za)
Fonte: Os autores
30
v. 1, n. 1, p. 02-39, jan./jul. 2015
Para o escalonamento, verifica-se primeiramente a entrada e sada das variveis, a que sair
da base ser a que tiver o menor coeficiente negativo (linha 45). Em seguida, ser verificado o
minmo da diviso da coluna das restries pela coluna da varivel que dever entrar na base (linha
46) e assim definir qual sair da base.
Assim ocorre diviso pelo nmero piv das linhas (mesma maneira para o caso anterior) e o
escalonamento, escolhendo a linha pivotal (linha.esc) pelas demais linhas. Esse processo de
escalonamento da fase 1 dever ocorrer enquanto houver variveis artificiais na base (linha 42).
Assim o processo de sada e entrada da base ser feito analisando para a funo objetivo artificial.
Quando no houver variveis artificiais na base retirada a linha da funo objetivo
artificial e as colunas referentes s variveis artificiais. Isso verificado na linha 54.
Assim o processo de resoluo para este caso segue para a fase II, onde o cdigo percorre a
parte de resoluo de problemas com casos de " " (linhas 66 a 77), sem a necessidade de criar o
quadro inicial, somente feito o processo de iterao at a soluo tima. Na figura 14 o processo
descrito.
31
v. 1, n. 1, p. 02-39, jan./jul. 2015
O que ocorre na funo simplex para problemas de minimizao que a funo objetivo
transformada na linha 22, quando max=FALSE, a funo objetivo multiplicada por menos um e
assim torna-se um problema de maximizao, e na soluo final a soluo tima encontrada
multiplicada por menos um.
No processo de programao dos tipos de sada da soluo do problema (linhas 78 a 93), foi
criado a partir do ltimo quadro da iterao, onde feita uma matriz em que o vetor coluna do
quadro final contendo as restries (b) at a linha da funo objetivo. Para problemas de
minimizao, a soluo final (z) multiplicada por menos um (linha 81).
Logo, o cdigo verifica se h variveis de folga/excesso na base atravs da interseo entre
os nomes das variveis que esto na base com um vetor (q) que foi criado inicialmente para colocar
nomes nas variveis de folga/excesso (linha 21). Caso haja, elas so retiradas pois no fazem parte
da soluo final. Logo a soluo final ser somente as variveis (x) que esto na base. Em um
problema em que o nmero de variveis maior que o nmero de restries, h uma proteo em
que se as demais variveis que no esto na base fazem parte da soluo final e so iguais a zero.
Por fim, aps esta verificao a soluo final ordenao de todos as variveis (x) e a funo
objetivo.
32
v. 1, n. 1, p. 02-39, jan./jul. 2015
Ao testar exemplos para visualizao da funo simplex, foram detectados alguns problemas
na programao.
Nas linhas 25 e 26, ao criar a frao da matriz identidade foi identificado um erro ao
programar foi testado com um problema que tinha uma equao de restrio =. Ao testar
problemas que no tinham essa restrio, surgiu que, ao fazer a frao da matriz, ela deixava de ser
matriz e passava a ser vetor linha. Assim para construir o quadro inicial necessitava-se de ser
matriz, e ao executar esta parte da funo era identificado um erro lgico.
Portanto, na linha 25 foi programado que se no vetor direo tiver algum = ele dever
retirar de acordo com a quantidade, as colunas dessa matriz identidade, seno a matriz continuar da
mesma maneira, logo essa construo da frao da matriz (fi) passar a ser reconhecida como
matriz.
Nas linhas que identificam as variveis de sada e entrada (linhas 43 e 44), foi identificado
em um problema que havia empate na varivel de sada da base, isso ocorreu durante a
programao e a funo escolhia aleatoriamente, sem programar, mas devido ao surgimento desse
33
v. 1, n. 1, p. 02-39, jan./jul. 2015
problema foi necessrio programar para que se ocorrer empate, como a escolha arbitrria,
escolhesse a primeira varivel desse vetor.
Podemos destacar que a funo criada possui uma sada completa, informativa e totalmente
didtica ao usurio quando comparado a outros softwares como os citados no trabalho na seo "O
uso de softwares na Pesquisa Operacional". Pode-se notar que a funo simplex imprime todos os
quadros do mtodo simplex que o usurio teria se caso fosse feito com papel e caneta, o que auxilia
o mesmo no momento de resoluo de problemas de programao linear. Vale ressaltar que o
software Lindo tambm imprime todos os quadros.
Concluso
O Simplex o mtodo mais importante na Pesquisa Operacional, pois em toda ementa que
aborda a disciplina de Pesquisa Operacional, utiliza-se esse mtodo para resolver determinados
problemas.
A funo simplex vem de forma significativa auxiliar os alunos, j que uma funo
altamente didtica, onde os quadros do mtodo simplex so todos impressos, detalhando passo a
passo da resoluo do problema, o cdigo de tal funo aberto, possibilitando ao usurio
incorporar sugestes ou mesmo melhor-la. A funo simplex foi toda programada no software R,
que um software gratuito, e sempre nos retorna a resposta correta para os problemas,
independentes do nmero de variveis que contenha o problema, e alm do mais, os resultados
impressos ao usurio so em portugus.
A funo simplex apresentada foi finalizada com sucesso, sendo capaz de resolver
problemas de programao linear via mtodo simplex: problemas de minimizao e maximizao.
Por sua vez, o pacote PO.pt ( Pesquisa Operacional em portugus) que o projeto maior do qual a
funo simplex faz parte, conter outras funes que trataro da Anlise de sensibilidade,
Problemas de programao inteira e Problemas de transporte, que tero como base a funo
simplex. E futuramente o pacote PO.pt ser submetido ao CRAN do R.
6 Referncias
ARENALES, M.; ARMENTANO, V.; MORABITO, R.; YANASSE, H. Pesquisa operacional
para cursos de engenharia. Rio de Janeiro: Campus, 2007. 257 p.
BREGALDA, P. F.; OLIVEIRA, A. A. F. de; BORNSTEIN, C. T. Introduo Programao
Linear. 3 ed. Rio de Janeiro: Campus, 1988.
34
v. 1, n. 1, p. 02-39, jan./jul. 2015
CAMPOS, P.; SOUSA, R. Estatstica com R, Uma Iniciao para o Ensino Bsico e Secundrio.
2009. 40p. Disponvel em: <http://alea-estp.ine.pt/Html/statofic/html/dossier/doc/dossie14.pdf>.
Acesso em: 22 Jan. 2014.
CANTY, A.; RIPLEY, B. boot: Bootstrap R (S-Plus) Functions. v.1.3-9. 2013. Disponvel em:
<http://CRAN.R-project.org/package=boot>. Acesso em: 09 Nov. 2014.
CARDOSO, A. Fundamentos da Pesquisa Operacional. Alfenas: Universidade Federal de Alfenas,
2011. 102p. Disponvel em: <http://www.unifal-mg.edu.br/matematica/files/file/po.pdf>. Acesso
em: 04 Jan. 2014.
DVALOS, R. V. Uma abordagem do ensino de pesquisa operacional baseada no uso de recursos
computacionais. In: Anais do XXII Encontro Nacional de Engenharia da Produo. p.1-8. 2002.
Disponvel em: <http://www.abepro.org.br/biblioteca/ENEGEP2002_TR111_0240.pdf>. Acesso
em: 12 Jan. 2014.
EHRLICH, P. J. Pesquisa Operacional: curso introdutrio. So Paulo: Atlas, 1982.
FIGUEREDO, A. V. S.; SANTOS, D. D.; TOMIMORI, E. M.; SILVA, F. C.; MIRANDA, I. T. P.
Softwares Livres: Vantagens. Revista de Cincias Empresariais, v.2, n.1. jan./jun. 2005. Disponvel
em: <http://www.maringamanagement.com.br/novo/index.php/ojs/article/viewFile/37/20>. Acesso
em: 22 Out. 2014.
GOUVEIA, F. H. C. A Importncia da Formulao do Problema na Pesquisa Operacional em
Face do Processo Decisorial. Dezembro, 2004. Disponvel em:
<http://www.congressousp.fipecafi.org/artigos22005/359.pdf>. Acesso em: 10 Jan. 2014.
HENNINGSEN, A. Linear Programming / Optimization. v.0.9-2. Disponvel em: <http://CRAN.Rproject.org/package=linprog>. 2012. Acesso em 10 Nov. 2014.
IGNCIO, A. A. V.; FERREIRA FILHO, V. J. M. O uso de software de modelagem na soluo de
problemas de programao matemtica. Pesquisa Operacional, v. 24, n. 1, p. 197-210, 2004.
KARATZOGLOU, A.; SMOLA, A.; HORNIK, K.; ZEILEIS, A. An S4 Package for Kernel
Methods in R. Journal of Statistical Software, n.11, v.9, p.1-20. 2004. Disponvel em:
<http://www.jstatsoft.org/v11/i09/>. Acesso em: 09 Nov. 2014.
LISBOA, E. F. A. Pesquisa Operacional. Rio de Janeiro. 2002. Disponvel em:
<http://www.ericolisboa.eng.br/cursos/apostilas/po/po.pdf>. Acesso em: 04 Jan. 2014.
ORMEROD, J. T.; WAND, M. P. LowRankQP: Low Rank Quadratic Programming, v.1.0.2. 2012.
Disponvel em: <http://CRAN.R-project.org/package=LowRankQP>. Acesso em: 09 Nov. 2014.
PALACIN, F. F.; MARQUES, M. M. olorca: The package deals with Operations Research
LOCational Analysis model, v.4.2. 2014. Disponvel em: <http://CRAN.Rproject.org/package=orloca>. Acesso em 10 Nov. 2014.
PIMENTEL, A. E. S.; BORGES, A. V. M.; FREITAS, D. M. de; VIANA, D. S. M.; SIQUEIRA, H.
C. G. de; PEREIRA, M. A.; LAMOUNIER, V. G. Matemtica Ldica: aprender brincando.
35
v. 1, n. 1, p. 02-39, jan./jul. 2015
36
v. 1, n. 1, p. 02-39, jan./jul. 2015
7 Apndice
7.1 Cdigo da Funo Simplex
1.
2.
3.
4.
5.
Id<-function(n)
{
i<-rep(1,n)
diag(i)
}
6. simplex<-function(ob,
saida=3) {
cr,
r,
direcao=rep('<=',dim(cr)[1]),
max=TRUE,
37
v. 1, n. 1, p. 02-39, jan./jul. 2015
38. rownames(a[[1]])<-c(nome.linha,'z','za')
#Fase 1: Zerando as variaveis artificiais na funo objetivo artificial (za)
39. a[[2]]<-a[[1]]
40. for(i in (nv+nma+nmi+1):(dim(x)[2]-1)) {p=which(a[[1]][1:nr,i]==1)
41.
a[[2]][(nr+2),]<--a[[1]][p,] + a[[2]][(nr+2),]}
#Fase 1: Escalonando
42. j=2
43. p=paste('a',1:nart,sep='')
############ Enquanto houver var. artificial na base, faa ###########
44. while(length(intersect(rownames(a[[j]]),p))!=0) {
######################################################################
#Indentificando qual variavel entra e qual sai
45. var.entra=which.min(a[[j]][nr+2,(1:(dim(x)[2]-1))])
46. div=a[[j]][1:nr,dim(x)[2]]/a[[j]][1:nr,var.entra];
var.sai=which(div==min(div[div>=0])); var.sai<-var.sai[1]
#Escalonamento
47. a[[j+1]]=matrix(0,dim(x)[1],dim(x)[2])
48. colnames(a[[j+1]])<-colnames(a[[j]])
49. rownames(a[[j+1]])<-rownames(a[[j]])
50. rownames(a[[j+1]])[var.sai]<-colnames(a[[j]])[var.entra]
51. linha.esc<-a[[j]][var.sai,]/a[[j]][var.sai,var.entra]
52. for(i in 1:(nr+2)) a[[j+1]][i,]<--a[[j]][i,var.entra]*linha.esc + a[[j]][i,]
53. a[[j+1]][var.sai,]<-linha.esc
54. j=j+1
55.
}
#Removendo a linha e as colunas referentes as variaveis artificiais
56. a[[length(a)+1]]<-a[[length(a)]][-(nr+2),c(1:(nv+nma+nmi),ncol(x))]
#Fase 2: Processo normal de simplex, apenas com restricoes de maximo
57. }
####################################################
#Problemas que contem apenas restries do tipo <= #
####################################################
58. if(ni==0 && nmi==0) {
#Criando o quadro inicial
59. temp1<-rbind(cr,-ob)
60. temp2<-rbind(Id(nr),numeric(nr))
61. x<-cbind(temp1,temp2,c(r,0))
#Criando a lista
62. a<-list(x)
63. rownames(a[[1]])<-c(paste('s',1:nr,sep=""),'z')
64. xi<-paste('x',1:nv,sep="")
65. colnames(a[[1]])<-c(xi,paste('s',1:nr,sep=""),'b')
66.
}
#Iterando e aumentando a lista
67. j=length(a)
68. while(any(a[[j]][nr+1,-dim(a[[j]])[2]]<0)) {
#Indentificando qual variavel entra e qual sai
69. var.entra=which.min(a[[j]][nr+1,(1:(dim(a[[j]])[2]-1))])
38
v. 1, n. 1, p. 02-39, jan./jul. 2015
70. div=a[[j]][1:nr,dim(a[[j]])[2]]/a[[j]][1:nr,var.entra];var.sai=which(div
==min(div[div>=0]))
#Escalonamento
71. a[[j+1]]=matrix(0,dim(a[[j]])[1],dim(a[[j]])[2])
72. colnames(a[[j+1]])<-colnames(a[[j]])
73. rownames(a[[j+1]])<-rownames(a[[j]])
74. rownames(a[[j+1]])[var.sai]<-colnames(a[[j]])[var.entra]
75. linha.esc<-a[[j]][var.sai,]/a[[j]][var.sai,var.entra]
76. for(i
in
1:(nr+1))
a[[j+1]][i,]<--a[[j]][i,var.entra]*linha.esc
a[[j]][i,]
77. a[[j+1]][var.sai,]<-linha.esc
78. j=j+1
79.
}
Legenda:
Operadores lgicos
Funes nativas do software R
Nomes atribudos (strings).
Comentrios da programao, o R no entende como cdigo.
39
v. 1, n. 1, p. 02-39, jan./jul. 2015