Problema de Pizza

Pedir uma pizza seria uma tarefa trivial se não fosse a opção de escolher dois sabores. Neste texto vamos explicar como esta liberdade dada ao cliente transforma a “simples” ação de pedir uma pizza em um grave problema de otimização.

Primeiro vamos definir esta opção de sabor da seguinte maneira: para cada pizza podemos escolher até dois sabores {x; y} de modo que o valor total da pizza será Max {preço(x); preço(y)}. Para simplificar a comunicação, trabalharemos com o dinheiro imaginário “zero-coin” ou apenas Z$. Assim, surge o desafio ao cliente de encontrar sabores {x; y} tal que minimize a função |preço(x) – preço(y)|/2 (pois a metade mais cara da pizza foi devidamente paga pelo seu valor correto). Por exemplo, tomemos a seguinte lista de pizzas:

1) calabresa, mussarela, cebola, alho frito / 20Z$

2) calabresa, mussarela, cebola, alho frito, cheddar, bacon / 25Z$

3) atum, mussarela, cebola, alho frito, cheddar / 25Z$

4) frango, mussarela, cebola, alho frito, cheddar / 24Z$

5) frango, mussarela, cebola, alho frito, cheddar, bacon / 26Z$

6) atum, mussarela, cebola, alho frito / 22Z$

7) brócolis, mussarela, cebola, alho frito, cheddar / 26Z$

8) calabresa, mussarela, cebola, alho frito, cheddar / 23Z$

9) atum, mussarela, cebola, alho frito, cheddar, bacon / 27Z$

10) brócolis, mussarela, cebola, alho frito / 23Z$

11) brócolis, mussarela, cebola, alho frito, cheddar, bacon / 28Z$

12) frango, mussarela, cebola, alho frito / 21Z$

Podemos simplificar este cardápio organizando-o a partir de fatores comuns, como por exemplo todas as pizzas vêm com mussarela, cebola e alho frito, podemos omitir esta informação na análise. Vamos distribuí-las em dois subgrupos, como ingrediente principal e preço. Para facilitar nossa análise, vamos considerar que o acréscimo de ingrediente sempre deixa a pizza melhor. Assim, uma pizza de calabresa+cheddar+bacon será melhor que uma pizza de calabresa+cheddar, que será melhor do que uma pizza de calabresa.

Distribuição por sabor:

1) calabresa / 20Z$

8) calabresa, cheddar / 23Z$

2) calabresa, cheddar, bacon / 25Z$

12) frango / 21Z$

4) frango, cheddar / 24Z$

5) frango, cheddar, bacon / 26Z$

6) atum / 22Z$

3) atum, cheddar / 25Z$

9) atum, cheddar, bacon / 27Z$

10) brócolis / 23Z$

7) brócolis, cheddar / 26Z$

11) brócolis, cheddar, bacon / 28Z$

Distribuição por preço:

1) calabresa / 20Z$

12) frango / 21Z$

6) atum / 22Z$

10) brócolis / 23Z$

8) calabresa, cheddar / 23Z$

4) frango, cheddar / 24Z$

2) calabresa, cheddar, bacon / 25Z$

3) atum, cheddar / 25Z$

5) frango, cheddar, bacon / 26Z$

7) brócolis, cheddar / 26Z$

9) atum, cheddar, bacon / 27Z$

11) brócolis, cheddar, bacon / 28Z$

Assim, a partir do critério de qualidade, se pediremos por exemplo metade da pizza do sabor 5 (frango, cheddar, bacon) e queremos a outra metade com ingrediente base de calabresa, temos as seguintes situações:

Max {preço(sabor5); preço(sabor1)} =

= Max {26Z$; 20Z$} = 26Z$.

Max {preço(sabor5); preço(sabor8)} =

= Max {26Z$; 23Z$} = 26Z$.

Max {preço(sabor5); preço(sabor2)} =

= Max {26Z$; 25Z$} = 26Z$.

Analisando a função |preço(x) – preço(y)| a ser minimizada para cada caso, temos:

|preço(sabor5) – preço(sabor1)|/2 = 3Z$.

|preço(sabor5) – preço(sabor8)|/2 = 1,5Z$.

|preço(sabor5) – preço(sabor2)|/2 = 0,5Z$.

Logo, o sabor2 minimiza o custo neste caso. Por outro lado, se apenas o sabor5 estivesse definido, ou seja, a outra metade da pizza não tivesse restrição sobre sabor, teríamos uma solução melhor ao escolher o sabor7.

Max {preço(sabor5); preço(sabor7)} =

= Max {26Z$; 26Z$} = 26Z$.

|preço(sabor5) – preço(sabor7)| = 0Z$.

Agora no caso de duas pizzas serem pedidas, temos a possibilidade de escolher até 4 sabores. Seu custo será dado pela expressão:

[Max {preço(x); preço(y)} + Max {preço(w); preço(z)}].

Assim, surge o desafio ao cliente de encontrar sabores {x; y; w; z} e rearranjá-los de forma que minimize a função [|preço(x) – preço(y)| + |preço(w) – preço(z)|]/2. Neste caso, temos além do problema de escolher, o problema de rearranjar. Pois 4 sabores (chamados de 1, 2, 3 e 4) poderiam ser arranjados de 3 formas:

{1; 2} & {3; 4} // {1; 3} & {2; 4} // {1; 4} & {2; 3}

Considerando o mesmo cardápio usado no caso de apenas uma pizza, suponhamos que os clientes desejem respectivamente um sabor principal de cada tipo (calabresa, frango, atum e brócolis), e não façam questão de adicionais (mas se possível, desejam). Temos então sabor1 (calabresa / 20Z$), sabor12 (frango / 21Z$), sabor6 (atum / 22Z$) e sabor10 (brócolis / 23Z$).

{sabor1; sabor12} & {sabor6; sabor10} = total a pagar 44Z$

{sabor1; sabor6} & {sabor12; sabor10} = total a pagar 45Z$

{sabor1; sabor10} & {sabor6; sabor12} = total a pagar 45Z$

Agora calculando as diferenças de cada opção, temos:

[|preço(sabor1)–preço(sabor12)|
+|preço(sabor6)–preço(sabor10)|]/2 = 1Z$.

[|preço(sabor1)–preço(sabor6)|
+|preço(sabor12)–preço(sabor10)|]/2 = 2Z$.

[|preço(sabor1)–preço(sabor10)|
+|preço(sabor6)–preço(sabor12)|]/2 = 2Z$.

A primeira opção pode parecer a mais interessante, porém a terceira opção nos permite melhorar a pizza de calabresa, pedindo em seu lugar o sabor8 (calabresa, cheddar).

{sabor8; sabor10} & {sabor6; sabor12} = total a pagar 45Z$

[|preço(sabor8)–preço(sabor10)|
+|preço(sabor6)–preço(sabor12)|]/2 = 0,5Z$.

Assim, se pensarmos em qual opção gastaremos menos, na primeira opção gastamos 44Z$, contudo o desperdício (valor a mais pago pela pizza) é de 1Z$. Enquanto que na quarta opção gastamos 45Z$, mas o desperdício neste caso é de 0,5Z$.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *