Você está na página 1de 45

Problema de mistura (blending) de minério

Uma mineração possui um pátio onde são formadas até 10


pilhas de minério. Cada uma destas pilhas possui uma massa
conhecida, bem como os teores das variáveis de controle ferro,
fósforo, alumina e sílica.
Qual o máximo de minério que pode ser obtido com a
blendagem destas pilhas atendendo às especificações de qualidade
e quanto será retirado de cada pilha?
O material é retirado das pilhas utilizando uma carregadeira
cuja caçamba tem uma capacidade de 1200 Kg. Logo, o valor a ser
retirado de cada pilha deve ser múltiplo de 1200 Kg, para se evitar
caçambadas fracionárias.
As especificações de qualidade são fornecidas informando-
se os teores mínimo e máximo para cada uma das variáveis de
controle.
Os teores de cada pilha (em %), suas massas (em Kg) e os
teores limites da blendagem (em %) são apresentados na tabela 1.
• Significado dos termos utilizados no modelo
• Modelo matemático


Max  q i  i = 1,2,...,10 (1)
 i

 sujeito às restrições :
 10


 Teorvi .qi
 l min v   l max v  v = 1,...,4 (2)
i =1
10



i =1
qi

 10
 qi (Teorvi − l max v )  0  v = 1,...,4 (3)
 i =1
 10
 qi (Teorvi − l min v )  0  v = 1,...,4 (4)
 i =1
qi  Massai  i = 1,2,...,10 (5)

qi − Ni .Capc  0  i = 1,2,...,10 (6)
q  0 N i  0  i = 1,2,...,10 (7)
 i
 N i inteiro  i = 1,2,...,10 (8)
Modelo matemático para o problema só com as pilhas 6 e 7
• Max q1+q2
• q1*(62.37-66)+q2*(63.72-66)<=0
• q1*(0.042-0.048)+q2*(0.052-0.048)<=0
• q1*(1.03-1.35)+q2*(1.16-1.35)<=0
• q1*(7.95-8.5)+q2*(5.17-8.5)<=0
• q1*(62.37-61)+q2*(63.72-61)>=0
• q1*(0.042-0.032)+q2*(0.052-0.032)>=0
• q1*(1.03-1.01)+q2*(1.16-1.01)>=0
• q1*(7.95-4.5)+q2*(5.17-4.5)>=0
• q1-N1*1200=0
• q2-N2*1200=0
• q1<=17560
• q2<=26800
• N1 e N2 inteiros
• q1, q2, N1 e N2 >=0
Modelo Lingo para o problema só com as pilhas 6 e 7

• [quantidade] Max = q1+q2;


• ! restrições de teores máximos;
• [Fe_max] q1*(62.37-66)+q2*(63.72-66)<=0;
• [P_max] q1*(0.042-0.048)+q2*(0.052-0.048)<=0;
• [Al_max] q1*(1.03-1.35)+q2*(1.16-1.35)<=0;
• [Si_max] q1*(7.95-8.5)+q2*(5.17-8.5)<=0;
• ! restrições de teores mínimos;
• [Fe_min] q1*(62.37-61)+q2*(63.72-61)>=0;
• [P_min] q1*(0.042-0.032)+q2*(0.052-0.032)>=0;
• [Al_min] q1*(1.03-1.01)+q2*(1.16-1.01)>=0;
• [Si_min] q1*(7.95-4.5)+q2*(5.17-4.5)>=0;
• !restrições de número múltiplo de caçambadas;
• q1-N1*1200=0;
• q2-N2*1200=0;
• !restrições de disponibilidade de material nas pilhas;
• q1<=17560;
• q2<=26800;
• @GIN(N1);@Gin(N2);
• Por definição, o LINGO considera que as variáveis de decisão são
contínuas e não negativas, condição que pode ser modificada
através do uso das funções apresentadas na tabela 2.
Seção SETS
SETS:
setname [/ member_list /] [: variable_list];
ENDSETS

setname é o nome que se escolhe para designar o grupo de objetos


[/member_list/] é uma lista de membros (opcional) que constituem o
grupo de objetos
[:variable_list] é uma lista de variáveis (ou constantes) que tem as
mesmas características do grupo de objetos. Quando há mais de
uma variável (ou constante), elas devem ser separadas por vírgula.
Seção SETS
A lista de membros pode ser implícita ou explícita.

Na forma explícita se entra com o nome de cada membro que pode


ser opcionalmente separados por vírgula.
Exemplos: sub/1,2,3,4/:lmin,lmax; sub/Fe P Al Si/:lmin,lmax;

Na forma implícita /membro1..membron/ o LINGO automaticamente


gera todos os membros entre o membro1 e o membron.
Exemplos: pilha/1..np/:q,N,Massa;
sub/1..nq/:lmin,lmax;

Set Derivado
matrix(pilha,sub):Teor;
Seção SETS
• Apenas os seguintes formatos são permitidos para lista implícita:
Seção DATA

• Permite isolar dados do resto do modelo;


• Pode ser usada para entrada de dados ou saída de
resultados;
• Permite atribuir valores aos elementos dos conjuntos
que estão associados a sets já pré-definidos.
• Pode ser utilizada também para definir parâmetros, ou
seja, variáveis escalares (constantes).
Seção DATA
A estrutura de uma seção DATA é a seguinte:

DATA:
Lista de objetos = Lista de valores;
ENDDATA

A lista de objetos contém o nome de conjuntos associados a sets


pré-definidos ou então um nome de set cujos membros se deseja
inicializar, ou ainda lista de nomes de parâmetros a serem definidos
ou inicializados, opcionalmente separados por vírgula.

A lista de valores contém os valores que se deseja atribuir aos


membros da lista de objetos.
Funções de repetição ou de iteração
de conjuntos (sets)
Funções de repetição
@function( setname [(set_index_list)[|conditional qualifier]]:expression_list);

setname: é o nome de um grupo (set) sobre cujos membros será aplicada a função
de repetição
set_index_list: é usado para se criar uma lista de índices associada aos membros do
grupo definido por setname. A função de repetição executará uma operação a
cada um dos membros referenciados pelos índices criados.
conditional qualifier: expressão que limita o escopo dos membros do setname sobre
os quais se aplicará a função de repetição. Para cada índice da lista de índices é
avaliada o conditional qualifier. Se a expressão for verdadeira, a função será
aplicada àquele membro.
expression_list: é uma lista de expressões que será aplicada a cada membro do
grupo identificado por setname. Para @FOR a lista de expressões pode conter
mais de uma expressão, enquanto que para as outras só é permitida uma. Esta
expressão pode conter inclusive outra função de repetição. Se set_index_list é
omitido, então a lista de expressão será aplicada a todos os membros do
setname.
Funções de repetição
[Funcao_Objetivo] Max = @SUM(pilha:q);

! restrições de teores máximos;


@FOR(sub(i):[Rest_teor_max]
@SUM(pilha(j):(q(j)*(Teor(j,i)-lmax(i))))<=0);

! restrições de teores mínimos;


@FOR(sub(i):[Rest_teor_min]@SUM(pilha(j):(q(j)*(Teor(j,i)-
lmin(i))))>=0);

!restrições de número múltiplo de caçambadas;


@FOR(pilha:[Rest_cambadas] q-N*CAPC=0);

!restrições de disponibilidade de material nas pilhas;


@FOR(pilha:[Rest_massa]q<=Massa);
@FOR(pilha:@GIN(N));
Solução do modelo pilhas2
Global optimal solution found at iteration: 18
Objective value: 159600.0
Variable Value Reduced Cost
NP 10.00000 0.000000
NQ 4.000000 0.000000
CAPC 1200.000 0.000000
Q( 1) 12000.00 0.000000
Q( 2) 13200.00 0.000000
Q( 3) 24000.00 0.000000
Q( 4) 34800.00 0.000000
Q( 5) 6000.000 0.000000
Q( 6) 16800.00 0.000000
Q( 7) 26400.00 0.000000
Q( 8) 3600.000 0.000000
Q( 9) 8400.000 0.000000
Q( 10) 14400.00 0.000000
N( 1) 10.00000 -1200.000
N( 2) 11.00000 -1200.000
N( 3) 20.00000 -1200.000
N( 4) 29.00000 -1200.000
N( 5) 5.000000 -1200.000
N( 6) 14.00000 -1200.000
N( 7) 22.00000 -1200.000
N( 8) 3.000000 -1200.000
N( 9) 7.000000 -1200.000
N( 10) 12.00000 -1200.000
Solução do modelo pilhas2
Row Slack or Surplus Dual Price

FUNCAO_OBJETIVO 159600.0 1.000000


REST_TEOR_MAX( 1) 728508.0 0.000000
REST_TEOR_MAX( 2) 16.80000 0.000000
REST_TEOR_MAX( 3) 41220.00 0.000000
REST_TEOR_MAX( 4) 8976.000 0.000000
REST_TEOR_MIN( 1) 69492.00 0.000000
REST_TEOR_MIN( 2) 2536.800 0.000000
REST_TEOR_MIN( 3) 13044.00 0.000000
REST_TEOR_MIN( 4) 629424.0 0.000000
REST_CAMBADAS( 1) 0.000000 1.000000
REST_CAMBADAS( 2) 0.000000 1.000000
REST_CAMBADAS( 3) 0.000000 1.000000
REST_CAMBADAS( 4) 0.000000 1.000000
REST_CAMBADAS( 5) 0.000000 1.000000
REST_CAMBADAS( 6) 0.000000 1.000000
REST_CAMBADAS( 7) 0.000000 1.000000
REST_CAMBADAS( 8) 0.000000 1.000000
REST_CAMBADAS( 9) 0.000000 1.000000
REST_CAMBADAS( 10) 0.000000 1.000000
REST_MASSA( 1) 500.0000 0.000000
REST_MASSA( 2) 550.0000 0.000000
REST_MASSA( 3) 1000.000 0.000000
REST_MASSA( 4) 200.0000 0.000000
REST_MASSA( 5) 75000.00 0.000000
REST_MASSA( 6) 760.0000 0.000000
REST_MASSA( 7) 400.0000 0.000000
REST_MASSA( 8) 0.000000 0.000000
REST_MASSA( 9) 1000.000 0.000000
REST_MASSA( 10) 600.0000 0.000000
Funções de arquivo de texto
Função @FILE
• é utilizada para transferir dados armazenados em um arquivo de
texto para dentro das seções DATA e SETS.
• Sintaxe: @FILE( 'filename')
onde filename é um nome de arquivo de texto.
• ao encontrar a função @FILE, o LINGO começa a ler o conteúdo
do arquivo filename até o fim do arquivo ou até encontrar um (~)
significando um fim de registro.
• comentários dentro do arquivo iniciados por (!) e terminados por (;)
são ignorados.
• a função @FILE deve estar dentro de uma seção DATA ou dentro
de uma seção SETS.
• o nome de arquivo filename na função @FILE deve indicar o
caminho completo se o arquivo não estiver no mesmo diretório onde
se encontra o modelo.
DATA:
np,nq=@file('parametros.txt');!número de pilhas e de substâncias
químicas;
!Capacidade da caçamba ;
CAPC=@file('parametros.txt');
ENDDATA
DATA:Teor=@File('Teor.txt');
Massa=@File('massa.txt');
lmax=@File('limites.txt');
lmin=@File('limites.txt');
ENDDATA
Funções de arquivo de texto

Função @TEXT
• Permite exportar soluções para arquivos do tipo texto.
• Podem ser enviados valores de variáveis, simplesmente textos,
valores de membros de grupos (sets) e de valores de variáveis ou
conjuntos associados a grupos definidos numa seção SETS.
• Sintaxe: @TEXT(‘filename’)
onde filename é o nome do arquivo para onde se fará a exportação
de informações.
• só pode aparecer do lado esquerdo de uma declaração ou
expressão dentro das seções DATA ou SETS
• o nome de arquivo filename na função @TEXT deve indicar o
caminho completo se o arquivo não estiver no mesmo diretório onde
se encontra o modelo.
DATA:
@text('resultados.txt')='Função Objetivo';
@text('resultados.txt')=FO;
@text('resultados.txt')='Massa a ser retirada de cada
pilha';
@text('resultados.txt')=pilha,q;
ENDDATA
Função de interface com o Excel
Função @OLE
• Para a utilização de uma planilha do Excel, devemos definir um nome para cada
conjunto de células referenciadas no modelo.

• Permite a importação de dados ou a exportação de resultados para uma planilha do


EXCEL.

Definição do nome de conjunto de células no Excel

Dependendo da versão do Excel a definição do nome de um conjuntode células no


Excel pode ser feita de diferentes formas. Uma delas é a seguinte:

1. selecionar a faixa de células arrastando-se o mouse com o botão esquerdo


pressionado;
2. soltar o botão esquerdo do mouse;
3. clicar com o mouse em Insert|Name|Define (Inserir/Nome/Definir);
4. entrar com o nome desejado;
5. clicar em OK.
Uma maneira mais simples é:
1. pressionando o botão esquerdo do mouse, arraste o cursor sobre o conjunto de
células que definem o campo;
2. solte o botão esquerdo do mouse;
3. clique na caixa de nomes localizada no canto superior esquerdo do EXCEL;
4. digite o nome desejado;
5. pressione ENTER.

Outra ainda é:
1. selecionar a faixa de células arrastando-se o mouse com o botão esquerdo
pressionado;
2. soltar o botão esquerdo do mouse;
3. Ir no menu Fórmulas, depois clicar em Gerenciador de nomes e Novo;
4. Entrar com o nome desejado na caixa de diálogo Nome;
5. Clicar em Ok ou pressionar Enter
Para excluir um nome definido antes pode-se fazer o seguinte:
1. selecione o menu Inserir|Nome|Definir;
2. selecione o nome desejado;
3. clique no botão Excluir; e
4. clique no botão OK.

Ou então:
1. Ir no menu Fórmulas, depois clicar em Gerenciador de nomes;
2. Clique no nome que deseja alterar ou excluir;
3. Clique em editar e entre com o novo nome na caixa de diálogo
nome para alterar o nome ou simplesmente clique em Excluir;
4. Clicar em Ok ou pressionar Enter.
• As sintaxes da função @OLE para importação de dados e de saída
de resultados são respectivamente:

• lista_de_objetos = @OLE( 'arquivo de planilhas'[, lista_de_faixas]);


• @OLE('arquivo de planilhas'[, lista_de_faixas]) = lista_de_objetos ;

onde:
• lista_de_objetos é uma lista de nomes, separados por vírgula, de variáveis,
de grupos (sets) ou de conjuntos associados a sets a serem importados ou
exportados;
• arquivo de planilhas é um nome de um arquivo de planilha EXCEL de
onde serão importados ou para onde serão exportados os objetos da
lista_de_objetos;
• lista_de_faixas é uma lista de nomes, separados por vírgula, de faixas de
células da planilha de onde serão importados ou para onde serão
exportados os objetos da lista_de_objetos.

• As faixas devem conter exatamente uma célula para cada valor


importado ou exportado de cada objeto presente na lista_de_objetos.
Faixa de células Nome Faixa de células Nome
D24 capc K6 a K15 NCAC
J16 FO D22 npilhas
C19 a F19 Lim_Max D23 nsub
C18 a F18 Lim_Min J6 a J15 q
G6 a G15 Massa C6 a F15 Teor
Problema de mistura de minério de um mesmo tipo

Uma mineração possui um pátio onde são formadas até 10


pilhas de minério que podem ser de diferentes tipos. Cada uma
destas pilhas possui uma massa conhecida, bem como os teores
das variáveis de controle ferro, fósforo, alumina e sílica.
Qual o máximo de minério que pode ser obtido com a
blendagem destas pilhas atendendo às especificações de qualidade
e quanto será retirado de cada pilha?
O material é retirado das pilhas utilizando uma carregadeira
cuja caçamba tem uma capacidade de 1200 Kg. Logo, o valor a ser
retirado de cada pilha deve ser múltiplo de 1200 Kg, para se evitar
caçambadas fracionárias.
As especificações de qualidade são fornecidas informando-
se os teores mínimo e máximo para cada uma das variáveis de
controle. Somente pilhas de um mesmo tipo de minério podem ser
usadas para a mistura.
Os teores de cada pilha (em %), suas massas (em Kg), os
teores limites da blendagem (em %) e o tipo de minério são
apresentados na tabela 2.
Tabela 2
• Significado dos termos utilizados no modelo
Operador Lógico Significado ou Valor Retornado

#NOT# VERDADEIRO se o operando à direita for falso e FALSO em caso contrário.

#EQ# VERDADEIRO se ambos operandos são iguais e FALSO em caso contrário.

#NE# VERDADEIRO se operando da esquerda for diferente do operando da direita e FALSO em caso contrário.

#GT# VERDADEIRO se operando da esquerda for maior do que o operando da direita e FALSO em caso contrário.

#GE# VERDADEIRO se operando da esquerda for maior ou igual ao operando da direita e FALSO em caso contrário.

#LT# VERDADEIRO se operando da esquerda for menor do que o operando da direita e FALSO em caso contrário.

#LE# VERDADEIRO se operando da esquerda for menor ou igual ao operando da direita e FALSO em caso contrário.

#AND# VERDADEIRO se ambos operandos são verdadeiros e FALSO em caso contrário.

#OR# VERDADEIRO se pelo menos um dos operandos forem verdadeiros e FALSO em caso contrário.

Nível de Prioridade Operador


Mais alto #NOT#

#EQ# #NE# #GT##GE# #LT# #LE#

Mais Baixo #AND# #OR#


[Funcao_Objetivo] FO = @SUM(pilha(j)|Tipo(j)#EQ#TMIN:q(j));
MAX=FO;
! restrições de teores máximos;
@FOR(sub(i):@SUM(pilha(j)|Tipo(j)#EQ#TMIN:(q(j)*(Teor(j,i)-lmax(i))))<=0);
! restrições de teores mínimos;
@FOR(sub(i):@SUM(pilha(j)|Tipo(j)#EQ#TMIN:(q(j)*(Teor(j,i)-lmin(i))))>=0);
!restrições de número múltiplo de caçambadas;
@FOR(pilha(j)|Tipo(j)#EQ#TMIN:q(j)-N(j)*CAPC=0);
!restrições de disponibilidade de material nas pilhas;
!@FOR(pilha(i):@BND(0,q(i),Massa(i)));
@FOR(pilha(j)|Tipo(j)#EQ#TMIN:@BND(0,q(j),Massa));
@FOR(pilha(j)|Tipo(j)#EQ#TMIN:@GIN(N(j)));
Faixa de células Nome Faixa de células Nome
D24 capc K6 a K15 NCAC
J16 FO D22 npilhas
C19 a F19 Lim_Max D23 nsub
C18 a F18 Lim_Min J6 a J15 q
G6 a G15 Massa C6 a F15 Teor
D25 TMIN H6 a H15 TIPO
Utilizando arquivos embutidos

Para que @OLE funcione corretamente é necessário que o arquivo ’.xls’ utilizado esteja
aberto, a não ser quando objetos embutidos são utilizados.
Pode-se embutir uma planilha do Excel em um modelo do LINGO ou embutir um modelo do LINGO em
uma planilha do Excel.

Para embutir um arquivo ’.xls’ no LINGO, siga os seguintes passos:


1. Em um modelo do Lingo aberto, selecione o menu Edit|Insert New Object;
2. selecione a opção ’Criar do Arquivo’ na caixa de dialogo ’Inserir Objeto’;
3. digite o caminho e o nome do arquivo a ser embutido;
4. marque a caixa ’Vincular’; e
5. clique no botão OK.

Caixa diálogo do Lingo para inserir a planilha pilhas1.xls no modelo do LINGO salvo no arquivo
pilha4.lg4.
Este modelo foi salvo como modelo pilha9.lg4 e a figura mostra como fica o modelo após a
inserção da planilha no modelo.

A planilha embutida no LINGO aparece no topo do modelo lingo9.lg4. Para editar esta planilha,
basta dar um duplo-clique sobre o objeto.
Quando o modelo for resolvido, o LINGO enviará os resultados para o arquivo ’pilhas1.xls’
atualizando a planilha embutida.
Embutindo um modelo do Lingo em uma planilha do Excel.

O LINGO é capaz de funcionar como um servidor OLE. Isto significa que um modelo do LINGO
pode ser embutido em qualquer aplicação que funcione como cliente OLE como, por exemplo, o EXCEL. Embutir um
modelo no EXCEL é conveniente, pois o modelo estará sempre disponível sempre que o arquivo ’.xls’ for aberto, não
sendo necessário abrir o otimizador LINGO.

O procedimento para se embutir um documento do LINGO em um arquivo do EXCEL, é:


1. selecionar no Excel, o menu Inserir|Objeto;
2. selecionar o objeto ’LINGO Document’ na lista ’Tipo de objeto’; e
3. clicar no botão OK;.

A figura mostra a caixa diálogo para inserção de um modelo lingo


Um documento em branco do LINGO surgirá na planilha aberta. O modelo pode ser
digitado no documento diretamente, ou copiado de outro arquivo, através de copiar e
depois colar (ver figura ).
Outra maneira para embutir um documento do LINGO em um arquivo do
EXCEL é através de:
1. selecione no Excel, o menu Inserir|Objeto;
2. selecione o objeto ’LINGO Document’ na lista ’Tipo de objeto’;
3. selecione a opção ’Criar do Arquivo’ na caixa de dialogo ’Inserir Objeto’;
4. digite o caminho e o nome do arquivo a ser embutido;
5. marque a caixa ’Vincular’; e
6. clique no botão OK.

Caixa de diálogo 2 para inserção de um objeto do tipo modelo do LINGO


Ao dar um duplo-clique sobre o objeto contendo o modelo embutido, uma barra de comandos
do LINGO aparecerá no canto superior da tela Para resolver o modelo, basta clicar no botão
Solve da barra de comandos. Depois de otimizar o modelo, o LINGO enviará os resultados para a planilha.

Janela do Lingo que aparece no arquivo pilhas1.xls após a inserção do modelo presente no arquivo
lingo4.lg4.

Você também pode gostar