Questão 1


(i)

  • Para ilustrar graficamente o conjunto de soluções eficientes do problema foi construído um gráfico de superfície das \(3\) funções. Os limites de \(x\) e \(y\), foram definidos no intervalo \([-1, 4]\) para capturar os mínimos globais das \(3\) funções.
# Carrega pacote gráfico
library(plotly)

# Declara funcões
f1 <- function(x, y){ x^2 + y^2 }
f2 <- function(x, y){ (x-3)^2 + y^2 }
f3 <- function(x, y){ x^2 + (y - 2)^2 }

# Declara tamanho da matriz
n <- 100

# Declara x e y
x <- seq(-1, 4, length.out = n)
y <- seq(-1, 4, length.out = n)

# Declara matriz i, j
matriz1 <- matrix(0, ncol = n, nrow = n)
matriz2 <- matrix(0, ncol = n, nrow = n)
matriz3 <- matrix(0, ncol = n, nrow = n)

# Laco popula matriz
for(i in 1:n){
  for(j in 1:n){
    matriz1[i, j] <- f1(x[j],y[i])
    matriz2[i, j] <- f2(x[j],y[i])
    matriz3[i, j] <- f3(x[j],y[i])
  }
}

# Declara gráfico
plot_ly(showscale = TRUE) %>%
  
  #  Superficie funcao 1 x1^2 + x2^2     
  add_surface(x =  x,
              y =  y,
              z = matriz1,
              colorscale = list(c(0, 1),
                                c("blue", "lightgrey")),
              name = "x1^2+(X2-2)^2",
              contours = list(z = list(show=TRUE,
                                       usecolormap=TRUE,
                                       highlightcolor="#blue",
                                       project=list(z=TRUE)))) %>%
  
  # Superfície função (x-3)^2+y^2
  add_surface(x = x,
              y = y,
              z = matriz2,
              colorscale = list(c(0, 1),
                                c("red", "lightgrey")),
              name = "(X1-3)^2+X2^2",
              contours = list(z = list(show=TRUE,
                                       usecolormap=TRUE,
                                       highlightcolor="red",
                                       project=list(z=TRUE)))) %>%
  
  # Superfície função x^2+(y-2)^2
  add_surface(x =  x,
              y =  y,
              z = matriz3,
              colorscale = list(c(0, 1),
                                c("green", "lightgrey")),
              name = "X1^2+(X2-2)^2",
              contours = list(z = list(show=TRUE,
                                       usecolormap=TRUE,
                                       highlightcolor="green",
                                       project=list(z=TRUE)))) %>%
  
   # Define aparência do gráfico
  layout(title = "Gráfico de Superfície",
         scene = list(xaxis = list(title = "X1"),
                      yaxis = list(title = "X2" ),  
                      zaxis = list(title = "Z"))) 
  • A função \(f_1(x_1,x_2) = x_1^2 + x_2^2\) apresenta mínimo global no ponto \((0,0)\) e \(f_1(0,0) = 0\).

  • A função \(f_2(x_1,x_2) = (x_1-3)^2+x_2^2\) apresenta mínimo global no ponto \((3,0)\) e \(f_2(3,0) = 0\).

  • A função \(f_3(x_1,x_2) = x_1^2+(x_2-2)^2\) apresenta mínimo global no ponto \((0,2)\) e \(f_3(0,2) = 0\).

  • O conjunto de soluções eficientes são os pontos mais próximos aos mínimos globais das funções.

(ii)

  • Para ilustrar graficamente o conjunto de soluções eficientes do problema considerando a restrição de \(\alpha \le 0.1\) foi construído um gráfico de superfície das \(3\) funções limitado pela Imagem de \(f_3\) com limite inferior de \(0\), por ser uma função quadrática, até o limite superior de \(0.1\) que foi a restrição arbitrariamente escolhida.
# tamanho da matriz
n <- 400

# Declara x e y
x <- seq(-0.4, 0.4, length.out = n)
y <- seq(1.5, 2.5, length.out = n)

# Declara matriz i, j
matriz1 <- matrix(0, ncol = n, nrow = n)
matriz2 <- matrix(0, ncol = n, nrow = n)
matriz3 <- matrix(0, ncol = n, nrow = n)

# laco popula matriz
for(i in 1:n){
  for(j in 1:n){
    matriz1[i, j] <- ifelse(f3(x[j],y[i]) <= 0.1, f1(x[j],y[i]), NA)
    matriz2[i, j] <- ifelse(f3(x[j],y[i]) <= 0.1, f2(x[j],y[i]), NA)
    matriz3[i, j] <- ifelse(f3(x[j],y[i]) <= 0.1, f3(x[j],y[i]), NA)
  }
}

# Gera objeto plotly
plot_ly(showscale = TRUE) %>%
  
  # Superfície da função x^2+(x-2)^2
  add_surface(x =  x,
              y =  y,
              z = matriz3,
              colorscale = list(c(0, 1),
                                c("green", "lightgrey")),
              name =  "x1^2+(X2-2)^2"
              ) %>% 
  
  # Superfície da função x^2+y^2   
  add_surface(x =  x,
              y =  y,
              z = matriz1,
              colorscale = list(c(0, 1),
                                c("blue", "lightgrey")),
              name = "x1^2+X2^2"
              ) %>%
  
  # Superfície da função (x-3)^2+x^2
  add_surface(x = x,
              y = y,
              z = matriz2,
              colorscale = list(c(0, 1),
                                c("red", "lightgrey")),
              name = "(X1-3)^2+X2^2") %>%
  
  # Define aparência do gráfico
  layout(title = "Gráfico de Superfície",
         scene = list(xaxis = list(title = "X1"),
                      yaxis = list(title = "X2" ),  
                      zaxis = list(title = "Z"))) 
  • A restrição na imagem de \(f_3\) indica que \(f_1\) e \(f_2\) só seriam consideradas no domínio de \([-0.3,0.3]\) para \(x_1\) e \([1.7, 2.3]\) para \(x_2\)

  • Nessa região os valores de \(f_1\) variaram no intervalo \([3, 5]\) e os de \(f_2\) no intervalo \([11, 15]\).


Questão 2


(i)

  • Os problemas de otimização multiobjetivo, também conhecidos como problemas \(P_0\), otimização de vetores ou otimização Pareto, consistem em problemas de otimização matemática que possuem mais de uma função objetivo para ser optimizada simultaneamente. Esses tipos de problemas ocorrem em áreas que envolvem a tomada de decisão com respeito a diversos critérios.

  • A característica principal deste tipo de problema é o fato de que não existe uma solução única que otimize cada objetivo. O espaço de soluções é não dominado, Pareto ótimo, Pareto eficiente, ou não inferior se nenhuma das funções objetivo pode ser melhorada sem degradar as outras funções objetivo. Sem a adição de preferencias subjetivas todas as soluções Pareto ótimas são consideradas igualmente boas.

  • O intuito das técnicas e métodos construídos para tratar esse tipo de problema é encontrar um conjunto Pareto de soluções ótimas que represente a quantificação das vantagens e desvantagem para acomodar os diferentes objetivos do problema levando em consideração as preferências subjetivas da unidade de decisão.

  • Em termos matemáticos a optimização de diversos objetivos pode ser formulada como:

  • \(min(f_1(\overrightarrow{x}),f_2(\overrightarrow{x}),...,f_k(\overrightarrow{x})),\hspace{0.5cm}onde\hspace{0.5cm}\overrightarrow{x}\in X,\hspace{0.5cm}k\ge 2,\hspace{0.5cm}e\hspace{0.5cm}X\subseteq\Re^n\)

  • \(\overrightarrow{f}: X \rightarrow \Re^k, \overrightarrow{f}(\overrightarrow{x}) = (f_1(\overrightarrow{x}),f_2(\overrightarrow{x}), ..., f_k(\overrightarrow{x}))^t\)

  • \(\Im m\) X pode ser denotada por \(Y \subseteq \Re^k\)

  • Um elemento \(\overrightarrow{x}^* \in X\) é chamado de solução factível ou decisão factível.

  • Um vetor \(\overrightarrow{z}^*\) definido como \(\overrightarrow{f}(\overrightarrow{x}^*) \in \Re^k\) para uma solução factível de \(\overrightarrow{x}^*\) é chamado de vetor objetivo.

  • Uma solução factível \(\overrightarrow{x_1} \in X\) exerce dominância Pareto sobre \(\overrightarrow{x_2} \in X\) se:

    • \(f_i(\overrightarrow{x_1}) \le f_i(\overrightarrow{x_2}) \hspace{0.5cm} \forall \hspace{0.5cm} i \in \{ 1,2,...,k\}\)
    • \(f_j(\overrightarrow{x_1}) < f_j(\overrightarrow{x_2}) \hspace{0.5cm}\) para pelo menos 1 \(j \in \{ 1,2,...,k\}\)
  • A solução \(\overrightarrow{x}^* \in X\) e a correspondente saída \(\overrightarrow{f}(\overrightarrow{x}^*) \in \Re^k\) é chamada Pareto ótima se não existe outra solução que a domine.

  • O conjunto de soluções Pareto ótimas consiste na situação em que nenhum critério ou preferência individual pode ser melhorado sem prejudicar os outros critérios.

Soma Ponderada

  • Supondo que \(w_j\) denota o peso relativo de cada critério \(C_j\) e \(f_{i,j}\) é o valor da performance da alternativa \(A_i\) quando avaliada em termos do critério \(C_j\). O escore \(A_i\) é o total da funções objetivo quando todos os critérios são considerados simultaneamente.

  • O método pode ser representado pela seguinte formula:

  • \(A_i = \sum_{j=1}^n w_j * f_{i,j} \hspace{0.5cm} para \hspace{0.5cm} i = 1,2,...,m\) funções objetivo.

Epsilon - Restrito

  • A formulação matemática para o método pode ser representada por:

  • \(min f_1(x)\), com \(x \in X\) tal que as restrições \(f_k(x) \le \epsilon_k\), quando \(k = 2, ..., m\).

(ii)

Soma Ponderada

  • O método escalar da soma ponderada apresenta a mesma estrutura de restrições do problema original onde ponderações diferentes podem levar à mesma solução eficiente. Porém este método só gera todas as soluções do conjunto Pareto, se o conjunto de soluções \(P_0\) possuir imagem convexa. Em problemas com muitos objetivos fica difícil controlar a diversidade de soluções encontradas.

  • Este método só pode ser aplicado quando os dados estão exatamente na mesma unidade de medida. No caso das funções objetivo possuírem semânticas diferentes é necessário a aplicação de alguma transformação nos dados.

Epsilon - Restrito

  • O método escalar \(\epsilon\)-restrito altera a estrutura do problema no sentido de transformar funções objetivo em restrições de desigualdade. Apesar de gerar soluções associadas a trechos não convexos e gerar pontos em trechos específicos da fronteira Pareto, esse método pode também gerar pontos que não pertencentes à fronteira. Quando o problema apresenta muitos objetivos, o número de restrições irá aumentar muito podendo gerar problemas infactíveis ou tornar difícil a tarefa que controlar a distribuição do conjunto de soluções encontradas.

(iii)

Soma Ponderada

  • O método da soma Ponderada consiste na transformação do problema \(P_0\) em um problema \(P_w\) onde cada função objetivo recebe um peso e a função mono objetivo passa a ser a soma do produto desses pesos com as funções objetivo do problema. Desta forma diferentes ponderações podem levar à mesma solução eficiente no conjunto Pareto ótimo.

Epsilon - Restrito

  • O método \(\epsilon\)-restrito transforma um problema multi objetivo em um problema mono objetivo escolhendo um dos objetivos para ser otimizado e transformando os outros objetivos em restrições de desigualdade. A variação dessas restrições gera soluções Pareto ótimas.

(iv)

  • O problema \(P_w\) produzirá a mesma solução eficiente para diferentes ponderações quando as funções objetivo forem iguais a 0. Ou seja, se o resultado da otimização de cada função separadamente for zero, independente dos valores dos pesos, a soma vai ser sempre zero porque os pesos serão multiplicados pelo resultado das funções objetivo e somados resultando na soma de zeros com o total de 0.

(v)

  • Uma situação onde o problema \(P_{\epsilon}\) produz resultados que não correspondem a soluções eficientes acontece quando o número de objetivos é muito grande. O número de restrições pode ficar muito grande quando as funções objetivo são transformadas em um problema mono objetivo com o método \(\epsilon\)-restrito. Desta forma pode-se gerar problemas infactíveis ou problemas com soluções ineficientes devido a redução do espaço de busca pelas novas restrições.

Questão 3


(i)

  • O suporte à tomada de decisão pode ser caracterizado pela assistência da unidade de decisão no que diz respeito a análise e avaliação de um objetivo ou restrição, a definição de preferências e prioridades em condições incertas, a indicação de uma lista de alternativas viáveis considerando preferências e restrições, a análise das consequências de uma decisão e a opinião sobre a alternativa mais viável.

  • O processo de suporte a tomada de decisão apresenta diversos desafios intrínsecos porque lida com a incerteza de sistemas complexos e preferências subjetivas da unidade de decisão. Na maioria dos casos este tipo de processo consiste na avaliação de alternativas para determinar a mais adequada. Essa análise considera as funções objetivo do problema, suas restrições e as preferências do responsável pela decisão. Este tipo de processo pode ser resumido na tarefa de encontrar uma utilidade com o auxílio da unidade de decisão, considerando diversos fatores favoráveis e contrários.

  • Dois fatores que podem dificultar o suporte da unidade de decisão são o tempo e o consenso. A escassez de tempo da unidade de decisão em participar de todo o processo de otimização, ou mesmo ser consultada diversas vezes ao longo do processo, muitas vezes pode ser um impedimento ao suporte. Se a unidade de decisão for composta de diversos indivíduos distintos, o consenso e a burocracia podem prejudicar o suporte. Diante de fatores como pressão para um breve consenso, pressão da maioria e centralização da informação, pode ser necessária a presença de um árbitro humano ou automatizado que controle o fluxo das informações, bem como o uso de alguma regra majoritária ou prevalência de opinião da autoridade do grupo para facilitar o processo de suporte.

(ii)

  • As alternativas de problemas com múltiplos critérios podem ser caracterizadas por discrepância de requisitos, ambiguidade na avaliação dos cenários e erro na escolha das prioridades. A ausência de cuidado nesta etapa de especificações pode levar a decisões de má qualidade. No presente, esses problemas se amplificaram pelo fato de que o número de alternativas viáveis é maior, o custo de erros pode ser alto levando a reações em cadeia e a velocidade da transformação de cenários implica uma agilidade na tomada de decisões que pode prejudicar a qualidade da decisão tomada.

  • Algumas ações para tratar os problemas de incerteza na toma de decisões seriam garantir que tanto o volume quanto a qualidade das informações sejam suficientes para modelar o problema, certificar que a inclusão das preferência subjetivas dos stakeholders gerem o compartilhamento da responsabilidade na falha ou sucesso das decisões e utilizar a elaboração de estimativas subjetivas pelos especialistas, gerentes e tomadores de decisão para aumentar o nível de confiabilidade sobre a eficiência das alternativas possíveis e a importância dos critérios escolhidos.

(iii)

  • Os fatores de incerteza comumente associados ao processo de tomada de decisão podem estar relacionados aos dados ou aos modelos escolhidos. A dificuldade ou impossibilidade de obter informações confiáveis e suficientes sobre o problema podem levar ao erro de otimizar um cenário muito distinto do problema real onde o modelo ajusta bem dados errados ou insuficientes. De maneira similar, a falta de predições confiáveis das características, propriedades e comportamento de sistemas complexos podem levar a modelos mal especificados que mesmo com dados de boa qualidade geram ajustes inadequados. A má definição de objetivos e restrições pode se manifestar na incapacidade do modelo em procurar pelas soluções adequadas ou mesmo restringir o espaço de busca de forma que boas soluções sejam descartadas sem necessidade.

(iv)

  • A tomada de decisão em grupo se refere a situação em que mais de um decisor está envolvido. Neste caso os membros do grupo reconhecem a existência de um problema comum e procuram consenso sobre a solução do problema. Esse consenso seria caracterizado pela decisão coletiva que concilia da melhor forma possível as diferentes atitudes e motivações dos indivíduos pertencentes a unidade de decisão. Esse tipo de unidade de decisão é necessário quando o problema requer especialistas de várias áreas do conhecimento, força de trabalho diversificada e diferentes perspectivas.

  • As vantagens das decisões auxiliadas consistem na reunião de maior recurso intelectual, a distribuição do esforço na aquisição e processamento das informações e a presença de interesses divergentes internos que representam melhor os interesses globais da organização.


Questão 4


Pesos dos Critérios

  • Diagrama do AHP

  • Comparação dos Critérios

# Carrega Bibliotecas
library(knitr)
library(tidyverse)

# Declara matriz de comparação de critérios
comp_criterios1 <- matrix(c(1,   5, 3,
                            1/5, 1, 1/3, 
                            1/3, 3, 1),
                          byrow = T,
                          ncol = 3,
                          nrow = 3) %>% 
                       as_tibble() %>% 
                       rename("Preco" = "V1", 
                              "Revisao" = "V2",
                              "Seguro" = "V3") %>%
                       as.data.frame()

# Soma da importância dos Critérios
soma_criterios <- colSums(comp_criterios1)

# Divide cada elemento pela soma da coluna
comp_criterios2 <- comp_criterios1 %>% 
                      mutate(Preco = Preco / soma_criterios[1],
                             Revisao = Revisao / soma_criterios[2],
                             Seguro = Seguro / soma_criterios[3])

# Calcula peso dos critérios
pesos_criterios <- rowSums(comp_criterios2) / 3 

# Calcula matriz de consistência
consitencia <-  comp_criterios1 %>% 
                  mutate(Preco = Preco * pesos_criterios[1],
                         Revisao = Revisao * pesos_criterios[2],
                         Seguro = Seguro * pesos_criterios[3])

# Calcula soma do valor ponderado
razao_soma_ponderada <- rowSums(consitencia) / pesos_criterios

# Calcula lambda máximo
lambda_max  <- mean(razao_soma_ponderada) 

# Calcula índice de consistência
consistencia <- (lambda_max - 3) / 2

# Sorteia pesos aleatórios
indice_aleatorio <- 0.58

# Calcula razão de consistência
razao_consistencia <- consistencia / indice_aleatorio

# Declara tabela de pesos do critérios
tabela_pesos <- tibble(Criterios = c("Preço", "Revisão", "Seguro"),
                       Pesos = pesos_criterios)

# Altera nome de colunas
colnames(tabela_pesos) <- c("Critérios", "Pesos")

# Imprime tabela
kable(tabela_pesos)
Critérios Pesos
Preço 0.6333457
Revisão 0.1061563
Seguro 0.2604980
  • O indice de razão de consistência para o AHP foi de 0.0333747.

Método Promethee II Ranking Completo

# Declara data frame de de critérios sobre os veículos 
criterios <- matrix(c(37990, 47590, 44990,38890,
                      371,   197,   248,  204,
                      1379,  1923,  1759, 2018),
                    ncol = 3,
                    nrow = 4) %>% 
                as_tibble() %>% 
                rename("Preco" = "V1", 
                       "Revisao" = "V2",
                       "Seguro" = "V3") 

# Declara função  Rij
minimax <- function(x_ij, min_j, max_j){ (x_ij - min_j) / (max_j - min_j ) }

# Laço
for(j in 1:ncol(criterios)){
  minimo <- min(criterios[,j])
  maximo <- max(criterios[,j])
  for(i in 1:nrow(criterios)){
    criterios[i,j] <- minimax(criterios[i,j], minimo, maximo)
  }
}

# Gera data frame de comparações
comparacoes <- tibble(Preco = 0,
                      Revisao = 0,
                      Seguro = 0,
                      De = rep(c(1,2,3,4), each = 3),
                      Para = c(2,3,4,1,3,4,1,2,4,1,2,3))

# Laço para relação dos criterios
for(i in 1:12){
  for(j in 1:3){
    comparacoes[i,j] = criterios[comparacoes$De[i], j] - criterios[comparacoes$Para[i], j]
  }
}

# Função de Preferencia substitui negativos por zero
preferencia <- comparacoes %>%
                select(c(1,2,3)) %>% 
                mutate(Preco = ifelse(Preco < 0, 0, Preco),
                       Revisao = ifelse(Revisao < 0, 0, Revisao),
                       Seguro = ifelse(Seguro < 0, 0, Seguro))

# Calcula preferência Agregada
preferencia_agregada <- preferencia %>% 
                          mutate(Preco = Preco * pesos_criterios[1],
                                 Revisao = Revisao * pesos_criterios[2],
                                 Seguro = Seguro * pesos_criterios[3])
                          
# Calcula soma de valores das linhas
soma_preferencias <- rowSums(preferencia_agregada) 

# Declara matriz de preferências
matriz_preferencias <- tibble(Alternativas = c("HC1", "HC2", "HC3", "HC4"),
                              HC1 = c(NA, soma_preferencias[1:3]),
                              HC2 = c(soma_preferencias[4], NA, soma_preferencias[5:6]),
                              HC3 = c(soma_preferencias[7:8], NA, soma_preferencias[9]),
                              HC4 = c(soma_preferencias[10:12], NA))

# Calcula fluxos de entrada
fluxos_entrada <- colMeans(matriz_preferencias[,2:5], na.rm = T)

# Calcula fluxos de saída
fluxos_saida <- rowMeans(matriz_preferencias[,2:5], na.rm = T)

# Calcula diferença de fluxo de saída menos fluxo de entrada
dif_fluxos <- fluxos_saida - fluxos_entrada

# Calcula ranking
posicoes <- tibble(Alternativas = c("HC1", "HC2", "HC3", "HC4"),
                   Fluxos = dif_fluxos) %>% 
                   mutate(Rank = dense_rank(desc(Fluxos))) %>% 
                   arrange(Rank)

# Renomeia colunas
colnames(posicoes) <- c("Alternativas", "Diferença de Fluxos", "Posições")

# Imprime tabela
kable(posicoes)
Alternativas Diferença de Fluxos Posições
HC1 0.5028778 1
HC4 0.2122265 2
HC3 -0.2193699 3
HC2 -0.4957344 4