title: Usinas com Metas; sets: parametros /@ole('UsinasMetas(R).xls', 'parametros')/: ; frentes /@ole('UsinasMetas(R).xls', 'frentes')/: ; usinas /@ole('UsinasMetas(R).xls', 'usinas')/: req; minas /@ole('UsinasMetas(R).xls', 'minas')/: cap, z; matriz_up(usinas, parametros): tu, tr, tl, wm, dpm, dnm; matriz_mfp(minas, frentes, parametros): t; matriz_ufm(usinas, frentes, minas): x; matriz_fm(frentes, minas): Qu, ritmin, ritmax; matriz_mm(minas, minas): dpp, dnp; endsets data: t, req, Qu, cap = @ole('UsinasMetas(R).xls','t','req','Qu','cap'); ritmin, ritmax = @ole('UsinasMetas(R).xls','ritmin','ritmax'); tu, tr, tl = @ole('UsinasMetas(R).xls', 'tu','tr','tl'); wm = @ole('UsinasMetas(R).xls','wm'); enddata ! Minimizar o desvio de produção das minas, assim como o desvio de qualidade dos parâmetros de controle e o número de minas usadas; [fo] min = @sum(Minas(k1): @sum(Minas(k2): dpp(k1,k2) + dnp(k1,k2))) + @sum(usinas(l): @sum(parametros(j): wm(l,j)*dpm(l,j) + wm(l,j)*dnm(l,j))) + 1000000*@sum(minas(k): z(k)); ! O limite superior de especificação de cada parâmetro deve ser atendido para cada usina; @for(usinas(l): @for(parametros(j): @sum(minas(k): @sum(frentes(i): (t(k,i,j) - tu(l,j))*x(l,i,k))) <= 0)); ! O limite inferior de especificação de cada parâmetro deve ser atendido para cada usina; @for(usinas(l): @for(parametros(j): @sum(minas(k): @sum(frentes(i): (t(k,i,j) - tl(l,j))*x(l,i,k))) >= 0)); ! A meta de especificação de cada parâmetro deve ser atendida para cada usina; @for(usinas(l): @for(parametros(j): @sum(minas(k): @sum(frentes(i): (t(k,i,j) - tr(l,j))*x(l,i,k))) - dpm(l,j) + dnm(l,j) = 0)); ! As requisições de minério das usinas devem ser atendidas; @for(usinas(l): @sum(minas(k): @sum(frentes(i): x(l,i,k))) = req(l)); ! A quantidade de minério lavrada das frentes de cada mina não pode superar a quantidade máxima disponível; @for(minas(k): @for(frentes(i): @sum(usinas(l): x(l,i,k)) <= Qu(i,k))); ! A quantidade de minério retirada das frentes de cada mina não pode ser inferior ao ritmo mínimo desejado; @for(minas(k): @for(frentes(i) | ritmin(i,k) #ne# 0: @sum(usinas(l): x(l,i,k)) >= ritmin(i,k))); ! A quantidade de minério retirada das frentes de cada mina não pode ser superior ao ritmo máximo desejado; @for(minas(k): @for(frentes(i) | ritmax(i,k) #ne# 0: @sum(usinas(l): x(l,i,k)) <= ritmax(i,k))); ! A capacidade das minas deve ser respeitada; @for(minas(k): @sum(frentes(i): @sum(usinas(l): x(l,i,k))) <= cap(k)); ! z(k) = 1 se a mina k é utilizada; @for(minas(k) | cap(k) #NE# 0: z(k) >= @sum(frentes(i): @sum(usinas(l): x(l,i,k))) / cap(k); @bin(z(k))); ! Para qualquer par de minas k1 e k2, a quantidade de minério que sai de suas frentes para atender as usinas deve ser a mais equilibrada possível; @for(minas(k1): @for(minas(k2) | k2 #NE# k1: @sum(frentes(i): @sum(usinas(l): x(l,i,k1))) + dnp(k1,k2) - dpp(k1,k2) = @sum(frentes(i): @sum(usinas(l): x(l,i,k2))))) ; data: @ole('UsinasMetas(R).xls', 'x') = x; enddata end