You are on page 1of 17

Softwares de Otimizao

Introduo
Pacotes de otimizao so ferramentas para modelagem e
resoluo de problema de Programao Linear, Programao
Linear Inteira, Programao No Linear ...

Os pacotes adotam linguagens de modelagem para


especificao dos problemas.

Fornecem ao programador interfaces para linguagens de


programao (C, C++, Java, Python, etc. ).

Possibilitam a gerao de relatrios para avaliao dos


resultados.
Introduo

Dados

Solver Soluo

Modelo
Exemplos de Solvers:
IBM CPLEX
Mais conhecido, rpido, robusto, interfaces amigveis;
Suporte a: C, C++, C#, Java e Python;
Licena: Software proprietrio;
Academic Initiative: Temos acesso.

Gorubi
Suporte a: C, C++, Java, .NET e Python;
Linguagem de modelagem: AIMMS, AMPL, GAMS, e
MPL.
Licena: Software proprietrio
Exemplos de Solvers:
GNU Linear Programming Kit (GLPK)
Suporte a: C, C++, Java
Linguagem de modelagem: GAMS e GMPL
(Subconjunto de AMPL).
Licena: Software Livre.

Outros:
XPRESS, Mosek, CERES, etc.
Solvers: benchmark

Figura. 1. Resultados extrados de: http://plato.asu.edu/ftp/milpf.html


Apresentaremos:

Linguagem de modelagem: AMPL(GMPL)

linguagens de programao: C/C++

Solvers: GLPK e Cplex


Arquivo de Arquivo com
dados modelo

Soluo e
AMPL(GMPL)
Relatrios

Instncia Soluo

Solver
AMPL(GMPL)
Modelos AMPL envolvem variveis, restries, objetivos,
parmetros e conjuntos.

uma linguagem case sensitive: faz distino entre maiscula


e minuscula.

Expresses terminam com ponto e vrgula.


Ex.: minimize obj: sum{j in Foods} cost[j]*quantity[j];

Strings so delimitadas por aspas simples ou duplas.


Ex.: This is a string, "This is another string"

Comentrios so definidos por: # ou /* e */


Ex.: # isso um comentrio
/* isso outro comentrio. */
GMPL e GLPK
Conjuntos:
Ex: set V = {1, 2, 3, 4, 5};
set A = {v1, v2, v3, v4, v5};
set Foods;

Parmetros: qualquer valor para uma instncia de


determinado problema.
Ex.: param c {i in V, j in V: i!= j } >= 0;
param cost{Foods} >= 0;

Declarao de variveis:
Ex.: var x >= 0 <= 20;
var x {i in V, j in V: i != j} binary;
var quantity{Foods} >= 0;
GMPL e GLPK
Declarao das restries
Ex.: subject to {
<desigualdade 1>;
<desigualdade 2>;
}
ou
suject to cardinality: sum {e in E} x[e] = n-1;
subject to blue_limit: 0 <= PaintB <= 1000;
ou
s.t. minnutr{i in Nutrients}:
sum{j in Foods} amount[i,j]*quantity[j] >= minimum[i];
GMPL e GLPK
Declarao da funo objetivo
maximize (minimize) <nome>: <funo>

Ex.:
maximize obj: sum{j in V} cost[j]*x[j];
or
minimize obj: sum{j in V} cost[j]*x[j];
Exemplo: Problema da Dieta
Uma ma contm: 5 unidades do nutriente A - 5 unidades do nutriente B
10 unidades do nutriente C - Custa R$ 2,00

Um po contm: 2 unidades do nutriente A - 10 unidades do nutriente B


1 unidade do nutriente C - Custa R$ 1,00.

Um doce contm: 3 unidades do nutriente A - Custa R$0,20.

Preciso ingerir: 30 unidades do nutriente A


50 unidades do nutriente B
30 unidades do nutriente C

Quantas unidades de ma, po ou doce eu compro para satisfazer a dieta


com o menor custo?
Exemplo: Problema da Dieta (dados)
set Foods := apples, breads, candies;
set Nutrients := nutrient _a, nutrient_b, nutrient_c;
param cost :=
apples 2
breads 1
candies 0.2;
param amount: apples breads candies :=
nutrient_a 5 2 3
nutrient_b 5 10 0
nutrient_c 10 1 0;
param minimum :=
nutrient_a 30
nutrient_b 50
nutrient_c 30;
end;

Arquivo: dieta.data
Exemplo: Problema da Dieta (modelo)
# Declare sets
set Foods; Executar.
set Nutrients;
glpsol --model dieta.mod \
# Declare variables --data dieta.data \
var quantity{Foods} >= 0;
--output dieta.sol
# Declare parameters
param cost{Foods} >= 0;
param amount{Nutrients, Foods} >= 0;
param minimum{Nutrients} >= 0;

# Objective function
minimize obj: sum{j in Foods} cost[j]*quantity[j];

# Declare constraints
s.t. minnutr{i in Nutrients}:
sum{j in Foods} amount[i,j]*quantity[j] >= minimum[i];
end;

Arquivo: dieta.mod
Glpk e C/C++
Maximize obj: x1 + 2 x2 + 3 x3 + x4
Subject To
c1: - x1 + x2 + x3 + 10 x4 <= 20
c2: x1 - 3 x2 + x3 <= 30
c3: x2 - 3.5 x4 = 0
Bounds
0 <= x1 <= 40
2 <= x4 <= 3
General
x2, x3
End
Glpk e C/C++

You might also like