Você está na página 1de 143

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/332568731

Tutorial: IBM ILOG CPLEX Optimization Studio

Presentation · April 2019

CITATIONS READS

0 4,666

1 author:

William De Paula Ferreira


Federal Institute of Education, Science and Technology of São Paulo
39 PUBLICATIONS   82 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Exploring the impact, challenges and opportunities of the internet of things in systems engineering View project

PL-GPO IFSP View project

All content following this page was uploaded by William De Paula Ferreira on 23 April 2019.

The user has requested enhancement of the downloaded file.


Videos: https://www.youtube.com/watch?v=XohChiSIVnk&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


Lista de tópicos (Table of contents)
Aula 1 – Introdução ao IBM ILOG CPLEX Optimization Studio (Introduction)
Aula 2 – Exemplos (Examples)
Aula 3 – String / Array / Range/ Sum / Forall (Data structure)
Aula 4 – Problema de Transporte (Transportation Problem)
Aula 5 – Separando o modelo do problema a partir dos dados da instância (.Mod & .Dat)
Aula 6 – Problema de Mistura (Blending Problem)
Aula 7 – Lendo e escrevendo em planilhas do MS Excel (.xls files)
Aula 8 – IBM ILOG Script – pós processamento (Postprocessing)
Aula 9 – Problema de Planejamento Agregado (Production Planning Problem)
Aula 10 – IBM ILOG Script – pré processamento (Preprocessing)
Aula 11 – Parâmetros formais: filtros, rótulos e expressões (Filters, labels, and expressions)
Aula 12 – Problema do Caixeiro Viajante – PCV (Travelling Salesman Problem – TSP)
Aula 13 – Problema de Corte Unidimensional (1D cutting-stock problem)
Aula 14 – Problema de Corte Bidimensional (2D cutting-stock problem)
Videos: https://www.youtube.com/watch?v=XohChiSIVnk&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A

Aula 1 - Introdução

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 1

1. Baixando o Software;
2. Referências bibliográficas;
3. Primeiro modelo.

REQUISITOS
Conceitos básicos de Programação Linear

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Baixando o Software

LINK PARA DOWNLOAD


IBM ILOG CPLEX Optimization Studio 12.7.1 for Windows

https://www.ibm.com/developerworks/community/blogs/jfp/entry/CPLEX_Is_Free_For_Students?lang=en

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Baixando o Software

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Baixando o Software

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


2. Referências bibliográficas

Livros
1. WINSTON, Wayne L. Operations Research: Application and Algorithms.
4th ed. Thomson Learning, 2004.

2. BAZARAA, Mokhtar S.; JARVIS, John J.; SHERALI, Hanif D. Linear


programming and network flows. 4th ed. John Wiley & Sons, 2011.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


2. Referências bibliográficas
IBM Knowledge Center

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.studio.
help/Optimization_Studio/topics/COS_home.html

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um
soldado é vendido por $27 e usa $10 de matéria prima. Cada soldado produzido
aumenta o custo de produção da Giapetto em $14. Um trem é vendido por $21 e usa
$9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador.
Um soldado requer 1 hora de carpintaria e 2 horas de acabamento. E um trem requer
1 hora de carpintaria e 1 hora de acabamento. Giapetto tem disponível 80 horas de
carpintaria e 100 horas de acabamento por semana. A demanda por trens é ilimitada,
mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o
seu lucro semanal.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um
soldado é vendido por $27 e usa $10 de matéria prima. Cada soldado produzido
aumenta o custo de produção da Giapetto em $14. Um trem é vendido por $21 e usa
$9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador.
Um soldado requer 1 hora de carpintaria e 2 horas de acabamento. E um trem requer
1 hora de carpintaria e 1 hora de acabamento. Giapetto tem disponível 80 horas de
carpintaria e 100 horas de acabamento por semana. A demanda por trens é ilimitada,
mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o
seu lucro semanal.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um soldado é vendido por $27 e
usa $10 de matéria prima. Cada soldado produzido aumenta o custo de produção da Giapetto em $14. Um trem
é vendido por $21 e usa $9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador. Um soldado requer 1 hora
de carpintaria e 2 horas de acabamento. E um trem requer 1 hora de carpintaria e 1 hora de acabamento.
Giapetto tem disponível 80 horas de carpintaria e 100 horas de acabamento por semana. A demanda por trens é
ilimitada, mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o seu lucro
semanal.

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um soldado é vendido por $27 e
usa $10 de matéria prima. Cada soldado produzido aumenta o custo de produção da Giapetto em $14. Um trem
é vendido por $21 e usa $9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador. Um soldado requer 1 hora
de carpintaria e 2 horas de acabamento. E um trem requer 1 hora de carpintaria e 1 hora de acabamento.
Giapetto tem disponível 80 horas de carpintaria e 100 horas de acabamento por semana. A demanda por trens é
ilimitada, mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o seu lucro
semanal.

Problema de Programação Linear


1. Variáveis de decisão X1 – quant. de soldados produzidos/semana
X2 – quant. de trens produzidos/semana
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um soldado é vendido por $27 e
usa $10 de matéria prima. Cada soldado produzido aumenta o custo de produção da Giapetto em $14. Um trem
é vendido por $21 e usa $9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador. Um soldado requer 1 hora
de carpintaria e 2 horas de acabamento. E um trem requer 1 hora de carpintaria e 1 hora de acabamento.
Giapetto tem disponível 80 horas de carpintaria e 100 horas de acabamento por semana. A demanda por trens é
ilimitada, mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o seu lucro
semanal.

Problema de Programação Linear


1. Variáveis de decisão
Max L = 27X1 + 21X2 – (10X1 + 9X2 ) – (14X1 + 10X2)
2. Função objetivo
Receita Custo MP Custo de Produção
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


Giapetto Comp. Fabrica 2 tipos de brinquedos de madeira: soldados e trens. Um soldado é vendido por $27 e
usa $10 de matéria prima. Cada soldado produzido aumenta o custo de produção da Giapetto em $14. Um trem
é vendido por $21 e usa $9 de matéria prima. Cada trem montado aumenta o custo de produção em $10. A
produção dos brinquedos requer dois tipos de mão de obra: carpinteiro e acabador. Um soldado requer 1 hora
de carpintaria e 2 horas de acabamento. E um trem requer 1 hora de carpintaria e 1 hora de acabamento.
Giapetto tem disponível 80 horas de carpintaria e 100 horas de acabamento por semana. A demanda por trens é
ilimitada, mas no máximo 40 soldados são vendidos por semana. Giapetto quer maximizar o seu lucro
semanal.

Problema de Programação Linear Restrição 1: 2X1 + X2 ≤ 100 (Acabamento)


Restrição 2 : X1 + X2 ≤ 80 (Carpintaria)
1. Variáveis de decisão
Restrição 3 : X1 ≤ 40 (Demanda de Soldados)
2. Função objetivo Restrição 4 : X1 ≥ 0 , Inteiro (Restrição de sinal)
3. Restrições Restrição 3 : X2 ≥ 0 , Inteiro (Restrição de sinal)
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
3. Primeiro modelo

Exemplo 1 – Programação Linear (Winston, 2004, p. 49)


X1 – quant. de soldados produzidos/semana
X2 – quant. de trens produzidos/semana

Max L = 27X1 + 21X2 – (10X1 + 9X2 ) – (14X1 + 10X2)

2X1 + X2 ≤ 100
X1 + X2 ≤ 80
X1 ≤ 40
X1, X2 ≥ 0
X1, X2 ≥ Inteiro

Resultados:
L = 180 ($)
Nota: Tipos de dados mais utilizados (boolean; int; float; string). X1 = 20 (soldados/semana)
X2 = 60 (trens/semana)
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Código

Aula: 1 Exemplo:1 Arquivo: Ex1.mod

//Variáveis de decisão
dvar int+ X1;
dvar int+ X2;

//Função objetivo
maximize
(27*X1 + 21*X2) - (10*X1 + 9*X2) - (14*X1+10*X2);

//Restrições
subject to {
st1: 2*X1 + X2 <= 100;
st2: X1 + X2 <=80;
X1 <= 40;
}
Videos: https://www.youtube.com/watch?v=Ef3PmrZdpYE&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=2

Aula 2 - Exemplos

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 2

1. Exemplo de Programação Linear (Winston, 2004, p. 60)

2. Exemplo de Programação Inteira (Winston, 2004, p.477)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo 2 – Programação Linear (Winston, 2004, p. 60)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e
feminina. Para aumentar suas vendas, a empresa pretende fazer uma campanha
publicitária comprando minutos para seus comerciais (ou fração dele) em dois
tipos de programas: show de comédia e jogos de futebol. Cada minuto de
comercial em comédia é visto por 7 milhões de mulheres e 2 milhões de
homens e cada minuto de comercial em jogos de futebol é visto por 2 milhões
de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e
de futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto
por pelo menos 28 milhões de mulheres e 24 milhões de homens com o menor
custo possível.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e
feminina. Para aumentar suas vendas, a empresa pretende fazer uma campanha
publicitária comprando minutos para seus comerciais (ou fração dele) em dois
tipos de programas: show de comédia e jogos de futebol. Cada minuto de
comercial em comédia é visto por 7 milhões de mulheres e 2 milhões de
homens e cada minuto de comercial em jogos de futebol é visto por 2 milhões
de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e
de futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto
por pelo menos 28 milhões de mulheres e 24 milhões de homens com o menor
custo possível.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e feminina. Para aumentar suas
vendas, a empresa pretende fazer uma campanha publicitária comprando minutos para seus comerciais (ou
fração dele) em dois tipos de programas: show de comédia e jogos de futebol. Cada minuto de comercial em
comédia é visto por 7 milhões de mulheres e 2 milhões de homens e cada minuto de comercial em jogos de
futebol é visto por 2 milhões de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e de
futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto por pelo menos 28 milhões de
mulheres e 24 milhões de homens com o menor custo possível.

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e feminina. Para aumentar suas
vendas, a empresa pretende fazer uma campanha publicitária comprando minutos para seus comerciais (ou
fração dele) em dois tipos de programas: show de comédia e jogos de futebol. Cada minuto de comercial em
comédia é visto por 7 milhões de mulheres e 2 milhões de homens e cada minuto de comercial em jogos de
futebol é visto por 2 milhões de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e de
futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto por pelo menos 28 milhões de
mulheres e 24 milhões de homens com o menor custo possível.

Problema de Programação Linear


1. Variáveis de decisão X1 – minutos contratados em shows de comédia
X2 – minutos contratados em jogos de futebol
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e feminina. Para aumentar suas
vendas, a empresa pretende fazer uma campanha publicitária comprando minutos para seus comerciais (ou
fração dele) em dois tipos de programas: show de comédia e jogos de futebol. Cada minuto de comercial em
comédia é visto por 7 milhões de mulheres e 2 milhões de homens e cada minuto de comercial em jogos de
futebol é visto por 2 milhões de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e de
futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto por pelo menos 28 milhões de
mulheres e 24 milhões de homens com o menor custo possível.

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo Min L = 50X1 + 100X2 (Em milhares)
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e feminina. Para aumentar suas
vendas, a empresa pretende fazer uma campanha publicitária comprando minutos para seus comerciais (ou
fração dele) em dois tipos de programas: show de comédia e jogos de futebol. Cada minuto de comercial em
comédia é visto por 7 milhões de mulheres e 2 milhões de homens e cada minuto de comercial em jogos de
futebol é visto por 2 milhões de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e de
futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto por pelo menos 28 milhões de
mulheres e 24 milhões de homens com o menor custo possível.

Problema de Programação Linear


1. Variáveis de decisão Restrição 1: 7X1 + 2X2 ≥ 28 (quant. min de mulheres )
2. Função objetivo Restrição 2 : 2X1 + 12X2 ≥ 24 (quant. min de homens )

3. Restrições Restrição 3: X1 , X2 ≥ 0 (Restrição de sinal)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)


Dorian Auto produz carros e caminhões de luxo com clientela masculina e feminina. Para aumentar suas
vendas, a empresa pretende fazer uma campanha publicitária comprando minutos para seus comerciais (ou
fração dele) em dois tipos de programas: show de comédia e jogos de futebol. Cada minuto de comercial em
comédia é visto por 7 milhões de mulheres e 2 milhões de homens e cada minuto de comercial em jogos de
futebol é visto por 2 milhões de mulheres e 12 milhões de homens. Um minuto de comédia custa $50.000 e de
futebol custa $100.000. Dorian gostaria que seus comerciais fossem visto por pelo menos 28 milhões de
mulheres e 24 milhões de homens com o menor custo possível.

Min L = 50X1 + 100X2


7X1 + 2X2 ≥ 28
2X1 + 12X2 ≥ 24
X1 , X2 ≥ 0

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Linear

Exemplo 2 – Programação Linear (Winston, 2004, p. 60)

X1 – minutos contratados em shows de comédia


X2 – minutos contratados em jogos de futebol

Min L = 50X1 + 100X2


7X1 + 2X2 ≥ 28
2X1 + 12X2 ≥ 24
X1 , X2 ≥ 0

Resultados: L = 320  $320.000


X1 = 3.6 (soldados/semana)
Nota: Tipos de dados utilizado (float). X2 = 1..4 (trens/semana)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo 3 – Programação Inteira (Winston, 2004, p.477)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1
com NPV de $16.000; investimento 2, NPV de $22.000;
Investimento 3, NPV de $12.000; e investimento 4, um NPV de
$8.000. Cada investimento requer uma determinada retirada:
Investimento 1, $5.000; Investimento 2, $7.000; Investimento 3,
$4.000; e Investimento 4, $3.000. Considerando que a empresa
possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.
Legenda: Valor Presente Líquido (NPV, Net Present Value),

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1
com NPV de $16.000; investimento 2, NPV de $22.000;
Investimento 3, NPV de $12.000; e investimento 4, um NPV de
$8.000. Cada investimento requer uma determinada retirada:
Investimento 1, $5.000; Investimento 2, $7.000; Investimento 3,
$4.000; e Investimento 4, $3.000. Considerando que a empresa
possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.
Legenda: Valor Presente Líquido (NPV, Net Present Value),

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1 com NPV de $16.000;
investimento 2, NPV de $22.000; Investimento 3, NPV de $12.000; e investimento 4, um
NPV de $8.000. Cada investimento requer uma determinada retirada: Investimento 1,
$5.000; Investimento 2, $7.000; Investimento 3, $4.000; e Investimento 4, $3.000.
Considerando que a empresa possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1 com NPV de $16.000;
investimento 2, NPV de $22.000; Investimento 3, NPV de $12.000; e investimento 4, um
NPV de $8.000. Cada investimento requer uma determinada retirada: Investimento 1,
$5.000; Investimento 2, $7.000; Investimento 3, $4.000; e Investimento 4, $3.000.
Considerando que a empresa possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.

Problema de Programação Linear


1, se o investimento j for feito
1. Variáveis de decisão Xj (j=1,2,3,4) =
0, caso contrário
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1 com NPV de $16.000;
investimento 2, NPV de $22.000; Investimento 3, NPV de $12.000; e investimento 4, um
NPV de $8.000. Cada investimento requer uma determinada retirada: Investimento 1,
$5.000; Investimento 2, $7.000; Investimento 3, $4.000; e Investimento 4, $3.000.
Considerando que a empresa possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo Max z = 16X1 + 22X2 + 12X3 + 8X4 (Em milhares)
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1 com NPV de $16.000;
investimento 2, NPV de $22.000; Investimento 3, NPV de $12.000; e investimento 4, um
NPV de $8.000. Cada investimento requer uma determinada retirada: Investimento 1,
$5.000; Investimento 2, $7.000; Investimento 3, $4.000; e Investimento 4, $3.000.
Considerando que a empresa possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.

Problema de Programação Linear


1. Variáveis de decisão
Restrição 1: 5X1 + 7X2 + 4X3 + 3X4 ≤ 14 (invest. em milhares de $ )
2. Função objetivo
Restrição 2 : Xj = 0 ou 1 (j = 1,2,3,4 )
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)


A empresa Stockco considera 4 investimentos. O Investimento 1 com NPV de $16.000;
investimento 2, NPV de $22.000; Investimento 3, NPV de $12.000; e investimento 4, um
NPV de $8.000. Cada investimento requer uma determinada retirada: Investimento 1,
$5.000; Investimento 2, $7.000; Investimento 3, $4.000; e Investimento 4, $3.000.
Considerando que a empresa possui $14.000 disponíveis, determine quais investimentos
maximizem o NPV.

Max z = 16X1 + 22X2 + 12X3 + 8X4


5X1 + 7X2 + 4X3 + 3X4 ≤ 14
Xj = 0 ou 1 (j = 1,2,3,4 )
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Programação Inteira

Exemplo 3 – Programação Inteira (Winston, 2004, p.477)

Max z = 16X1 + 22X2 + 12X3 + 8X4


5X1 + 7X2 + 4X3 + 3X4 ≤ 14
Xj = 0 ou 1 (j = 1,2,3,4 )

L = 42  $42,000
X1 = 0, X2 = 1, X3 = 1, X4 = 1
Nota: Tipos de dados utilizado (boolean).

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 2 Exemplo:1 Arquivo: Ex1.mod

//Variáveis de decisão
dvar float+ X1;
dvar float+ X2;

//Função objetivo
minimize
50*X1 + 100*X2;

//Restrições
subject to {
7*X1 + 2*X2 >= 28;
2*X1 + 12*X2 >= 24;

Aula: 2 Exemplo:2 Arquivo: Ex2.mod

// Variáveis de decisão
dvar boolean X1;
dvar boolean X2;
dvar boolean X3;
dvar boolean X4;

//Função objetivo
maximize
16*X1 + 22*X2 + 12*X3 + 8*X4;

//Restrições
subject to {
5*X1 + 7*X2 + 4*X3 + 3*X4 <= 14;
}
Videos: https://www.youtube.com/watch?v=2iQh7QA7RDM&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=3

Aula 3: String/ Array / Range / Sum / Forall

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 3
1. Utilizando notação Matricial
2. Estruturas de dados
1. String;
2. Vetores (array);
3. Range;
3. Operadores
1. SUM
2. FORALL

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Utilizando notação Matricial
Notações - Modelo de Programação Linear
Forma Expandida Forma de Somatório

Forma Matricial cx = Função Objetivo


c = Vetor coeficientes de custo
x = Vetor variáveis de decisão
Ax = b → restrições
A = Matriz coeficientes tecnológicos
b = Vetor coluna lado direito
x ≥ 0 → restrições de não negatividade

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Utilizando notação Matricial
Notações - Modelo de Programação Linear
Forma Expandida Forma Matricial

c = 𝑐1 𝑐2 , . . . , 𝑐𝑛

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Utilizando notação Matricial
Modelo de Programação Linear
Exemplo 1 – Programação Linear (Winston, 2004, p. 49)

X1 – quant. de soldados produzidos/semana


X2 – quant. de trens produzidos/semana

Max L = 27X1 + 21X2 – (10X1 + 9X2 ) – (14X1 + 10X2) Max L = 3X1 + 2X2
2X1 + X2 ≤ 100 2X1 + X2 ≤ 100
X1 + X2 ≤ 80 X1 + X2 ≤ 80
X1 ≤ 40 X1 ≤ 40
X1, X2 ≥ 0 X1, X2 ≥ 0

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Utilizando notação Matricial
Forma Expandida Forma de Somatório



Forma Matricial
Dados de entrada
do modelo
Max L = 3X1 + 2X2
c = 3,2 Coeficientes de custo
2X1 + X2 ≤ 100
2 1 100
X1 + X2 ≤ 80 𝑥1
X1 ≤ 40 A= 1 1 x= 𝑥 b = 80
2
X1, X2 ≥ 0 1 0 40
Coeficientes tecnológicos Variáveis de decisão Lado direito
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
2. Estruturas de dados

Range:

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


2. Estruturas de dados
Exemplo– production model (OPL Language User’s Manual, p.13)

Forma Matricial
Dados de entrada c = 30 40
do modelo
1 1 b1
𝑥1
A= 3 4 x= 𝑥 b = b2
2
0 1 b3

String:
Vetor:

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


3. Operadores
Exemplo– production model (OPL Language User’s Manual, p.13)

Sum:

Forall:

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo– Programação Linear (Winston, 2004, p. 49)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 3 Exemplo:1 Arquivo: Ex1.mod

{string} Produtos = { "gas", "cloreto" };


{string} Componentes = { "nitrogenio", "hidrogenio", "cloro" };

float Demand[Componentes][Produtos] = [[1, 1], [3, 4], [0, 1]];


float Lucro[Produtos] = [30, 40];
float Estoque[Componentes] = [50, 180, 40];

dvar float+ Producao[Produtos];

maximize
sum( p in Produtos)
Lucro[p] * Producao[p];
subject to {
forall( c in Componentes )
ct:
sum( p in Produtos )
Demand[p][c] * Producao[p] <= Estoque[c];
Videos: https://www.youtube.com/watch?v=hRERBGQvJIU&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=4

Aula 4: Problema de Transporte

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 4

Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Powerco tem 3 usinas de energia elétrica que suprem a necessidade de 4


cidades. Cada usina pode suprir a seguinte quantidade de milhões de kilowatts-hora
de eletricidade: U1 = 35; U2 = 50; U3 = 40. As demandas de pico nas 4 cidades
ocorrem na mesma hora e são (em milhões de KWh): C1 = 45; C2 = 20; C3 = 30; C4 =
30.
Os custos de se enviar 1 milhão de kwh de eletricidade de uma usina para uma
cidade depende da distância que a eletricidade deve percorrer (tabela a seguir).
Formule um PL para minimizar o custo de atender pelo menos a demanda de pico
das cidades.
CUSTO (x106 KWh) CIDADE
USINA C1 C2 C3 C4
U1 8 6 10 9
U2 9 12 13 7
U3 14 9 16 5

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Restrições
• Capacidade produtiva das usinas • Demanda mínima das cidades
PRODUÇÃO MÁXIMA DEMANDA MÁXIMA
USINA CIDADE
(x106 KWh ) MENSAL
C1 45
U1 35
C2 20
U2 50
C3 30
U3 40 C4 30

Problema de Programação Linear


1. Variáveis de decisão xi j = 106 KWh produzidos na usina i e enviados à cidade j
2. Função objetivo
3. Restrições
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Problema de Programação Linear


1. Variáveis de decisão
Min 8x11 + 6x12 + 10x13 + 9x14 (custo de transporte da usina 1)
2. Função objetivo
+ 9x21 + 12x22 + 13x23 + 7x24 (custo de transporte da usina 2)
3. Restrições
+ 14x31 + 9x32 + 16x33 + 5x34 (custo de transporte da usina 3)
Restrições de suprimento
x11 + x12 + x13 + x14 ≤ 35 (suprimento de U1)
x21 + x22 + x23 + x24 ≤ 50 (suprimento de U2)
x31 + x32 + x33 + x34 ≤ 40 (suprimento de U3)
Restrições de demanda
x11 + x21 + x31 ≥ 45 (demanda de C1)
x12 + x22 + x32 ≥ 20 (demanda de C2)
x13 + x23 + x33 ≥ 30 (demanda de C3)
x14 + x24 + x34 ≥ 30 (demanda de C4)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Solução

CUSTO
CIDADE
(x106 KWh)
USINA C1 C2 C3 C4
U1 10 25
U2 45 5
U3 10 30

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 4 Exemplo:1 Arquivo: PTransporte.mod

//índices
int nUsinas = 3;
int nCidades = 4;

//Parâmetros
range Usinas = 1..nUsinas;
range Cidades = 1..nCidades;
//C1 C2 C3 C4
float Custo[Usinas][Cidades]=[[8, 6, 10, 9], //U1
[9, 12, 13, 7], //U2
[14, 9, 16, 5]]; //U3

float Capacidade [Usinas] = [35, 50,40];


float Demanda [Cidades] = [45, 20, 30, 30];

//Variáveis de decisão
dvar float+ Transportado[Usinas][Cidades];

//Expressões
dexpr float CustoTotal = sum (u in Usinas, c in Cidades)
Custo[u][c] * Transportado[u][c];

//Função Objetivo
minimize
CustoTotal;

subject to {
forall (u in Usinas)
SupplyConstraint:
sum (c in Cidades)
Transportado[u][c] <= Capacidade [u];

forall (c in Cidades)
DemandConstraint:
sum (u in Usinas) Transportado[u][c] >= Demanda[c];
}
Videos: https://www.youtube.com/watch?v=2U802J7fh5M&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=5

Aula 5: Separando o modelo do problema a partir dos dados da instância

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 5

Exemplo – Problema de Transporte (Winston, 2004, p. 360)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 5 Exemplo:1 Arquivo: PTransporte.mod

Modelo: PTransporte.mod

//Parâmetros
int nUsinas = ...;
int nCidades = ...;
range Usinas = 1..nUsinas;
range Cidades = 1..nCidades;
float Custo[Usinas][Cidades]=...;

float Capacidade [Usinas] = ...;


float Demanda [Cidades] = ...;

//Variáveis de decisão
dvar float+ Transportado[Usinas][Cidades];

//Função Objetivo
minimize
sum (u in Usinas, c in Cidades) Custo[u][c] * Transportado[u][c];

subject to {
forall (u in Usinas)
sum (c in Cidades)
Transportado[u][c] <= Capacidade [u];

forall (c in Cidades)
sum (u in Usinas) Transportado[u][c] >= Demanda[c];
}

Instância do problema: aula5.dat

nUsinas = 3;
nCidades = 4;

//C1 C2 C3 C4
Custo = [[8, 6, 10, 9], //U1
[9, 12, 13, 7], //U2
[14, 9, 16, 5]]; //U3

Capacidade = [35, 50,40];


Demanda = [45, 20, 30, 30];
Videos: https://www.youtube.com/watch?v=ohSdjSVF8ls&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=6

Aula 6: Problema de Mistura

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 6

Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

min  cixij
iI jJ

s.t.  xij = dj "jJ


iI
 xij si "iI
jJ

 aikxij ljk dj " j  J, kK


iI

 aikxij ujkdj " j  J, kK


iI
xij  " i  I, j  J

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)
Uma fábrica produz ração para gado, ovelhas e galinhas. Isto é feito com
a mistura dos seguintes ingredientes: milho, calcário, soja, e farinha de peixe.
Este ingredientes contêm os seguintes nutrientes: vitaminas, proteínas, cálcio
e gordura bruta. A tabela a seguir indica a quantidade de nutrientes por
quilograma de cada ingrediente.
Produtos, j
Ração para Ração para Ração par ,k
gado ovelhas galinhas
,i

Ingredientes, i
Milho Calcário Soja Farinha de Peixe

Nutrientes, k
aik = quantidade de nutriente k por kg do ingrediente i
Vitaminas Proteínas Cálcio Gordura bruta

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)
A fábrica foi contratada para produzir 10 toneladas de ração para gado, 6
toneladas de ração para ovelha e 8 toneladas de ração para galinha. Por causa
da escassez, existe um limite de quantidade disponível de cada ingrediente.
Estes limites são: 6 toneladas de milho, 10 toneladas de calcário, 4 toneladas de
soja e 5 tonelas de farinha de peixe. O preço por Quilograma de cada
ingrediente é respectivamente de R$ 0,20, R$ 0,12, R$ 0,24 e $ 0,12. A tabela
abaixo indica as quantidades mínimas e máximas de cada nutriente permitidas
para os três tipos de alimentos.
Demanda Kg (dj ) Suprimento ( si )
Ração para gado Ração para ovelhas Ração par galinhas Milho Calcário Soja Farinha de Peixe
10 ton 6 ton 8 ton 6 ton 10 ton 4 ton 5 ton

cost/kg ( ci )
Milho Calcário Soja Farinha de Peixe
R$ 0,20 R$ 0,12 R$ 0,24 R$ 0,12

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)
A fábrica foi contratada para produzir 10 toneladas de ração para gado, 6
toneladas de ração para ovelha e 8 toneladas de ração para galinha. Por causa
da escassez, existe um limite de quantidade disponível de cada ingrediente.
Estes limites são: 6 toneladas de milho, 10 toneladas de calcário, 4 toneladas de
soja e 5 tonelas de farinha de peixe. O preço por Quilograma de cada
ingrediente é respectivamente de R$ 0,20, R$ 0,12, R$ 0,24 e $ 0,12. A tabela
abaixo indica as quantidades mínimas e máximas de cada nutriente permitidas
para os três tipos de alimentos.

8
8
8

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

Problema de Programação Linear


1. Variáveis de decisão xij Quantidade (kg) do ingrediente i utilizado na produção
do produto j
2. Função objetivo
3. Restrições

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo min  cixij
iI jJ
3. Restrições

iI ingredientes { Milho, Calcário Soja, Farinha de peixe }

jJ products { ração de gado, ração de ovelha, ração de galinha }

ci Custo por kg do ingredient i

xij Quantidade
produto j
(kg) do ingrediente i utilizado na produção do

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

Problema de Programação Linear


1. Variáveis de decisão
2. Função objetivo
3. Restrições  xij = dj "jJ
iI
 xij si "iI
jJ

 aikxij ljk dj " j  J, kK


iI

 aikxij ujkdj " j  J, kK


iI
xij  " i  I, j  J

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício 1.3 – Problema de Mistura (BAZARAA, 2010, p. 29)

Índices/Conjuntos
min  cixij i  I ingredientes { Milho, Calcário Soja, Farinha de peixe }
iI jJ j  J products { ração de gado, ração de ovelha, ração de galinha }
k  K nutrientes { vitaminas, proteína, cálcio, gordura bruta}
s.t.  xij = dj "jJ
iI Dados
 xij si "iI dj Demanda do produto j (kg)
jJ si Fornecimento do ingrediente i (kg)
 aikxij ljk dj " j  J, kK ljk Limite inferior de nutrientes do tipo k por kg do produto j
iI
ujk Limite superior de nutrients do tipo k por kg do produto j
 aikxij ujkdj " j  J, kK
ci Custo por kg do ingredient i
iI
xij  " i  I, j  J aik Número de nutrientes k por kg do ingrediente i

xij Quantidade
produto j
(kg) do ingrediente i utilizado na produção do

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 6 Exemplo:1 Arquivo: PMistura.mod

Modelo: PMistura.mod

//Parâmetros
{string} Produtos = ...;
{string} Ingredientes = ...;
{string} Nutrientes = ...;
float a [Ingredientes][Nutrientes] = ...;
float Demanda [Produtos] = ...;
float CapacidadeFornecimento [Ingredientes] = ...;
float Custo [Ingredientes] = ...;
float LimiteInferior [Produtos][Nutrientes] = ...;
float LimiteSuperior [Produtos][Nutrientes] = ...;

//Variáveis de decisão
dvar float+ Producao[Ingredientes][Produtos];

//Função objetivo
minimize
sum (i in Ingredientes, p in Produtos) Custo[i]*Producao[i][p];

//Restrições
subject to{
forall (p in Produtos)
sum (i in Ingredientes) Producao[i][p] == Demanda [p];

forall (i in Ingredientes)
sum (p in Produtos) Producao[i][p] <= CapacidadeFornecimento
[i];

forall (p in Produtos)
forall (n in Nutrientes)
sum (i in Ingredientes) a[i][n]*Producao[i][p] >=
LimiteInferior[p][n] * Demanda[p];

forall (p in Produtos, n in Nutrientes)


sum (i in Ingredientes) a[i][n]*Producao[i][p] <=
LimiteSuperior[p][n] * Demanda[p];
}
Instância do problema: aula6.dat

Produtos = {"racao de gado","racao de ovelha","racao de galinha"};


Ingredientes = {"milho","calcario","soja","farinha de peixe"};
Nutrientes = {"vitaminas", "proteinas","calcio","gordura bruta"};

Demanda = [10000, 6000, 8000]; // Demanda das 3 rações

CapacidadeFornecimento = [6000, 10000, 4000, 5000]; //Estoque de


ingredientes

// N1 N2 N3 N4
a = [[8, 10, 6, 8],//I1
[6, 5, 10, 6],//I2
[10, 12, 6, 6],//I3
[4, 8, 6, 9]];//I4

// N1 N2 N3 N4
LimiteInferior = [[6, 6, 7, 4], //P1
[6, 6, 6, 4], //P2
[4, 6, 6, 4]];//P3

// N1 N2 N3 N4
LimiteSuperior = [[infinity, infinity, infinity, 8], //R1
[infinity, infinity, infinity, 8], //R2
[6 , infinity, infinity, 8]]; //R3

Custo = [0.20, 0.12, 0.24, 0.12]; // Custo Kg Ingrediente


Videos: https://www.youtube.com/watch?v=iYfPOGOzsHU&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=7

Aula 7: Lendo e escrevendo em planilhas do MS Excel

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 7

Lendo e escrevendo em planilhas do MS Excel

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Conectando com a planilha do MS Excel

Comando Nome e extensão do arquivo MS Excel

Ou

Comando Endereço Nome e extensão do arquivo MS Excel

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Lendo de uma planilha do MS Excel
Conecta com a planilha do MS Excel

Comando Nome da Pasta de trabalho Intervalo de dados


da planilha do MS Excel

Ou

Intervalo de dados nomeado no MS Excel

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Escrevendo em uma planilha do MS Excel

Comando Nome da Pasta de trabalho Intervalo de dados


da planilha do MS Excel

Ou

Intervalo de dados nomeado no MS Excel

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 7 Exemplo:1 Arquivo: PTransporte.mod

Modelo: PTransporte.mod

//Parâmetros
int nUsinas = ...;
int nCidades = ...;
range Usinas = 1..nUsinas;
range Cidades = 1..nCidades;
float Custo[Usinas][Cidades]=...;
float Capacidade [Usinas] = ...;
float Demanda [Cidades] = ...;

//Variáveis de decisão
dvar float+ Transportado[Usinas][Cidades];

//Função Objetivo
minimize
sum (u in Usinas, c in Cidades) Custo[u][c] * Transportado[u][c];

subject to {
forall (u in Usinas)
sum (c in Cidades)
Transportado[u][c] <= Capacidade [u];

forall (c in Cidades)
sum (u in Usinas) Transportado[u][c] >= Demanda[c];

Instância do problema: aula7.dat

nUsinas = 3;
nCidades = 4;

SheetConnection sheet("Dados.xlsx");
Capacidade from SheetRead(sheet,"'Planilha1'!B6:D6");
Demanda from SheetRead(sheet,"'Planilha1'!B8:E8");
Custo from SheetRead(sheet,"'Planilha1'!B2:E4");

Transportado to SheetWrite(sheet,"'Resultados'!B2:E4");
Aula: 7 Exemplo:2 Arquivo: PTransporte.mod

Modelo: PTransporte.mod

//Parâmetros
int nUsinas = ...;
int nCidades = ...;
range Usinas = 1..nUsinas;
range Cidades = 1..nCidades;
float Custo[Usinas][Cidades]=...;
float Capacidade [Usinas] = ...;
float Demanda [Cidades] = ...;

//Variáveis de decisão
dvar float+ Transportado[Usinas][Cidades];

//Função Objetivo
minimize
sum (u in Usinas, c in Cidades) Custo[u][c] * Transportado[u][c];

subject to {
forall (u in Usinas)
sum (c in Cidades)
Transportado[u][c] <= Capacidade [u];

forall (c in Cidades)
sum (u in Usinas) Transportado[u][c] >= Demanda[c];

Instância do problema: aula7.dat

nUsinas = 3;
nCidades = 4;

SheetConnection sheet("Dados.xlsx");
Capacidade from SheetRead(sheet,"Capacidade");
Demanda from SheetRead(sheet,"Demanda");
Custo from SheetRead(sheet,"Custo");
Videos: https://www.youtube.com/watch?v=4lp0BPTyXx0&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=8

Aula 8: IBM ILOG Script (pré e pós-processamento)

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 8

1. Tela principal e guias da área de saída


2. IBM ILOG Script

Requisitos:

Noções básicas de programação

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


AULA 8

Tela principal e guias da área de saída

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Tela principal IDE OPL

Área de edição
Outline
Barra de execução
Barra de ferramentas padrão

Navegador de projetos

Navegador de problemas

Guias de seleção da
área de saída

Área de saída
Barra de status

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia de problemas

Problems displays semantic and syntax errors as you type when you write a model manually,
and internal errors, such as scripting or algorithm errors, when you solve a model.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia Log de Script

Scripting log shows execution output related to the IBM® ILOG® Script main or execute or prepare blocks of the
model (if applicable).

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída
Guia de Soluções

Solutions displays the final solution to a model and, if applicable, any intermediate feasible solutions found.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia de Conflitos

For infeasible CPLEX® models, Conflicts shows the places where you can change the data or the way filtering constraints
are expressed so as to remove the incompatibilities that made the model infeasible.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia de Log do mecanismo

For infeasible CPLEX models, Relaxations shows the places that constraints can be relaxed to remove the
incompatibilities that made the model infeasible.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia de Log do mecanismo

Engine log displays information from the solving engine (CPLEX or CP Optimizer) on the solving process and
on the objective function.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia de Estatísticas

Exibe, dentre outras informações, o algoritmo e número de iterações

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída Guia do Gerenciador de Perfis

Profiler is a tool that computes the time and memory used by each execution step and displays it as a table. You can use this
information to improve the model so that it executes faster and consumes less memory. It also displays details of model extraction
and engine search during the solving phase.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Área de saída

Guia servidores CPLEX

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


AULA 8

IBM ILOG Script

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


IBM ILOG Script
IBM ILOG Script is an embedded JavaScriptTM implementation to handle the non-modeling needs of OPL.

IBM ILOG Script can be added to any OPL model or data file.

O IBM ILOG Script está incorporado na OPL para fornecer funcionalidade de script* para:

• Pré-processamento de dados no arquivo .mod


• Pós-processamento de dados no arquivo .mod
• Processamento e formatação de dados no arquivo.dat
• Definição de parâmetros;
• Controle de fluxo.

* Script – sequência de comandos

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


IBM ILOG Script
Pré-processamento
• Preparação dos dados - para solução do modelo;
• Pré-resolução - para redução do tamanho do problema;
• Agregação – para eliminar variáveis e linhas por substituição

Pós-Processamento
• Utilizado para manipular as soluções e controlar as saídas, exibição dos dados.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


IBM ILOG Script
Pré-processamento e Pós-Processamento
Bloco de argumentos
Exemplo (Pós-processamento) [Aula 3]

Variáveis de decisão

Se o bloco execute for colocado antes da


declaração dos objetivo ou restrições trata-se
de um “pré-processamento”, caso contrário,
“pós-processamento”.

Postprocessing is available after a solution is found

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Videos: https://www.youtube.com/watch?v=f_Gw3CDFbsc&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=9

Aula 9: Planejamento agregado

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 9

Exemplo – Planejamento agregado

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Planejamento agregado
Uma fábrica de contentores de madeira tem capacidade de produção de 5500 unidades por mês, gerando
um custo de R$ 13,00 por unidade. Se necessário, existe a possibilidade de realizar horas extras, aumentando
a produção mensal em até 1300 unidades, com o custo de R$ 18,00 por unidade. Se a produção for superior à
demanda, ela pode ser armazenada de um mês para outro custando R$1,50 por unidade.
A tabela abaixo representa a previsão de demanda realizada pelo setor de planejamento da empresa para
o ano de 2017. Elabore um modelo que reduza o custo total de operação de produção da empresa.

Mês Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez TOTAL
Demanda 5100 5200 5400 5700 5800 5500 5200 5400 5800 5500 5300 5100 65000
Estoque inicial 0
Produção
Regular
H.E.
Total
Estoque final

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Planejamento agregado

Mês Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez TOTAL
Demanda 5100 5200 5400 5700 5800 5500 5200 5400 5800 5500 5300 5100 65000

Capacidade de produção mensal em regime normal = 5500 unid.


Dados Capacidade de produção mensal em regime de horas extras = 1300 unid.

Custo unitário
Normal Horas extras Estoque
R$13,00 R$18,00 R$1,5

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Planejamento agregado

1. Variáveis de decisão

2. Função objetivo

3. Restrições

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exemplo – Planejamento agregado

Exemplo

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Exercício

Exemplo – Modelo de estoque (Winston, 2004, p. 100)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 9 Exemplo:1 Arquivo: PlanejamentoAgregado.mod

Modelo: PlanejamentoAgregado.mod

// Índices e Parâmetros
int p = ...;
range n = 1..p;
range m = 0..p;
float a = ...;
float b = ...;
float c = ...;
int d [n] =...;
int k =...;
int l = ...;
// Variáveis de decisão
dvar int+ N[n];
dvar int+ H[n];
dvar int+ E[m];
// Função objetivo
minimize
sum(i in n)
(a*N[i] + b*H[i] + c*E[i]);
//Restrições
subject to {
E[0]==0; //Estoque inicial
forall (i in n)
E[i-1] + N[i] + H[i]- E[i] == d[i];
forall (i in n)
N[i] <= k;
forall (i in n)
H[i]<=l;
}
execute RESULTADOS {
writeln("Planejamento agregado de produção");
for (var i in n){
writeln("mes:", i);
writeln("produção H.Normal:", N[i]);
writeln("produção em H.Extra",H[i]);
writeln("estoque:",E[i]);
writeln("custo:", a*N[i] + b*H[i] + c*E[i])
}
}
Instância do problema: aula9.dat

p = 12; //Períodos
a = 13;//Custo de prod. em reg. de Hora Normal
b = 18;//Custo de prod. em reg. de Hora Extra
c = 1.5;//Custo de estocagem por unid.
d = [5100, 5200, 5400, 5700, 5800, 5500, 5200, 5400, 5800, 5500,
5300, 5100];//Demanda
k = 5500; // Cap. de prod. em regime Normal no período i
l = 1300; //Cap. de prod. em regime de Horas Extras no período i
Videos: https://www.youtube.com/watch?v=VuLE3nrMYRQ&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=10

Aula 10: IBM ILOG Script (pré-processamento)

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 10

1. OPL Functions
2. IBM ILOG Script (pré-processamento)

Requisitos:

Noções básicas de programação

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. OPL Functions
Link:
https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.3/ilog.odms.ide.help/OPL_Studio/opllang_
quickref/topics/opl_functions_top.html

IDE and OPL > Optimization Programming Language (OPL) > Language Quick Reference

Função OPL - rand Exemplo


Função predefinida que retorna um
Int n = 10;
número inteiro aleatório.
Range i = 1..n;
int r1[ i ] = rand(10);
Sintaxe:
rand(int);

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. OPL Functions
Definição de função

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.4.0/ilog.odms.ide.help/OPL_Studio/opllangr
ef/topics/uss_langref_scriptStructure_21.html

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.4.0/ilog.odms.ide.help/OPL_Studio/opllangr
ef/topics/uss_langref_scriptStructure_20.html

Sintaxe Exemplo
function average(a, b) {
function name (v1, ..., vn)
var sum = a+b
{statements} var res = sum/2

return [ expression ] return res


}

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


2. Pré-processamento
Gerando instâncias para o “Problema do Caixeiro Viajante (PCV)”

Localização das cidades


Coordenadas 120
(21,24)
100
(21,10)
(42,99) 80
(66,83)
60
y
(59,6)
(89,21) 40
(95,1)
(24,72) 20
(35,72)
0
(0,88) 0 20 40 60 80 100
x
Descrição do PCV: https://www.youtube.com/watch?v=_vKMyRj855A
Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
2. Pré-processamento
Gerando instâncias para o “Problema do Caixeiro Viajante (PCV)”
Calculando a distância entre dois pontos

Por se tratar de um triângulo retângulo,


podemos aplicar o teorema de Pitágoras.

AB é a hipotenusa do triângulo AOB, e corresponde à


distância entre esses dois pontos.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Videos: https://www.youtube.com/watch?v=fuycpZHVGss&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=11

Aula 11: Parâmetros formais / Filtros / Rótulos / Expressões

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


AULA 9
1. Parâmetros formais
2. Aplicando filtros no range dos parâmetros formais
3. Rótulo de restrições
4. Expressões

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Parâmetros formais
Os parâmetros formais desempenham um papel Exemplo
fundamental na OPL. Eles são usados em operadores
agregados, conjuntos genéricos e para todas as
declarações.

• p é um parâmetro formal e
• S é um conjunto de onde se obtém p

Sum (u in 1..3, c in 1..4)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Aplicando filtros no range dos parâmetros formais
Exemplo

• p é um parâmetro formal e
• S é um conjunto de onde se obtém p
• Atribui a p todos os elementos de S de
acordo com o filtro aplicado

Lista de restrições lógicas que o CPLEX pode extrair

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Rótulos de restrições
Os rótulos de restrição são usados em três casos:

1. Ações de expansão da IDE;


2. Em valores de folga e dual;
3. Com relaxamento e detecção de conflitos.

É uma prática recomendada, mas tem um custo de desempenho. Se você não precisa de um desses três casos
de uso, você deve se livrar do rótulo para acelerar a execução e menor consumo de memória.

Sintaxe Exemplo – Aula 4: Problema de transporte


Digite a seqüência de caracteres que você
deseja, seguida do sinal de dois pontos (:)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Rótulos de restrições
Outline

Navegador de problemas

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Expressões
A palavra-chave dexpr permite que você Exemplo – Aula 4: Problema de transporte
crie expressões de decisão reutilizáveis.

De fato, se uma expressão tem um


significado particular em termos do
problema original, escrevê-lo como uma
expressão de decisão (dexpr) torna o
modelo mais legível.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Videos: https://www.youtube.com/watch?v=czhXZWCO048&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=12

Aula 12: Problema do Caixeiro Viajante (PCV)

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


1. Problema do Caixeiro Viajante (PCV)
Referência

MILLER, Clair E.; TUCKER, Albert W.; ZEMLIN, Richard A. Integer programming formulation of traveling salesman
problems. Journal of the ACM (JACM), v. 7, n. 4, p. 326-329, 1960.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema do Caixeiro Viajante (PCV)
Um vendedor deve visitar n de cidades. Ele parte de uma cidade base, indexada por 0,
visita cada uma das outras cidades uma única vez e retorna à cidade 0. Qual a ordem
das visitas que minimiza a distância total percorrida?
120

100

80

60
y

40

20

0
0 20 40 60 80 100
x

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema do Caixeiro Viajante (PCV)
Variáveis de decisão i, j : cidades

dij : distância percorrida da


cidade i para a cidade j
Função objetivo
ui , uJ: variáveis auxiliares
para eliminar as
Fluxo de entrada: subrotas
O vendedor procede da cidade i para a
cidade j se e somente se xij = 1.

Fluxo de saída:
O vendedor retorna da cidade j para a
cidade i se e somente se xij = 1.

Eliminar subrotas

Restrições de sinal

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema do Caixeiro Viajante (PCV)
Exemplo:

n = 10 (n◦ de cidades)

1
1 – 8 + 10.( 1 ) <= 10 – 1
-7 + 10.( 1 )<= 9
5
8

1
5 – 1 + 10 ( 1) <= 10-1
5 4 + 10 <= 9
8

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema do Caixeiro Viajante (PCV)
Referências

Descrição do problema
O matemático Rogério Martins fala sobre o Problema do Caixeiro Viajante
https://www.youtube.com/watch?v=_vKMyRj855A

Formulação

NPTEL Lecture series on Advanced Operations Research by Prof. G.Srinivasan


https://www.youtube.com/watch?v=-cLsEHP0qt0

Yong Wang. Binghamton University


https://www.youtube.com/watch?v=nRJSFtscnbA

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Videos: https://www.youtube.com/watch?v=0JgwWP8KeGE&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=14

Aula 13a: Problemas de corte unidimensional

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


Problema de corte unidimensional

Referência
ARENALES, Marcos et al. Pesquisa operacional: para cursos de engenharia. Elsevier Brasil, 2015.

GILMORE, Paul C.; GOMORY, Ralph E. A linear programming approach to the cutting stock problem—Part II. Operations
research, v. 11, n. 6, p. 863-888, 1963.

Instâncias

BISSCHOP, Johannes. AIMMS optimization modeling. Lulu. com, 2006.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional
Consiste no uso de estratégias para a produção de itens (peças pequenas), a
partir do corte de um objeto (peça grande), garantindo que a perda do material
utilizado seja mínima.

(a) (b) (c)


Fonte:
Cerqueira (2009) Objeto em estoque Itens demandados Padrões de corte
1. Problema de Corte unidimensional
EX1

Função objetivo - representa a minimização do n◦ de barras cortadas de acordo com os n padrões

Restrição 1 – garante o atendimento da demanda

Restrição 3 – Indica o tipo das variáveis. 𝑍+𝑛 representa o espaço dos vetores com n
componentes inteiras não negativas.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional
EX2

Função objetivo - representa a minimização do custo ou perda

Restrição 1 – garante o atendimento da demanda

Restrição 3 – Indica o tipo das variáveis. 𝑍+𝑛 representa o espaço dos vetores com n
componentes inteiras não negativas.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional
EX3

Função objetivo - representa a minimização do n◦ de barras

Restrição 1 - Assegura que a demanda bj seja atendida

Restrição 2 – Garante que se a barra i é usada, o comprimento


total dos itens é limitado pelo comprimento de L da barra

Restrição 3 – Indica o tipo das variáveis. 𝐵+𝑛 representa o espaço dos vetores com n
componentes binárias e 𝑍+𝑚𝑛 representa o espaço dos vetores com mn componentes
inteiras não negativas.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


Código

Aula: 13 Exemplo:1 Arquivo: Corte1D.mod

Modelo: Corte1D.mod

//Índices
int padrao = 37;
range n = 1..padrao;
int itens = 4;
range m = 1..itens;

//Parâmetros
int L=1000;
int perda[n];
int subtotal[n];

float a[m][n]=...;
int l[m] = [450, 360, 310, 140];//largura
int b[m] = [97, 610, 395, 211]; //demanda do item
int demantotal;
int prodtotal;
int perdatotal;

//variáveis de decisão
dvar int+ x[n];

//função objetivo
minimize
sum (i in n) x[i];

subject to {
forall (j in m)
sum(i in n) a[j][i]*x[i] >= b[j];
}
//pósprocessamento
execute PERDA {

//padrões de corte
for (var i in n){
writeln("-----")
if(x[j][i]!=0){
cont = cont + 1;}
writeln("-----");
for (var j in m)
writeln(x[j][i])}

//cálculo da perta
for (var i in n)
for (var j in m)
subtotal[i] = subtotal[i] + x[j][i]*l[j];

for (var j in m)
demantotal = demantotal + l[j]*b[j];

for (var i in n)
prodtotal = prodtotal + subtotal[i];

}
Instância do problema: aula13a.dat

//37 padrões de corte para a matéria prima de 1000cm


//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
a = [[2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], //450 cm
[0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], //360 cm
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 3, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], //310 cm
[0, 1, 0, 1, 0, 3, 2, 1, 0, 2, 1, 0, 0, 2, 1, 0, 4, 3, 2, 1, 0, 0, 2, 1, 0, 4, 3, 2, 1, 0, 7, 6, 5, 4, 3, 2, 1]];//140 cm
Videos: https://www.youtube.com/watch?v=bOQj-ymJceI&list=PLznAQEiaot1DzeDKIqTY-2wLigSktq__A&index=15

Aula 13-b: Problemas de corte bidimensional

IDE OPL (Optimization Programming Language)

Apresentado por: William de Paula Ferreira

Escola Politécnica da USP

Gestão de Operações e Logística (GOL)


Problema de corte bidimensional

Referência
ARENALES, Marcos et al. Pesquisa operacional: para cursos de engenharia. Elsevier Brasil, 2015.

BEASLEY, J. E. An exact two-dimensional non-guillotine cutting tree search procedure. Operations Research, v. 33, n. 1, p.
49-64, 1985.
Instâncias

CHRISTOFIDES, Nicos; WHITLOCK, Charles. An algorithm for two-dimensional cutting problems. Operations Research, v.
25, n. 1, p. 30-44, 1977.

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte bidimensional
Este problema envolve apenas uma placa que deve ser cortada em um
número de peças retangulares de modo a otimizar algum objetivo, por
exemplo, maximizar a utilização da placa.

a) estoque b) demanda c) Corte para atender a demanda


1. Problema de Corte unidimensional
• Considere uma placa retangular (L0, W0) de comprimento L e largura W
a ser cortada em m tipos de peças retangulares menores;
• A peça do tipo i tem tamanho ( i, wi) e valor vi;
• Sejam P e Q o número mínimo e máximo de peças do tipo i que podem
ser cortadas da placa, 0 ≤ Pi ≤ Qi, i = 1,...,m.
Instâncias

Fonte: Christofides (1977)

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional
• Adimita que:
 L, W, i , wi, i = 1,...,m são inteiros;
 Os cortes são ortogonais a um lado da placa;
 A orientação das peças é fixa, isto é, uma peça de comprimento i e largura wi é
diferente de uma peça de comprimento wi e largura i ( i ≠ wi).

• Defina

Para impedir contagem dupla quando duas peças são adjacentes, defina

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional

• Defina as variáveis

Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL


1. Problema de Corte unidimensional
Formulação do problema de corte bidimensional não guilhotinado

Função objetivo - representa a maximização da


utilidade total das peças cortadas

Restrição 1 - garante que qualquer ponto (r,s) é


excluído do máximo por uma peça (restrição de
sobreposição de peças).

Restrição 2 – forçam que o número de


peças de cada tipo i esteja situado na
faixa requerida.

Fonte: Beasley (1995)


Introdução ao IBM ILOG CPLEX Optimization Studio | IDE OPL
Código

Aula: 13b Exemplo:1 Arquivo: Corte2D.mod

Modelo: Corte2D.mod

//índices
int sretangles = 10; // number of smaller rectangular pieces i
range m = 1..sretangles; // A0 is to be cut into m smaller
rectangular pieces

int L0=40; // Length of rectangle A0


int W0=70; // width of rectangle A0

//Orientation of the cut pieces with respect to A0


range L = 0..L0-1; //achievable lengths for the locations of the
bottom left-hand corners of cut pieces
range W = 0..W0-1; // corresponding set for the widths

//parâmetros
int l[m]=[21, 31, 9, 9, 30, 11, 10, 14, 12, 13];// length of the
smaller rectangular piece i
int w[m]=[22, 13, 35, 24, 7, 13, 14, 8, 8, 7];// width of the
smaller rectangular piece i
int v[m]=[582, 403, 315, 216, 210, 143, 140, 110, 94, 90];// value
of the smaller rectangular piece i

//obs posso fazer uma string para calcular isso int A0 / lxw
int Q[m]= [1, 1, 3, 3, 2, 3, 1, 3, 3, 3];//minimum number of
pieces of type i that can be cut from A0
int P[m]= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];//maximum number of
pieces of type i that can be cut from A0
int a[i in m][p in L][q in W][r in L][s in W]; //to prevent double
counting when 2 pieces are cut adjacent to one another

execute calc_a{
for (var i in m )
for (var p in L)
for (var q in W)
for(var r in L)
for (var s in W)
if (0<=p && p<=r && r <= ((p+l[i])-1)
&& ((p+l[i])-1) <= (L0-1) && 0<=q && q <= s && s <= ((q+w[i])-1)
&& ((q+w[i])-1) <= (W0-1)){
a[i][p][q][r][s] = 1;
}
else {
a[i][p][q][r][s] = 0;
}
}

//variáveis de decisão
//if a piece of type i is cut
dvar boolean x[i in m][p in L][q in W];

//função objetivo
maximize
sum(i in m, p in L, q in W : 0<=p && p<=(L0-l[i]) && 0<=q &&
q<=(W0-w[i])) v[i]*x[i][p][q];

//restrições
subject to{

rest1:
forall(r in L, s in W)
sum(i in m, p in L, q in W: 0<=p && p<=(L0-l[i]) && 0<=q &&
q<=(W0-w[i])) a[i][p][q][r][s]*x[i][p][q] <= 1;

rest2:
forall(i in m){
sum(p in L, q in W) x[i][p][q] >= P[i];
sum(p in L, q in W) x[i][p][q] <= Q[i];}

View publication stats

Você também pode gostar