You are on page 1of 34

INF 280 Xpress-MP

Prof. Jos Elias C. Arroyo

Xpress-MP
um ferramenta de modelagem e otimizao matemtica desenvolvida

pela: FICOTM

http://www.fico.com Xpress Solver Xpress-Optimizer: features optimization algorithms which enable you to solve linear problems (LP), mixed integer problems (MIP), quadratic problems (QP), mixed integer quadratic problems (MIQP), quadratically constrained prob lems (QCQP) and convex general non-linear problems (NLP). Xpress-SLP: is a solver for non-linear programming problems (NLP) and mixed integer non-linear non-convex problems (MINLP). Xpress-Kalis: is Constraint Programming software. It specializes on discrete combinatorial problems as they frequently occur, for instance, in scheduling and planning problems.

Xpress-MP
Modelagem de Problemas e Resoluo:
Xpress-Mosel: allows you to formulate your problem, solve it

using one or several of the Xpress solver engines, and analyze the solution, using a fully-functional compiled programming language specifically designed for the purpose. The Xpress-Mosel environment comprises the Mosel language with its debugger; modules and I/O drivers for accessing other software components and external data sources directly in this language; libraries for embedding models into applications; and an open interface for userwritten extensions to the Mosel language. Xpress-BCL: is an object-oriented library for building, solving, and analyzing problems directly within an application. Xpress-IVE: is a complete visual development environment for under Windows. It incorporates a Mosel program editor, compiler and execution environment.

Xpress-MP
Verso Estudante Xpress-Optimizer Xpress-Mosel Xpress-IVE http://optimization.fico.com/student-version-of-ficoxpress.html

Xpress-Mosel (exemplo de modelo)


model marcenaria uses "mmxprs" ! Estamos usando Xpress-MP Optimizer declarations x1, x2: mpvar ! Variaveis de decisao Lucro: linctr !Para funo e restries lineares end-declarations Lucro := 10*x1 + 15*x2 ! funao objetivo x1 + 3*x2 <= 200 ! m2 madeira 3*x1 + 2*x2 <= 160 ! Horas ! As variveis so >=0 por default maximize (Lucro) !Resolver o problema writeln ("Soluo de PL:") !imprimindo a soluo writeln ("Funo Objetivo: ", getobjval) writeln ("Fabricar ", getsol(x1), " cadeiras") writeln ("Fabricar ", getsol(x2), " mesas") end-model

Xpress-Mosel (exemplo de modelo)


model marcenaria uses "mmxprs" ! Estamos usando Xpress-MP Optimizer declarations x1, x2: mpvar ! Variaveis de decisao end-declarations Lucro := 10*x1 + 15*x2 ! funao objetivo Madeira := x1 + 3*x2 <= 200 ! m2 madeira Mao_de_Obra := 3*x1 + 2*x2 <= 160 ! Horas ! As variveis so >=0 por default maximize (Lucro) !Resolver o problema writeln ("Soluo de PL:") !imprimindo a soluo writeln ("Funo Objetivo: ", getobjval) writeln ("Fabricar ", getsol(x1), " cadeiras") writeln ("Fabricar ", getsol(x2), " mesas") end-model

Xpress-IVE (Editor)
Run Model

Os resultados so exibidos aqui

Xpress-Mosel (exemplo de modelo)


Incio e final do model marcenaria modelo uses "mmxprs" ! Estamos usando Xpress-MP Optimizer declarations Nome do modelo x1, x2: mpvar ! Variaveis de decisao end-declarations Para usar bibliotecas

Lucro := 10*x1 + 15*x2 ! funao objetivo Madeira := x1 + 3*x2 <= 200 ! m2 madeira Mao_de_Obra := 3*x1 + 2*x2 <= 160 ! horas maximize (Lucro) !Resolver o problema writeln ("Soluo de PL:") !imprimindo a soluo writeln ("Funo Objetivo: ", getobjval) writeln ("Fabricar ", getsol(x1), " cadeiras") writeln ("Fabricar ", getsol(x2), " mesas") end-model

do Xpress-MP Optimizer Declarao de variveis de deciso mpvar Funo objetivo e restries Maximizar a Funo objetivo Escreve os valores da soluo

Xpress-Mosel
getobjval : retorna o valor da funo objetivo getsol(x) : retorna o valor timo da varivel x

Sada dos resultados:


Output/Input

Soluo de PL: Funo Objetivo: 1057.14 1 Fabricar 11.4286 cadeiras Fabricar 62.8571 mesas

writeln ("Soluo de PL:") !imprimindo a soluo writeln ("Funo Objetivo: ", getobjval) writeln ("Fabricar ", getsol(x1), " cadeiras") writeln ("Fabricar ", getsol(x2), " mesas")

Xpress-IVE

Custos reduzidos

Xpress-IVE

Variveis de folga Preos duais dos recursos

Estrutura de um Programa em Mosel


model NomePrograma uses "mmxprs" declarations !Declaro de constantes (dados de entrada) e variveis funcaoObjetivo: linctr end-declarations !Leitura ou inicializao dos dados de entrada do problema !Defino da funo_objetivo: funcaoObjetivo := !Definio das Restries: maximize (funcaoObjetivo) !impresso dos resultados end-model

Criando um Novo Modelo


.

Criando um Novo Modelo


.

Criando um Novo Modelo


.

Modelo Para o Problema da Dieta


xi = quantidade do alimento i a ser inserida na dieta, (i = carne, ....,

laranja).

Min f = 0,5x1 + 0,18 x2 + 0,2 x3 + 0,16 x4 + 0,30 x5 + 0,18x6 S.a: 225 x1 + 364 x2 + 337 x3 + 385 x4 + 15 x5 + 42 x6 3200 7 x1 + 0 x2 + 2 x3 + 0 x4 + 87 x5 + 13 x6 750 0 x1 + 0 x2 + 3 x3 + 0 x4 + 12 x5 + 59 x6 70 2,9 x1 + 1,3 x2 + 7,6 x3 + 0,1 x4 + 1,3 x5 + 0,7 x6 10 11x1 + 9 x2 + 86 x3 + 0 x4 + 43x5 + 34 x6 650 xi 0, i=1,...,6.

Modelo geral do problema da Dieta


n = nmero de alimentos. m = nmero de nutrientes. ci = custo de uma unidade do alimento i. aij = quantidade do nutriente j no alimento i. bj = quantidade mnima do nutriente j que a dieta deve conter. Varivel de deciso: xi = quantidade do alimento i a ser usada na dieta (valor real).
n

min f ( x1 ,..., xn )
n

ci xi
i 1

s.a.

a ji xi b j ;
i 1

j 1,..., m.

xi 0; i 1,..., n.

Modelo Para o Problema da Dieta


Min f = 0,5x1 + 0,18 x2 + 0,2 x3 + 0,16 x4 + 0,30 x5 + 0,18x6 225 x1 + 364 x2 + 337 x3 + 385 x4 + 15 x5 + 42 x6 3200 7 x1 + 0 x1 + 11x1 + 0 x2 0 x2 + 2 x3 + 3 x3 + 0 x4 + 87 x5 + 13 x6 750 + 0 x4 + 12 x5 + 59 x6 70

2,9 x1 + 1,3 x2 + 7,6 x3 + 0,1 x4 + 1,3 x5 + 0,7 x6 10 9 x2 + 86 x3 + 0 x4 + 43x5 + 34 x6 650

Dados de entrada: c = [0.5, 0.18, 0.2, 0.16, 0.30, 0.18 ] b = [3200, 750, 70, 10, 650 ] a = [ 225, 364, 337, 385, 15, 42, 7, 0, 2, 0, 87, 13, 0, 0, 3, 0, 12, 59, 2.9, 1.3, 7.6, 0.1, 1.3, 0.7, 11, 9, 86, 0, 43, 34 ]

Modelo Para o Problema da Dieta


model Dieta uses "mmxprs" declarations n = 6 ! Numero de alimentos m = 5 !numero de nutrientes c : array (1..n) of real ! Custo dos alimentos b: array (1..m) of real ! Quantidade de nutrientes minimos a: array ( 1..m, 1..n) of real x: array (1..n) of mpvar ! Varivel de decisao end-declarations !inicializao dos dados de entrada do problema: c :: [0.5, 0.18, 0.2, 0.16, 0.30, 0.18 ] b ::[3200, 750, 70, 10, 650 ] a :: [ 225, 364, 337, 385, 15, 42, 7, 0, 2.9, 11, 0, 0, 9, 2, 3, 0, 87, 13, 0, 12, 59,

1.3, 7.6, 0.1, 1.3, 0.7, 86, 0, 43, 34 ]

Modelo Para o Problema da Dieta


!Defino da funo_objetivo CustoTotal := sum(i in 1..n) c(i)*x(i) !Defino das restries forall (j in 1..m) sum(i in 1..n) a(j,i)*x(i) >= b(j) !Resolve o modelo minimize (CustoTotal ) !Impresso dos resultados writeln (Funo Objetivo: ", getobjval) forall (i in 1..n) writeln(" x(", i, ")= ", getsol(x(i))) end-model

Modelo Para o Problema da Mochila


Max 15x1 + 100x2 + 90x3 + 60x4 + 40x5 + 15x6 + 10x7 + 1x8 s.a. 2x1 + 20x2 + 20x3 + 30x4 + 40x5 + 30x6 + 60x7 + 10x8 <= 102 xi {0,1}, i =1,,8 Modelo Genrico: n =nmero de itens ci = lucro de cada item i pi = peso de cada item I Cap = capacidade da mochila xi = varivel de deciso

Max s.a.

ci xi
i 1 n

pi xi Cap
i 1

xi binrio, i 1,...n

Modelo Para o Problema da Mochila


model mochila1 uses "mmxprs" declarations n=8 Custo : array (1..n) of real Peso : array (1..n) of real x: array (1..n) of mpvar Cap = 102 end-declarations Custo :: [ 15,100, 90, 60, 40, 15, 10, 1] Peso :: [ 2, 20, 20, 30, 40, 30, 60, 10] CustoTotal := sum(i in 1..n) x(i)*Custo(i) PesoTotal := sum(i in 1..n) x(i)*Peso(i) <= Cap forall (i in 1..n) x(i) is_binary !xi 0/1 maximize (CustoTotal ) writeln ("Soluo:\n Objetivo: ", getobjval) forall (i in 1..n) writeln(" x(", i, "): ", x(i).sol) end-model

Soluo: Objetivo: 280 x(1): 1 x(2): 1 x(3): 1 x(4): 1 x(5): 0 x(6): 1 x(7): 0 x(8): 0

Modelo Para o Problema da Mochila


model mochila2 uses "mmxprs" declarations n=8 Itens = 1..n Custo : array (Itens) of real Peso : array (Itens) of real x: array (Itens) of mpvar Cap = 102 end-declarations Custo :: [ 15,100, 90, 60, 40, 15, 10, 1] Peso :: [ 2, 20, 20, 30, 40, 30, 60, 10] CustoTotal := sum(i in Itens) x(i)*Custo(i) PesoTotal := sum(i in Itens) x(i)*Peso(i) <= Cap forall (i in Itens) x(i) is_binary !x 0/1 maximize (CustoTotal ) writeln ("Soluo:\n Objetivo: ", getobjval) forall (i in Itens) writeln(" x(", i, "): ", x(i).sol) end-model

Soluo: Objetivo: 280 x(1): 1 x(2): 1 x(3): 1 x(4): 1 x(5): 0 x(6): 1 x(7): 0 x(8): 0

Modelo Para o Problema da Mochila


model mochila1 uses "mmxprs" declarations Itens = 1..8 Custo : array (Itens) of real Peso : array (Itens) of real x: array (Itens) of mpvar Cap = 102 end-declarations Custo :: [ 15,100, 90, 60, 40, 15, 10, 1] Peso :: [ 2, 20, 20, 30, 40, 30, 60, 10] CustoTotal := sum(i in Itens) x(i)*Custo(i) PesoTotal := sum(i in Itens) x(i)*Peso(i) <= Cap forall (i in Itens) x(i) is_binary !x 0/1 maximize (CustoTotal ) exportprob (1, "", CustoTotal) end-model !1: Max, 0: Min

\ Using Xpress-MP extensions Maximize 15 x(1) + 100 x(2) + 90 x(3) + 60 x(4) + 40 x(5) + 15 x(6) + 10 x(7) + x(8) Subject To CustoTotal: 2 x(1) + 20 x(2) + 20 x(3) + 30 x(4) + 40 x(5) + 30 x(6) + 60 x(7) + 10 x(8) <= 102 Bounds Binaries x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) End

Modelo Para o Problema de Transporte


Centros de produo Araraquara S.J. Campos SP 4 11 Demanda SP 500 Mercados BH 2 7 Demanda BH 400 RJ 5 4 Demanda RJ 900 Disponibilidade Em cada centro 800 1000

Modelo Para o Problema de Transporte


n = nmero de fornecedores. m = nmero de clientes. si = oferta do fornecedor i (quantidade disponvel). dj = demanda do cliente j (quantidade requerida). cij = custo unitrio de transporte do fornecedor i para o clientes j. Varivel de deciso: xij = quantidade a ser enviada do fornecedor i para o cliente j.
n m

min f ( x11 ,..., xnm ) cij xij


i 1 j 1 m

sum(i in 1..n, j in 1..m)

s.a. xij si ; i 1,..., n.


j 1 n

forall (i in 1..n) forall (j in 1..m) forall (i in 1..n, j in 1..m)

xij d j ; j 1,..., m.
i 1

xij 0; i 1,..., n; j 1,..., m.

Modelo Para o Problema de Transporte


model transporte uses "mmxprs" declarations n = 2 ! Numero de fornecedores m = 3 !numero de clientes s : array (1..n) of real !vetor das ofertas d: array (1..m) of real ! Vetor das demandas c: array ( 1..n, 1..m) of real ! matriz nxm dos custos unitrios de transporte x: array (1..n, 1..m) of mpvar ! Matriz nxm das Variveis de decisao CustoTotal: linctr end-declarations !inicializao dos dados de entrada do problema: s :: [800, 1000] d ::[500, 400, 900 ] c :: [ 4, 2, 5, 11, 7, 4 ]

Modelo Para o Problema de Transporte


!Defino da funo_objetivo CustoTotal := sum(i in 1..n, j in 1..m) c(i,j)*x(i, j) !Restries de oferta forall (i in 1..n) sum(j in 1..m) x(i, j) <= s(i) !Restries de oferta forall (j in 1..m) sum(i in 1..n) x(i, j) >= d(j) !Restries de no negatividade forall (i in 1..n, j in 1..m) x(i, j) >= 0 !Resolve o modelo minimize (CustoTotal ) !Impresso dos resultados writeln ("Funo Objetivo: ", getobjval) forall (i in 1..n, j in 1..m) writeln(" x(", i , ",", j ," )=", getsol(x(i,j))) end-model

Modelo para a produo de Cadeiras

Max 150 x1 + 300 x2 + 300 x3 + 200 x4 1 x1 + 4 x2 + 3 x3 + 1 x3 + 1 x4 50 + 2 x4 75

1 x1 + 1 x2 x1 0 x2 0 x3 0 x4 0

Escreva um modelo genrico para n cadeiras e m recursos (matria prima) e considere variveis inteiras.

Tipos de variveis de deciso


Variveis Binrias: variveis que adotam valor 0 ou 1.

x is_binary !x = 0,1 Variveis Inteiras: x is_integer !x = 0,1,2,. Variveis Continuas x is_continuous ! xR, x0 Variveis Parcialmente Inteiras: variveis que assumem valores inteiros at um determinado limite e valores continuos acima desse limite. x is_partint 5 !x = 0,1,,5 ou xR, x>5: Variveis Semi-Continuas: x is_semcont 6 !x = 0 ou x6 Variveis Inteiras Semi-continuas: integer. x is_semint 7 ! x= 0 ou x = 7,8, Variveis livres: x is_free

Tipos de Dados Xpress-Mosel


Tipos Elementares o Tipos Bsicos: integer valores entre -214783648 e 2147483647

valores entre -1.7e+308 e 1.7e+308 string qualquer texto boolean true e false o Tipos Xpress-MP: mpvar : tipo das variveis de decisa linctr: tipo (linear constraint) restries lineares Tipos Estruturados o set : conjunto o array : arranjo ou vetor o list : listas o record : registros

real

Observaes
O Xpress-Mossel diferencia maisculas e minsculas. As palavras

reservadas, geralmente, so com letras minsculas.


Os nomes das variveis devem comear sempre com um caracter alfabtico

(A-Z) ou com underline ( _ ). Os caracteres seguintes podem ser tanto alfabticos como numricos (0-9) ou com underline ( _ ).
No necessrio que os comandos finalizem com ponto e virgula ; Casos sejam escritos mais de um comando em uma linha, eles devem ser

separados com ponto e virgula ;


Exemplo:

X(1) := 3; X(2) := 7 writeln(X) writeln


Comentrios

! Comentrios (! Comentrios !)

Operador | (tal que)


i, j 1,..., n; i j
forall (i in 1..n, j in 1..n | i<>j) do end-do

n i 1

n j 1 i j

xij 1
sum(i in 1..n, j in 1..n | i<j) x(i,j) = 1

Estrutura de seleo if then


forall (i in 1..n, j in 1..n) do if getsol( x(i,j) ) =1 then writeln("x(", i ,",", j ,")=", getsol(x(i,j))) end-if end-do

You might also like