• Nenhum resultado encontrado

Algoritmo Polinomial no tempo

N/A
N/A
Protected

Academic year: 2019

Share "Algoritmo Polinomial no tempo"

Copied!
44
0
0

Texto

(1)

AULA 8

MINHA PRIMEIRA META-HEURÍSTICA

Autor: Anibal Tavares de Azevedo

INTRODUÇÃO À META-HEURÍSTICAS

(2)

MINHA PRIMEIRA META-HEURÍSTICA

Complexidade dos Algoritmos

Algoritmos precisam de dois importantes recursos para resolver um problema: tempo e espaço. A complexidade de tempo de um algoritmo corresponde ao número de passos necessários para resolver um problema de tamanho n. O propósito da análise de complexidade de algoritmos não é obter uma contagem exata do número de passos e sim um limitante assintótico do número de passos. Para tanto, a notação “Big-O” é empregada.

Notação “Big-O”

Um algoritmo possui complexidade de tempo f(n) = O(g(n)) se existir uma constante positiva n0tal que∀∀∀∀n > n0, f(n)≤≤≤≤c*g(n).

(3)

Algoritmo Polinomial no tempo

Um algoritmo é dito polinomial no tempo (polynomial-time) se sua complexidade é O(p(n)), onde p(n) é uma função polinomial de n. Um função polinomial de grau k pode ser definida como dado a seguir:

0 1

)

(

n

a

n

a

n

a

n

a

p

=

k k

+

L

+

j j

+

L

+

+

Onde: ak > 0 e aj ≥ 0,∀∀∀∀1 ≤≤≤≤ j ≤≤≤≤ k – 1. O algoritmo correspondente tem um complexidade polinomial O(nk).

ALGORITMOS

O que é um Algoritmo?

É uma sequência finita de passos que resolve um dado problema ! Um bom exemplo de algoritmo é uma receita de bolo, pois a ordem dos passos pode mudar o resultado final!

+

(4)

1 2

3

4

ALGORITMOS

Um algoritmo é conjunto finito de instruções, com

uma ou mais operações capazes de serem executadas

(por um computador) em tempo finito, para

realização de uma tarefa específica.

x

y

(5)

ALGORITMOS

(6)

Exercício 1: Escrever um algoritmo para o problema

de precificação dinâmica.

Caso 1

x

y

f(x) = volume de vendas

ymin = volume mínimo de vendas

Caso 2

x

y

ymin

f(x)

f(x) = volume de estoque ymin = volume mínimo estoque

ymin

f(x)

ALGORITMOS

Exercício 1: Escrever um algoritmo para o problema

de precificação dinâmica.

Caso 1

x

y

f(x) = volume de vendas

ymin = volume mínimo de vendas

x

y

ymin

f(x)

g(x) = valor do preço

g(x)

Caso 1

(7)

Exercício 1: Escrever um algoritmo para o problema

de precificação dinâmica.

Caso 2

x

y

f(x) = volume de estoque ymin = volume mínimo estoque

ymin

f(x)

x

y

g(x) = valor do preço

g(x)

t

Caso 2

t

ALGORITMOS

(8)

Exercício 1: Escrever um algoritmo para o problema

de precificação dinâmica.

Algoritmo de precificação dinâmica simples

Leia

(preco, vendas, estoque, valormin, estoquemin);

Se

(vendas < valormin)

então

preco

preco * 0.7; *Redução de 70% no preço*

Senão

Se

(estoque < estoquemin)

então

preco

preco * 1.2;

*Aumento de 20% no preço*

Fim Se

Fim Se

ALGORITMOS

1

Ser finito: terminar após um número finito depassos.

2

Serprecisão o que deve ser realizado.exato: seus passos devem indicar com

Um algoritmo sempre deve:

(9)

Um algoritmo pode ser descrito por meio de

pseudo-código, fluxograma ou uma linguagem de

programação específica.

1

Pseudo-código

vendas < valormin

2

Fluxograma

Sim Não

#include <stdio.h> main()

{

if (vendas < valormin); }

3

Código em linguagem C

ALGORITMOS

(10)

ALGORITMOS

(11)

Terminador

ALGORITMOS

(12)

Decisão

ALGORITMOS

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

Algoritmo de precificação dinâmica simples

Leia

(preco, vendas, estoque, valormin, estoquemin);

Se

(vendas < valormin)

então

preco

preco * 0.7; *Redução de 70% no preço*

Senão

Se

(estoque < estoquemin)

então

preco

preco * 1.2;

*Aumento de 20% no preço*

Fim Se

(13)

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

vendas< valormin

preco←preco*0.7

Final

F

Verificar aumento de preço

ALGORITMOS

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

vendas< valormin

preco←preco*0.7

(14)

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

V

estoque< estoquemin

preco←preco*1.2

F

Verificar aumento

de preço

ALGORITMOS

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

V

estoque< estoquemin

preco←preco*1.2

F

Verificar aumento

de preço

Condição lógica

(15)

Exercício

2:

Escrever

um

fluxograma

para

o

algoritmo do problema de precificação dinâmica.

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

vendas< valormin

preco←preco*0.7

Final

F

Verificar aumento de

preço

ALGORITMOS

No paradigma de programação estruturada, os

Programas

são

escritos

considerando

apenas

combinação adequadas de 3 estruturas básicas:

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

SEQUÊNCIA

(16)

No paradigma de programação estruturada, os

Programas

são

escritos

considerando

apenas

combinação adequadas de 3 estruturas básicas:

V

estoque< estoquemin

preco←preco*1.2

F

SELEÇÃO SIMPLES

2

SE

ALGORITMOS

V

valorminvendas<

preco←preco*0.7

F

No paradigma de programação estruturada, os

Programas

são

escritos

considerando

apenas

combinação adequadas de 3 estruturas básicas:

2

(17)

V

preco< precomin

preco←preco*0.7

F

No paradigma de programação estruturada, os

Programas

são

escritos

considerando

apenas

combinação adequadas de 3 estruturas básicas:

ITERAÇÃO

3

ENQUANTO

ALGORITMOS

As estruturas básicas podem ser combinadas

entre si, utilizando apenas duas regras:

REGRA DO ANINHAMENTO

1

Um retângulo de uma estrutura pode ser substituído por uma

outra estrutura qualquer.

REGRA DO EMPILHAMENTO

2

(18)

As estruturas básicas podem ser combinadas

entre si, utilizando apenas duas regras:

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

vendas< valormin

preco←preco*0.7

Final

F

Verificar aumento de preço REGRA DO ANINHAMENTO

1

ALGORITMOS

As estruturas básicas podem ser combinadas

entre si, utilizando apenas duas regras:

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

vendas< valormin

preco←preco*0.7

F

Verificar aumento de preço

REGRA DO

(19)

As regras podem ser aplicadas quantas vezes forem necessárias, e em qualquer ordem.

Os fluxogramas resultantes da aplicação dessas regras constituem o conjunto de todos os fluxogramas estruturados possíveis.

x

y

f

(

x

)

dx

ALGORITMOS

(20)

Exercício 3: Escrever um algoritmo e um fluxograma

para o problema de ler duas variáveis a e b e

imprimir a de maior valor.

Algoritmo de maior valor

Variáveis a,b;

Início

Leia

(a, b);

Se

(a < b)

então

imprimir(b); *impressao de b (maior que a)*

Senão

imprimir(a); *impressao de a (maior que b)*

Fim Se

ALGORITMOS

Exercício 3: Escrever um algoritmo e um fluxograma

para o problema de ler duas variáveis a e b e

imprimir a de maior valor.

Fluxograma de maior valor

V

Início

Ler preco, vendas, estoque, Valormin, estoquemin;

a < b

F

(21)

41

O laço é utilizado quando uma operação ou uma série de

operações deve ser repetida muitas vezes. Existem várias

formas de laço, a saber:

1. Laços Condicionais

O laço condicional fica repetindo uma seqüência de ações, isto

é, ele é executado enquanto a condição for verdadeira. Em

linguagem algorítmica ele é expresso da seguinte forma:

Enquanto

“condição”

faça

comando

Enquanto

(condição)

faça

Início

comando1

comando2...

comandoN

Fim

Ou

Em linguagem C, Java, Matlab ou Scilab o laço

condicional

Enquanto

é feito através do comando

while

,

isto é:

while (condição)

{

comandos;

}

OBS: O processo é repetido enquanto a condição for verdadeira. F

condição

V comandos

while (condição)

(22)

43

1º. Avalia a condição

2º.Se a condição for Falsa (0-zero), o laço termina e o programa continua na instrução imediatamente após o while.

3º. Se a condição é verdadeira (diferente de zero), executa os comandos do bloco.

4º. Volta ao passo 1.

O while funciona do seguinte modo:

Observação Importante: Cada verificação da condição lógica

com a conseqüente execução de ações é denominada de

iteração (passos 1, 2 e 3).

OBS:

1- Do mesmo modo que no comando if, a condição do comando while, deve sempre ser colocada entre parênteses.

2- O comandos de um laço também são chamados de corpo do F

condição

V comandos

while (condição)

F

condição

V comando1

if (condição)

(23)

Sintaxe

em Scilab

for i=1:inc:n

{

comandos;

}

F V

i ≤ n

comandos

Fluxograma

Obs:O funcionamento do laço for é semelhante ao do laço while. Note que existem 3 campos separados por “ : ”. No 1ºé realizada a inicialização das variáveis, no 2ºé realizada o incremento da variável e no 3º o valor final da variável.

i=1;

i ←i+1;

ALGORITMOS

Vetor

ou

Array

são estruturas de

dados que consistem em itens de

dados do mesmo tipo e mesmo nome

ocupando posições de memória

consecutivas. Para fazer referência a

uma posição particular ou elemento

do vetor, deve-se especificar o nome

e o número da posição do elemento

no vetor. Qualquer um dos elementos

pode ser acessado fornecendo-se o

nome

do vetor seguido do

número

da posição

entre parentesis

“()”.

(24)

Declaração

Índices variam

de 0 até 4

c[0] c[1] c[2] c[3] c[4] int c[ 5 ];

Cria um vetor de nome

c de tamanho 5 e cujos

elementos são tipo int.

Declaração e Atribuição

2 1 c[0] c[1] 4 3 c[2] c[3] 5 c[4] int c[ 5 ] = {1, 2, 3, 4, 5};

Acesso e Modificação

3 1 c[0] c[1] 7 3 c[2] c[3] 5 c[4] c[ 1 ] = c[1] + 1; c[3] = c[1]+ c[3];

MINHA PRIMEIRA META-HEURÍSTICA

PROBLEMA DE ORDENAÇÃO:

Ordenação de dados (em ordem ascendente ou descendente)

pode ser utilizada para classificar e mostrar os

resultados mais significativos obtidos por um buscador

Web (Google ou Altavista, por exemplo) para uma dada

palavra-chave. Crie um algoritmo que reordena em ordem

ascendente um vetor de elementos gerados

(25)

ALGORITMO DE ORDENAÇÃO:

Um possível algoritmo de ordenação é o Bubble Sort. Seu

funcionamento consiste em fazer os valores menores

“subirem“ gradualmente até o topo do vetor, da mesma

forma que bolhas de ar sobem na água, enquanto os

valores maiores afundam para a parte de baixo do vetor.

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

MINHA PRIMEIRA META-HEURÍSTICA

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

(26)

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

4

3

2

1

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

1

Posição correta !

MINHA PRIMEIRA META-HEURÍSTICA

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

4

3

2

1

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

3

4

2

1

v(2) > v(3)?

1

2

(27)

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

4

3

2

1

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

3

4

2

1

v(2) > v(3)?

3

2

4

1

v(3) > v(4)?

1

2

3

Posição correta !

MINHA PRIMEIRA META-HEURÍSTICA

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

4

3

2

1

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

3

4

2

1

v(2) > v(3)?

3

2

4

1

v(3) > v(4)?

3

2

1

4

1

2

3

(28)

4

3

2

1

“Fundo” do vetor

“Topo” do vetor

3

2

1

4

// Para “afundar” o 1º

// elemento realizar n-1

// comparações

for j=1 : n-1

if (v(j) > v(j+1)) then

tmp = v(j);

v(j)=v(j+1);

v(j+1) = tmp;

end

end

Posição correta !

MINHA PRIMEIRA META-HEURÍSTICA

3

2

1

4

“Fundo” do vetor

“Topo” do vetor

2

1

3

4

3

2

1

4

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

2

3

1

4

v(2) > v(3)?

2

1

3

4

1

2

(29)

3

2

1

4

“Fundo” do vetor

“Topo” do vetor

2

1

3

4

Posição correta !

// Para “afundar” o 2º

// elemento realizar n-2

// comparações

for j=1 : n-2

if (v(j) > v(j+1)) then

tmp = v(j);

v(j)=v(j+1);

v(j+1) = tmp;

end

end

MINHA PRIMEIRA META-HEURÍSTICA

2

1

3

4

“Fundo” do vetor

“Topo” do vetor

1

2

3

4

2

1

3

4

v(1) > v(2)?

tmp = v(1) v(1) = v(2) v(2) = tmp

1

2

3

4

1

2

(30)

2

1

3

4

“Fundo” do vetor

“Topo” do vetor

1

2

3

4

Posição correta !

// Para “afundar” o 3º

// elemento realizar n-3

// comparações

for j=1 : n-3

if (v(j) > v(j+1)) then

tmp = v(j);

v(j)=v(j+1);

v(j+1) = tmp;

end

end

MINHA PRIMEIRA META-HEURÍSTICA

// Para “afundar” o 3º // elemento realizar n-3 // comparações for j=1 : n-3

if (v(j) > v(j+1)) then tmp = v(j);

v(j)=v(j+1); v(j+1) = tmp; // Para “afundar” o 2º

// elemento realizar n-2 // comparações for j=1 : n-2

if (v(j) > v(j+1)) then tmp = v(j);

v(j)=v(j+1); v(j+1) = tmp; // Para “afundar” o 1º

// elemento realizar n-1 // comparações for j=1 : n-1

if (v(j) > v(j+1)) then tmp = v(j);

v(j)=v(j+1); v(j+1) = tmp;

// Afundar n-1 elementos. for i = 1: n-1

// “Afundar” o i-ésimo elemento for j = 1 : n-i

if (v(j) > v(j+1)) then tmp = v(j);

v(j)=v(j+1); v(j+1) = tmp; end

(31)

Exercício 1

Qual a complexidade do algoritmo de ordenação “Bubble Sort”?

// Afundar n-1 elementos.

for i = 1: n-1

// “Afundar” o i-ésimo

elemento

for j = 1 : n-i

if (v(j) > v(j+1)) then

tmp = v(j);

v(j)=v(j+1);

v(j+1) = tmp;

end

end

end

MINHA PRIMEIRA META-HEURÍSTICA

Exercício 1

Qual a complexidade do algoritmo de ordenação “Bubble Sort”?

// Afundar n-1 elementos.

for i = 1: n-1

// “Afundar” o i-ésimo

elemento

for j = 1 : n-i

if (v(j) > v(j+1)) then

tmp = v(j);

v(j)=v(j+1);

v(j+1) = tmp;

end

end

end

Suponha um vetor com n elementos. Para colocar em ordem crescente o “Bubble Sort” deve “afundar” n-1 elementos a um custo de n-i comparações. Assim, serão necessárias n*(n-1) operações de comparação. Ou seja:

(32)

Algoritmo Exponencial no tempo

Um algoritmo é dito exponencial no tempo (exponential-time) se sua

complexidade é O(cn), onde n é uma constante real estritamente superior a 1.

MINHA PRIMEIRA META-HEURÍSTICA

Complexidade dos Problemas

A complexidade de um problema equivale a complexidade do melhor algoritmo para resolver o problema. O problema é dito tratável (ou fácil) se existe um algoritmo de tempo polinomial para sua solução e intratável (ou difícil) se não existe algoritmo de tempo polinomial. Em Teoria da Complexidade os problemas lidam com problema de decisão que são sempre responder sim ou não a uma dada questão. Um problema de otimização pode ser sempre reduzido a um problema de decisão. Existem duas categorias de problemas: P – Conjunto de todos os problemas de decisão que podem ser resolvidos por uma máquina determinística em tempo polinomial. Exemplo: PPL.

(33)

“NP-hard problems are optimization problems whose associated decision problems are NP-complete. Most of the real-world optimization problems are NP-hard for which provably efficient algorithms do not exist. They require exponential time (unless P = NP) to be solved in optimality. Metaheuristics constitute an important alternative to solve this class of problems.”

Some NP-hard problems:

• Sequencing and scheduling problems such as flow-shop

scheduling, job-shop scheduling, or open-shop scheduling.

• Assignment and location problems such as quadratic assignment

problem (QAP), generalized assignment problem (GAP), location

facility, and the p-median problem.

• Grouping problems such as data clustering, graph partitioning,

and graph coloring.

• Routing and covering problems such as vehicle routing problems

(VRP), set covering problem (SCP), Steiner tree problem, and

covering tour problem (CTP).

• Knapsack and packing/cutting problems, and so on.

(34)

Problems Complexity

Following the complexity of the problem, it may be solved by an

exact method

or an

approximate method

.

Problems Complexity

“Exact methods obtain optimal solutions and guarantee their

optimality. For NP-complete problems, exact algorithms are non

polynomial time algorithms (unless P = NP). Approximate (or

heuristic) methods generate high quality solutions in a reasonable

time for practical use, but there is no guarantee of finding a global

optimal solution.”

(35)

MINHA PRIMEIRA META-HEURÍSTICA

Legenda Meta-heurística

ACO Ant colonies optimization

AIS Artificial immune systems

BC Bee colony

CA Cultural algorithms

CEA Coevolutionary algorithms

CMA-ES Covariance matrix adaptation evolution strategy

DE Differential evolution

EDA Estimation of distribution algorithms

EP Evolutionary programming

ES Evolution strategies

GA Genetic algorithms

(36)

Legenda Meta-heurística

GLS Guided local search

GP Genetic programming

GRASP Greedy adaptive search procedure

ILS Iterated local search

NM Noisy method

PSO Particle swarm optimization

SA Simulated Annealing

SM Smoothing method

SS Scatter search

TA Threshold accepting

TS Tabu search

VNS Variable neighborhood

(37)
(38)

FLEXIBILIDADE DAS META-HEURÍSTICAS

MINHA PRIMEIRA META-HEURÍSTICA

(39)

REPRESENTAÇÃO

MINHA PRIMEIRA META-HEURÍSTICA

REJEIÇÃO

PENALIZAÇÃO REPARAÇÃO

ATENDIMENTO DAS RESTRIÇÕES

1

0

0

1

1

0

0

0

1

0

0

1

1

0

0

1

(40)

ATENDIMENTO DAS RESTRIÇÕES

MINHA PRIMEIRA META-HEURÍSTICA

(41)

AVALIANDO QUALIDADE DAS SOLUÇÕES

MINHA PRIMEIRA META-HEURÍSTICA

(42)

CONSTRUINDO META-HEURÍSTICAS - BUSCA LOCAL

MINHA PRIMEIRA META-HEURÍSTICA

TAREFA 1: Elaborar uma herística “Greedy” (Gulosa) para o

Problema da Mochila

(43)

Tarefa 1:

Considere que existem 8 itens para armazenar em uma

mochila com uma capacidade de 100. Elaborar um programa para

resolver o problema com os dados abaixo.

1

2

3

4

5

6

7

8

u

41

33

14

25

32

32

9

19

v

47

40

17

27

34

23

5

44

x

i

MINHA PRIMEIRA META-HEURÍSTICA

(44)

TAREFA 3: Elaborar e aplicar o “Local Search” nas funções c/ i=2.

Referências

Documentos relacionados

Ainda, neste trabalho, houve alguns aspectos em que significantemente não ocorreram alterações, como a presença de sub-harmônicos em M1XM2XM3, a presença de

para Geniuskit bifamiliar Variante para ligação da campainha externa e campainha suplementar para Geniuskit monofamiliar e bifamiliar cadores suplementares para Geniuskit

Senhor Lourival de Jesus por conta de seu falecimento, solicitando uma Moção de Pesar inclusive, solicitou também a restauração das estradas da zona rural, em especial

A situação de namoro também é um fator cada vez mais importante a ser considerado, pois assume especial relevância neste grupo de idade, principalmente nas mais jovens (menores de

As empresas sediadas na base territorial representada pelo Sindicato Trabalhadores nas Indústrias do Papel, Papelão e Cortiça, Distribuidoras de Papel de Higiene e Limpeza,

 Caso tenha que alterar ou cancelar a reserva no dia da vacinação, ou não conseguir chegar ao local de vacinação no horário reservado, contate diretamente com a

portanto, a não consideração da contribuição patrocinadora para pensionistas nos presente estudo, no que se refere aos valores aqui apresentados (contribuições, custeio

Se eu consultei RB, eu não pedi a violação; nesse caso, eu não sou culpado. Ele não denunciou