Sie sind auf Seite 1von 38

A FUNO SIMPLEX PARA O SOFTWARE R: ensino e anlise

THE SIMPLEX FUNCTION FOR R SOFTWARE: teaching and analysis


Mateus Pimenta Siqueira Lima1; Cssia de Souza Santos; Eric Batista Ferreira3; Andrea
Cardoso4
1

Graduando em Matemtica Licenciatura, Instituto de Cincias Exatas, Universidade Federal de Alfenas


(Unifal-MG), mateuspimenta-2007@hotmail.com

Graduanda em Matemtica Licenciatura, Instituto de Cincias Exatas, Universidade Federal de Alfenas


(Unifal-MG), cassiaunifal@yahoo.com.br

Docente do programa de Ps-graduao em Estatstica Aplicada e Biometria, Instituto de Cincias Exatas,


Universidade Federal de Alfenas (Unifal-MG), eric.ferreira@unifal-mg.edu.br
4

Docente do curso de Matemtica, Instituto de Cincias Exatas, Universidade Federal de Alfenas


(Unifal-MG), eric.ferreira@unifal-mg.edu.br

Recebido em: 02/02/2015 - Aprovado em: 07/04/2015 - Disponibilizado em: 15/07/2015


Resumo
A Pesquisa Operacional um mtodo cientfico de tomada de deciso, sendo muito requisitada nos
ltimos anos e tem como uma de suas principais ferramentas o estudo da Programao Linear. A
Programao Linear uma formulao matemtica que determina um montante fixo de recursos
que satisfaa certa demanda de tal modo que uma funo-objetivo seja otimizada e ainda satisfaa
a outras condies pr-definidas pelo problema. Diante do rol de softwares disponveis para tratar
problemas e tpicos de Pesquisa Operacional, figuram centenas de nomes. Entretanto, a maior
parte destes softwares de uso proprietrio, ou seja, seu cdigo no livre e sua utilizao
acontece mediante pagamento. Tais caractersticas limitam seu uso em instituies pblicas de
ensino e/ou pesquisa. O presente trabalho descreve em detalhes o mtodo Simplex e como a funo
pode ser programada em linguagem R visando o ensino e anlise de problemas da Pesquisa
Operacional e otimizao.
Palavras chave: Pesquisa Operacional. Software Livre. Programao Linear.

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).

2.1 Programao Linear

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

O problema geral de programao linear pode ser definido por,

Maximizar (minimizar)
Sujeito a

so as restries,

Em que

so as restries do problema

da funo objetivo,

so os coeficientes das restries,

~ de = ou de

ou

j=1,...n so os coeficientes

k=1,...n so as variveis do problema, e

O desenvolvimento de um mtodo (ou algoritmo) que determine a soluo de um PPL torna


necessria a reduo do problema a uma forma tal que permita a aplicao direta deste algoritmo.
No caso de programao linear, o algoritmo mais utilizado o Simplex. Para que o Simplex seja
aplicado, fundamental reduzir o PPL sua forma padro, definida a seguir.
De acordo com Bregalda, Oliveira e Bornstein (1988), o modelo de um PPL encontra-se na
forma-padro quando ele formulado da seguinte maneira:

Minimizar
Sujeito a

em que

so chamadas variveis de folga, quando so utilizadas para

transformar restries do tipo

em igualdades; ou variveis de excesso quando so utilizadas para

transformar restries do tipo

em igualdades.

6
v. 1, n. 1, p. 02-39, jan./jul. 2015

Em geral quando o problema de programao linear se apresenta em apenas duas variveis,


embora seja raro, ele pode ser resolvido atravs da soluo grfica, que se trata de analisar as
restries utilizando a funo objetivo.

2.2 Resoluo Grfica de Problemas de Programao Linear

Quando um problema de programao linear dependente apenas de duas variveis, a


soluo para tal problema pode ser construda graficamente, onde as variveis

se tornam

coordenadas grficas para o problema.


Segundo Taha (2008), o processo grfico inclui duas etapas:
Determinao da regio de solues viveis;
Determinao da soluo tima entre todos os pontos viveis da regio de solues.

Em primeiro lugar levamos em conta as restries de no negatividade


eixo horizontal

e o eixo vertical

, em que o

representam as variveis do problema. Assim, a no

negatividade das variveis restringe a rea da regio de solues ao primeiro quadrante que se
encontra acima do eixo

e direita de

Para se levarem em conta as demais restries, em primeiro lugar substitua cada


desigualdade por uma equao e depois represente no grfico a linha reta resultante localizando dois
pontos distintos na mesma. Em seguida, considere o efeito da desigualdade. Tudo que ela faz
dividir o plano

em dois semiplanos, um de cada lado da reta representada no grfico. S uma

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

Figura 1: Espao de solues do problema


Fonte: Os autores

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,

e traar retas perpendiculares a esse

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.

Figura 2: Soluo do Problema de Maximizao


Fonte: Os autores

Os valores de

relacionados com o ponto timo C so determinado pela resoluo das

equaes relacionadas com as retas (1) e (2).


A soluo

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

, que paralela restrio (1), a soluo tima ocorre no ponto extremo

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

Ento efetuando todo o processo de encontrar as retas associadas s restries e verificando


as desigualdades das restries para encontrar a regio vivel, chega-se a resoluo grfica,
ilustrada na Figura 3.

Figura 3: Resoluo do problema de minimizao


Fonte: Os autores

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

relacionados com o ponto timo (470.59, 329.41) so determinado

pela resoluo das equaes relacionadas com as retas (1) e (2).


A soluo

com

2.3 O uso de softwares na Pesquisa Operacional

No rol de softwares disponveis para tratar problemas e tpicos da Pesquisa Operacional,


figuram centenas de nomes. Dentre os mais utilizados esto, segundo IGNCIO e FERREIRA
FILHO, (2004):
Solver (macro dos softwares Excel e BrOffice Calc);
AMPL (A Modeling Language for Mathematical Programming);
TORA (Toolkit for Oracle);
AIMMS (Advanced Integrated Multidimensional Modeling Software);
GAMS (General Algebraic Modeling System);
Xpress Mosel (FICO Xpress Optimization Suite);
MPL Modeling System (Mathematical Programming Language);
OPL studio (Optimization-based analytical decision support applications);
Lindo (Linear Optimization Models);
Lingo

(Optimization Modeling Software for Linear, Nonlinear, and Integer

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

Figura 4: Resoluo de modelo de P.L. no Solve


Fonte: Os autores

O software Solver para resoluo de modelos de Programao Linear apresenta uma


estrutura exemplificada da soluo, porm quando voltado para o ensino, o usurio no sabe como
se chegou a tal soluo.
Outro software que se pode exemplificar o Lindo, s que um problema desse software
que ele no gratuito, e o cdigo dele tambm fechado ao usurio. Um exemplo de resoluo de
problemas de Programao Linear pelo Lindo ilustrado na Figura 5.

Figura 5: Resoluo me modelo de P.L. no Lindo


Fonte: Os autores

12
v. 1, n. 1, p. 02-39, jan./jul. 2015

Podemos perceber que a soluo para tal problema

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

Figura 6: Resoluo de modelo de P.L. no linprog


Fonte: Os autores

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

$z = 2x_1 + 4x_2 + 3x_3$

Sujeito a

14
v. 1, n. 1, p. 02-39, jan./jul. 2015

Figura 7: Resoluo de modelo de P.L. no Rglpk


Fonte: Os autores

Podemos notar que a soluo para tal problema de

,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.

2.4 Software livre

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

Quando um caso de software com o cdigo fonte fechado ou proprietrio, o usurio no


tem informaes sobre o programa, alm de pagar, na maioria dos casos altssimos custos com
licenas por ele exigido.
Mais precisamente, Software Livre se refere a quatro tipos de liberdade para os usurios do
software, definidas pela Free Software Foundation:
A liberdade de executar o programa para qualquer propsito (liberdade no. 0);
A liberdade de estudar como o programa funciona e adapt-lo para as suas necessidades
(liberdade no. 1). Acesso ao cdigo-fonte um pr-requisito para esta liberdade;
A liberdade de redistribuir cpias de modo que voc possa ajudar ao seu prximo
(liberdade no. 2);
A liberdade de aperfeioar o programa e liberar os seus aperfeioamentos, de modo que
toda a comunidade se beneficie (liberdade no. 3). Acesso ao cdigo-fonte um pr-requisito
para esta liberdade.

As vantagens do software livre so inmeras a implementao de um sistema pode sair


muito mais barata do que a implementao de sistemas proprietrios.
O uso do software aberto mais seguro, pois a tecnologia no depende de terceiros. Como
acontece com alguns bancos, a chave da segurana no fica na mo do fabricante do software e sim
do prprio banco (FIGUEREDO et al., 2005, apud MARCELO, 2004).

2.5 Software R

O R uma linguagem e ambiente de computao estatstica e construo de grficos, sendo


considerada uma variante da linguagem S (Laboratrios Bell, desenvolvida por John Chambers e
seus colegas). Surge pela criao da R Foundation for Statistical Computing, com o objetivo de
criar uma ferramenta gratuita e de utilizao livre, para anlise de dados e construo de grficos.
O R compatvel com diversas plataformas: UNIX, Windows e MaCOS e permite a ligao
de interfaces de diferentes formatos: Excel, Access, SPSS, SAS, SQL Server. Sendo fonte aberta,
permite ao utilizador alterar funcionalidades existentes, bem como criar novas funcionalidades para
responder aos seus problemas especficos de forma mais eficaz. Isso possvel graas
possibilidade de o R se estender a partir de um crescente conjunto de livrarias (packages) que

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).

2.6 O Ensino de Pesquisa Operacional

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

programao linear muito importante quando os problemas apresentados so apenas de duas


variveis possvel resolv-los pelo mtodo grfico. Quando o problema apresenta mais de duas
variveis existe a necessidade de utilizar mtodos algbricos para resolv-los. No caso de
programao linear, utiliza-se o mtodo simplex, que um mtodo trabalhoso por exigir muitos
clculos.
Pela complexidade, o simplex necessita de mtodos iterativos para a sua resoluo, pois a
exigncia de muitos clculos faz com que o mtodo seja de alto ndice de fonte de erro. Por isso
importante ter softwares a disposio para auxiliar o ensino.

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 "=".

3.1 O mtodo Simplex na forma padro

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

soluo ou se possui infinitas solues. Tais caractersticas permitem sua implementao em


algoritmos extremamente rpidos e eficientes, possibilitando a solues de problemas com centenas
de variveis de deciso. Atualmente extenses do mtodo so capazes de analisar sistemas com
centenas de milhares de variveis. O mtodo foi desenvolvido pelo matemtico americano George
Dantzig em 1947, e resultou em uma economia de bilhes de dlares para a indstria e o governo
americano.
Taha (2008) afirma que os clculos do mtodo Simplex so particularmente tediosos,
repetitivos e, acima de tudo, maantes. Esse autor diz ainda que os programas de computador so
ferramentas indispensveis para o usurio do Simplex.

O algoritmo Simplex

Considerando o sistema de inequaes escrito na forma matricial como

, o mtodo

Simplex segue o seguinte algoritmo (ARENALES et al., 2007):\\

Fase I:
Determine inicialmente uma partio bsica factvel
bsicos e no-bsicos:

de vetores de ndices

Os vetores das variveis bsicas e no-bsicas so, respectivamente:

Fase II: Incio da iterao Simplex


Passo 1: Clculo da soluo bsica

Passo 2: Clculo dos custos relativos


2.1) Vetor multiplicador simplex

2.2) Custos relatives

19
v. 1, n. 1, p. 02-39, jan./jul. 2015

2.3) Determinao da varivel a entrar na base


( a varivel

Passo 3: Teste de otimalidade


Se

, ento: pare, a soluo na iterao atual tima.

Passo 4: Clculo da direo simplex

Passo 5: Determinao do passo e varivel a sair da base


Se

, ento pare, o problema no tem soluo tima finita:

Caso contrrio, determine a varivel a sair da base pela razo mnima:

A varivel

sai da base.

Passo 6: Atualizao: nova partio bsica, troque a

coluna de

pela

coluna de
Nova matriz bsica:
Nova matriz no bsica:

Retorne ao Passo 1.

3.1.1 Os passos para o mtodo simplex

Os passos abordados a seguir referem-se a um P.P.L. de minimizao. Para iniciar o Mtodo


Simplex necessita-se de uma soluo bsica vivel inicial, a qual um dos pontos extremos. Este
mtodo verifica se a presente soluo tima. Se esta no for porque um dos demais pontos
extremos adjacentes (vrtice) fornece valor menor para a funo objetivo que a atual, quando o

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:

i) Achar uma soluo factvel bsica inicial;


ii) Verificar se a soluo atual tima. Se for, pare. Caso contrrio, siga para o passo iii.
iii) Determinar a varivel no bsica que deve entrar na base;
iv) Determinar a varivel bsica que deve sair da base;
v) Atualizar o sistema fim de determinar a nova soluo factvel bsica, e voltar ao passo
ii.

3.1.2 Casos Especiais do Mtodo Simplex

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.

3.2 O mtodo Simplex duas fases

Nos problemas onde as restries so do tipo

(menor ou igual) sempre

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

Passando o problema para a forma padro, termos:

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

Introduo das variveis artificiais


introduzido no problema de programao linear (j na forma padro) variveis artificiais
nas restries do tipo "=" e " ".

No exemplo anterior:

Minimizar
Sujeito a

Esse problema de programao linear denominado relaxado ou artificial, ou seja, a regio


factvel ampliada.
No quadro a seguir.

Obtm

uma

soluo

inicial

bvia

fazendo-se

com

Diz-se que as restries:

a)
b)

Foram relaxadas pois:

a)
Se

ento

Se

ento

23
v. 1, n. 1, p. 02-39, jan./jul. 2015

b)
Se

ento

Se

ento

Consequentemente relaxou-se o conjunto das restries (ampliou-se esse conjunto), como


visto na figura 8.

Figura 8: Conjunto de solues ampliado


Fonte: Os autores

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.

Problema de Programao Linear inicial na forma padro:


minimizar

sujeito a

(1)

Problema de Programao Linear relaxado:


minimizar

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:

se, e somente se,

2) Seja o problema original de maximizao ou de minimizao, o problema auxiliar sempre


ser de minimizao;

3) O problema auxiliar sempre vivel (sempre admite soluo);

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

Esse tpico se destina explicao detalhada do cdigo resultante da execuo do presente


trabalho. Nele, sero explicadas linha a linha todas as aes do algoritmo proposto para a
resoluo de problemas de otimizao via simplex.
A todo instante, o leitor ser remetido ao Apndice, que contm todo o cdigo na ntegra.
Para utilizar a funo simplex, o usurio deve informar primeiramente os coeficientes da
funo objetivo na forma de vetor denominado ob, no comando matrix os coeficientes das restries
denominado cr seguida da ordem da matriz, um vetor contendo as restries denominado r, um
vetor direcao informando sequencialmente se as restries so do tipo " ", " " ou "=" se um
problema de maximizao pelo comando lgico true ou false em maisculo pelo comando max.
Alm disso, o usurio poder optar pela resposta final, na qual ele ter trs opes de sadas da
mesma, sendo:
saida=1 - visualizao soluo tima sem os quadros da iterao;
saida=2 - visualizao do ltimo quadro resposta;
saida=3 - visualizao de todas as iteraes at a soluo tima.

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 " ".

Figura 9: Introduzindo os valores do problema de maximizao


Fonte: Os autores

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 de folga, z para funo objetivo,

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

A iterao do procedimento de otimizao gera os quadros parciais do simplex (at seu


quadro final) e alimenta a lista que poder ser impressa pelo usurio ao final do processo (linhas 65
e 66).
Para identificao da varivel que entra e sai do quadro inicial para iterao do algoritmo
simplex, esta ocorre nas linhas 67 e 68 onde a varivel que entra (var.entra) da base o ndice de
menor valor da linha da funo objetivo j transformada, e em seguida feita a diviso (div) entre a
coluna das restries pela coluna da varivel que entra at a linha da funo objetivo, assim o
mnimo dessa diviso e sendo ela positiva vai ser a varivel que sai (var.sai).
Logo a primeira iterao feita pelo escalonamento, em que aps a identificao dessas
variveis onde os nomes so trocados, ou seja, a varivel que entra na base ficar no lugar da
varivel que sai (linhas 71 a 74). A partir da, o escalonamento ser efetuado primeiro com a diviso
da linha da varivel que sai pelo nmero piv na interseco da linha da varivel que sai e coluna da
varivel que entra. No exemplo em questo, a linha ser dividida por 3. Aps esta diviso, o
escalonamento ser desta linha pivotal (linha.esc) pelas demais linhas do quadro (linha 75 a 79).
Assim o processo de escalonamento ser percorrido enquanto houver na linha da funo
objetivo algum coeficiente negativo, caso no tenha mais a iterao encontrou a soluo tima
aparecendo a soluo de acordo com o solicitado no incio.
Para problemas de maximizao que apresentem restries do tipo e/ou = (linhas 23 a
57), podendo tambm conter restries do tipo o cdigo resolvido atravs do Mtodo
Simplex das Duas Fases.
Aps o usurio introduzir as informaes do problema no R console, conforme explicado
anteriormente, percorrido no cdigo as linhas 13 a 21 para obter as dimenses dos componentes
do quadro inicial. Nesta parte a partir do nmero de desigualdades e igualdades que sero
introduzidas as variveis de folga, excesso e artificiais.
Atravs da linha 23 feita a verificao do vetor direo em que se o nmero de = (ni) e o
nmero de (nmi) forem maiores que zero ele percorrer esta parte do cdigo para resolver por
duas fases.
Alm disso, o problema exemplificado a seguir contm restries negativas. Para situaes
como essa, o cdigo possui uma proteo (linhas 7 a 12) que evita problemas de no convergncia.
Na fase 1 feito o quadro inicial. Neste quadro esto contidos:

(1) a matriz dos coeficientes de restrio;

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

Na fase 1, nas linhas de 32 a 38, criada a primeira posio da lista de quadrados do


simplex. Nesse momento, so nomeadas todas as colunas, de acordo com o nmero de variveis
originais presentes no problema, o nmero de variveis de folga e excesso (slacks) e variveis
artificiais. Em seguida, so detectadas quais variveis comeam na base e seus nomes so atribudos
s linhas. Essa deteco feita verificando-se quais colunas so formadas apenas pelos nmeros 1 e
0, cuja soma igual a 1, ou seja, so vetores unitrios (linha 37).
A primeira iterao desta fase ocorre em anular os coeficientes na funo objetivo artificial
(linhas 39 a 41). Isso feito pela verificao nas colunas das variveis artificiais onde obtiver zeros
e uns, multiplicar a linha por menos um e somar com a linha da funo objetivo artificial.

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.

Figura 14: Fase I e Fase II respectivamente


Fonte: Os autores

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.

Figura 15: Soluo com sada 1 e soluo com sada 2 respectivamente


Fonte: Os autores

32
v. 1, n. 1, p. 02-39, jan./jul. 2015

Figura16: Soluo com sada 3


Fonte: Os autores

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

Formosa: Universidade Federal de Goias. 2014. Disponvel em:


<http://www.ceped.ueg.br/anais/Iedipe/Gt5/1p-poster_matematica.htm>. Acesso em: 05 Nov. 2014.
R CORE TEAM. R: A language and environment for statistical computing. R Foundation for
Statistical Computing, Vienna, Austria. 2014. Disponvel em: <http://www.R-project.org/>.
SACOMANO, J. B. et al. Administrao na construo civil: o gerenciamente de obras baseado em
critrios competitivos, v.1 So Paulo: Arte & Cincia, 2004.
SOETAER, K.; MEERSCHE, V. K.; OEVELEN, V. D. limSolve: Solving Linear Inverse Models,
v.1.5.1. 2009. Disponvel em: <http://CRAN.R-project.org/package=limSolve>. Acesso em: 09
Nov. 2014.
TAHA, H. A. Pesquisa Operacional: uma viso geral. 8 ed. So Paulo: Pearson Prentice Hall, 2008.
VARADHAN, R.; GILBERT, P. BB: An R Package for Solving a Large System of Nonlinear
Equations and for Optimizing a High-Dimensional Nonlinear Objective Function. Journal of
Statistical Software, n.32, v.4, p.1-26. 2009. Disponvel em: <http://www.jstatsoft.org/v32/i04/>.
Acesso em: 08 Nov. 2014.
WEINGESSEL, A. quadprog: Functions to solve Quadratic Programming Problems, v.1.5-5. 2013.
Disponvel em: <http://CRAN.R-project.org/package=quadprog>. Acesso em: 08 Nov. 2014.

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,

#Proteo para restries negativas


7. if(any(r<0)) {
8.
if(direcao[which(r<0)]=='>=') direcao[which(r<0)]<-'<='
9.
if(direcao[which(r<0)]=='<=') direcao[which(r<0)]<-'>='
10.
cr[which(r<0),]<-cr[which(r<0),]*-1
11.
r[which(r<0)]<-r[which(r<0)]*-1
12.
}
#Pegando a dimenso da matriz de restrioes
13. nr<-nrow(cr)
14. nv<-ncol(cr)
15. ni<-0; for(i in 1:nr) if(direcao[i]=='=') ni<-ni+1
16. nii1<-nii2<-numeric(nr);for(I in 1:nr)if(direcao[i]=='=')nii1[i]<-1
17. for(i in 2:nr) nii2[i]<-sum(nii1[1:(i-1)])
18. nmi<-0; for(i in 1:nr) if(direcao[i]=='>=') nmi<-nmi+1
19. nma<-0; for(i in 1:nr) if(direcao[i]=='<=') nma<-nma+1
20. nart<-ni+nmi
21. q=paste('s',1:(nmi+nma),sep='')
##########################################################
22. if(max==FALSE) ob<--ob
##########################################################
####################################################
#Problemas que contem restries do tipo >= e/ou = #
####################################################
23. if(ni>0 || nmi>0) {
#Fase 1: Criando o quadro inicial
24. fi<-Id(nr)
25. fi[,which(direcao=='>=')]<-fi[,which(direcao=='>=')]*-1
26. if(any(direcao=='='))fi<-fi[,-which(direcao=='=')]fi<-as.matrix(fi)
27. temp1<-rbind(cr,-ob)
28. temp2<-rbind(fi,numeric(nr-ni))
29. temp3<-rbind(Id(nr)[,-which(direcao=='<=')], numeric(nart))
30. x<-cbind(temp1,temp2,temp3,c(r,0))
31. x<-rbind(x,c(rep(0,nv+nmi+nma),rep(1,nart),0))
#Fase 1: Criando a lista
32. nome.linha<-numeric(0)
33. a<-list(x)
34. xi<-paste('x',1:nv,sep="")
35. colnames(a[[1]])<-c(xi,paste('s',1:(nmi+nma),sep=""),paste('a',
1:(nmi+ni),sep=""),'b')
36. for(i in 1:(ncol(x)-1))
37. if(all(x[1:(nr+1),i]==0|x[1:(nr+1),i]==1)&sum(x[1:(nr+1),i])==1)
nome.linha<-c(nome.linha, colnames(a[[1]])[i])

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.
}

######### Sada da soluo #############


80. Soluo<-matrix(0,nr+1,1)
81. rownames(Soluo)<-rownames(a[[j]])
82. Soluo[,1]<-a[[j]][,ncol(a[[j]])]
83. if(max==FALSE) Soluo[dim(Soluo)[1],1]<-Soluo[dim(Soluo)[1],1]*-1
84. if(length(intersect(rownames(a[[j]]),q))>0)Soluo<Soluo[which(rownames(Soluo)==intersect(rownames(a[[j]]),q)),]
85. Soluo<-as.matrix(Soluo)
86. logic<-rownames(a[[j]])[1:nr]==xi
87. if(length(setdiff(rownames(a[[j]])[1:nr],xi))>0)
{inter<-matrix(0,length(setdiff(xi,rownames(a[[j]])[1:nr])),1)
rownames(inter)<-setdiff(xi,rownames(a[[j]])[1:nr]
Soluo<-rbind(inter,Soluo)
88.
}
89. Soluo<-Soluo[order(rownames(Soluo)),]
90. a[[j+1]]<-as.matrix(Soluo)
91. colnames(a[[j+1]])<-'Soluo'
92. if(saida==1) return(a[j+1][[1]])
93. if(saida==2) return(a[j:(j+1)])
94. if(saida==3) return(a)
95.

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

Das könnte Ihnen auch gefallen