# ========================
# Modelo de Otimização - Técnica dos Pontos de Referência
# ========================
# 1. Conjuntos
set I := i1, i2, i3, i4; # Conjunto de Plantas
set J := j1, j2, j3; # Conjunto de Produtos
set K := k1, k2, k3, k4, k5; # Conjunto de Mercados
set L := l1, l2, l3, l4; # Conjunto de Centros de Coleta
# 2. Parâmetros
param A{J}, B{J}, C{J}, D{J}, O{J}, G{J}, H{J}; # Custos variáveis (produção, transporte, recuperação, descarte)
param E{I}, F{L}; # Custos fixos de abertura
param P{I,J}, Q{L,J}; # Capacidades das plantas e centros de coleta
param d{K,J}, r{K,J}; # Demanda e retorno
param alpha{J}; # Fração mínima de descarte
param M{I,J}, N{L,J}; # Parâmetros ambientais (sustentabilidade)
param t_ik{I,K}, t_kl{K,L}, t_li{L,I}, t_l{L}; # Distâncias
# 3. Parâmetros de Referência
param Z1_ref; # Valor de referência para o custo total
param Z2_ref; # Valor de referência para a sustentabilidade
# 4. Variáveis de Decisão
var X{I, K, J} >= 0; # Quantidade de produto j enviado da planta i para o mercado k
var Y{K, L, J} >= 0; # Quantidade de produto j retornado do mercado k para o centro de coleta l
var S{L, I, J} >= 0; # Quantidade de produto j enviado do centro de coleta l para a planta i (para reciclagem)
var T{L, J} >= 0; # Quantidade de produto j descartada no centro de coleta l
var Z{I} binary; # 1 se a planta i estiver aberta; 0 caso contrário
var W{L} binary; # 1 se o centro de coleta l estiver aberto; 0 caso contrário
# 5. Variável Auxiliar para o Desvio Máximo
var T_var >= 0;
# 6. Função Objetivo: Minimizar o Desvio Máximo em Relação aos Pontos de Referência
minimize Objective:
T_var;
# 7. Restrições de Aproximação aos Pontos de Referência
subject to Ref1:
T_var >= abs(
( sum {i in I} E[i]*Z[i] + sum {l in L} F[l]*W[l]
+ sum {i in I, k in K, j in J} (A[j] + B[j]*t_ik[i,k]) * X[i,k,j]
+ sum {k in K, l in L, j in J} C[j]*t_kl[k,l]*Y[k,l,j]
+ sum {l in L, i in I, j in J} (-G[j] + D[j]*t_li[l,i]) * S[l,i,j]
+ sum {l in L, j in J} (H[j] + O[j]*t_l[l])*T[l,j] ) - Z1_ref );
subject to Ref2:
T_var >= abs(
( sum {i in I, j in J} M[i,j]*( sum {k in K} X[i,k,j] + sum {l in L} S[l,i,j] )
+ sum {l in L, j in J} N[l,j]*( sum {k in K} Y[k,l,j] + sum {i in I} S[l,i,j] + T[l,j] ) ) - Z2_ref );
# 8. Outras Restrições do Modelo
# 8.1 Atendimento da Demanda: A produção enviada das plantas deve atender à demanda dos mercados
subject to Atendimento_Demanda {k in K, j in J}:
sum {i in I} X[i,k,j] >= d[k,j];
# 8.2 Capacidade das Plantas: O total de produtos processados em uma planta não pode exceder sua capacidade
subject to Capacidade_Plantas {i in I, j in J}:
sum {l in L} S[l,i,j] + sum {k in K} X[i,k,j] <= Z[i] * P[i,j];
# 8.3 Fluxo de Produtos Retornados: Os produtos retornados não podem ser maiores que os enviados inicialmente
subject to Fluxo_Produtos_Retornados {k in K,
To get help, provide a complete example that someone else can run to reproduce and analyze the error:
- Be sure to include the complete model. It seems that part of constraint
Fluxo_Produtos_Retornados
is missing. - Show all of the statements that you tried to execute in AMPL, including the statements for reading the data.
- Use the up-arrow icon (above the editor window) to upload the spreadsheet file as an attachment to your reply.
Also, copy all lines of the error message into your reply
Show how to formulaste it