Programação Multiobjetivo
Então, a programação multiobjetivo é aquela em que a gente cria um problema e esse problema acaba tendo duas ou mais funções objetivo.
Então a gente usa esse tipo de programação para quando a gente tem que lidar com isso, quando a gente tem que lidar com mais de uma função objetivo.
A gente resolve isso simplesmente juntando as funções objetivo em apenas uma.
Como que a gente faz essa junção das funções em apenas uma?
Então vamos fazer exemplos gerais e entrar no exemplo específico, porque aqui tem vários tipos de forma para você juntar, na verdade, a forma é uma só, só que o formato da sua função objetivo em si vai diferir de questão para a questão.
Então suponha que eu quero maximizar uma função F e maximizar também uma função G, por exemplo, eu quero maximizar o lucro e maximizar, por exemplo, o público atendido.
Você tem que maximizar duas coisas, são duas funções objetivo.
Para juntar em uma só, você vai criar constantes alfa e beta que são reais, números reais, que são os pesos dados para cada objetivo, de preferência, se quiser colocar ambas menor igual a 1 e maior igual a zero, tudo bem, não é uma necessidade, mas você pode.
E aí você cria essas constantes de forma que sejam os pesos para cada objetivo.
Então, por exemplo, se eu quero maximizar F, mas eu não ligo para G, equivale a constante que vai multiplicar essa parte da função objetivo valer 1 e essa da constante aqui valer zero, aí eu vou só maximizar F.
Se eu quero maximizar F e G com uma proporção igual para ambas, é só fazer, por exemplo, Alfa igual a meio, Beta igual a meio, aí elas estão iguais na minha equação.
E aí feito isso, antes de modelar eu defino os pesos.
Então é muito importante que a gente não leve esses pesos, Alfa e Beta para a modelagem, eles têm que já (inint 02:01) números, que eles não são variáveis que vão entrar.
A nossa função objetivo vai ser uma soma de F com G, só que F multiplicado por uma constante Alfa e G multiplicado por uma constante Beta.
Essa Alfa e essa Beta já definidas são os pesos que você dá para cada uma das funções.
Agora note, como você quer maximizar F e maximizar G, basta maximizar essa soma então.
Aí perceba que quando Beta é igual a zero, fica só Alfa F, quando Alfa é igual a zero, fica só Beta G e aí se Alfa e Beta, por exemplo, valerem os dois 1, meio, aí você vai ter
que maximizar as duas em uma proporção igual.
E aí as restrições continuam as de sempre.
A mesma coisa vale se eu quiser minimizar duas funções, eu quero minimizar F e minimizar G, por exemplo, minimizar o valor gasto e minimizar o risco, por exemplo, aí eu vou criar os meus pesos Alfa e Beta, que é o quanto eu me importo com minimizar F e o quanto me importo com minimizar G, eu defino os valores dos pesos, exatamente que nem o caso passado, e aí eu junto isso numa coisa só.
Como eu quero minimizar as duas, eu vou minimizar a soma das duas.
Só que agora é Alfa F mais Beta G e as restrições são iguais.
Agora eu falei tudo isso para que você preste muita atenção aqui.
E se meu objetivo for diferente entre as funções, por exemplo, eu quero maximizar a função F e minimizar uma função G, o que acontece aqui é que isso aqui vai ter que virar uma função objetivo só, que vai ser ou de maximizar ou de minimizar.
Mas como é que eu vou juntar as duas sendo que uma é de maximizar e a outra é de minimizar?
Aí o que a gente tem que saber é como fazer essa conversão aqui.
Se eu quero minimizar uma função G, isso equivale a dizer que eu quero maximizar a função menos G.
Por exemplo, graficamente se a minha G for uma reta assim, minimizar ela é levar para esse valor, só que a menos G vai ser essa daqui refletida.
E aí o máximo dela também vai ser esse valor.
Então, por exemplo, se eu fizer isso, maximizar ela é levar também para esse valor.
Então, de uma outra forma, maximizar o lucro, por exemplo, é minimizar menos o lucro, porque o menor valor de menos o lucro é o maior valor do lucro.
Então, sabendo disso, a gente vai usar isso para poder pegar, por exemplo, uma função que é maximizar alguma e minimizar outra, e em vez de escrever minimizar essa outra, eu vou falar que é maximizar menos essa outra e juntar isso tudo numa função objetivo só de maximizar.
Então depois que a gente percebe isso, vamos criar os pesos Alfa e Beta como sempre, definir os seus valores e aí ou eu junto em uma função só objetivo de maximizar ou em uma só de minimizar.
Então, por exemplo, se eu quero maximizar F e minimizar G, eu crio uma função nova objetivo que é maximizar Alfa F menos Beta G, porque aí maximizar menos G é igual a minimizar G.
Ou se eu quero juntar essa numa função objetivo de mínimo, eu quero minimizar G, então continua positivo, mas como eu quero maximizar F eu minimizo menos F e aí eu crio uma função objetivo que junta as duas coisas.
Vamos ver um exemplo.
Está aqui o Banco Positivo que é um banco que realiza investimentos em 4 empresas, a empresa 1, a empresa 2, a empresa 3 e a empresa 4, e aí eu quero maximizar o retorno e minimizar o risco.
Então uma é uma de máximo, a outra é de mínimo.
A de máximo era essa aqui ó, maximizar o retorno dado por isso e a de mínimo era minimizar o risco dado por isso.
Para juntar as duas em uma equação só, em uma só função objetivo para a gente resolver, a gente só precisa fazer isso, só juntar as duas em uma função objetivo, e aí para isso eu crio constantes Alfa e Beta que são aquilo que eu chamo de pesos pré-definidos, antes de encaixar no modelo.
Como eu quero maximizar o retorno e minimizar o risco, eu posso maximizar constante vezes retorno, menos constante vezes risco, porque maximizar o menos o risco é minimizar o risco.
Então, por exemplo eu faço, maximizar, Alfa que é uma constante que é o peso do retorno vezes o retorno, menos uma constante que é o peso do risco vezes o risco, e aí fazendo isso eu maximizo o retorno, ao mesmo tempo em que eu minimizo o risco.
Restrições são as mesmas: X1 mais X2 mais X3 mais X4 é igual a 1, quer dizer que 100% da minha verba tem que estar alocada entre as 4 empresas, aí o que você pode fazer, por exemplo, como você definiu o retorno aqui em cima, na restrição você deixa claro que retorno é isso e que risco é isso.
Ou você encaixa esse retorno nesse risco na minha função objetivo também que não tem problema.
E claro, declara as suas variáveis positivas senão você vai perder nota na prova.
Imagina então que eu quero só maximizar o retorno, quer dizer que o peso do meu retorno vai ser 1 e o peso do risco vai ser zero, vai ficar 1 vezes retorno menos zero vezes risco, vai zerar isso e ficar só retorno.
Imagina que eu quero só minimizar o risco, então o peso do retorno vai ser zero e o peso do risco vai ser igual, a 1 e aí fazendo isso eu vou sumir com esse daqui e ficar só maximizar menos o risco que é igual a minimizar o risco.
E imagina que eu quero dar pesos iguais para ambos, eu me importo tanto com o retorno quanto com o risco.
Basta você colocar, por exemplo, Alfa igual a meio, Beta igual a meio, e aí vai ficar maximizar meio vezes o retorno, menos meio vezes o risco, assim eu dou pesos iguais para os dois, para as duas funções e aí eu maximizo as duas, no caso maximizo o retorno, minimizo o risco ao mesmo tempo, eu crio uma solução intermediaria que me preocupe com as duas.
Então é isso, para você programar um problema linear ou não necessariamente linear, que nesse caso aqui, ele nem é linear, mas que tenha mais de uma função objetivo, você vai juntar as funções objetivo que você tem em uma só, fazendo uma soma de uma constante, vezes uma constante vezes a outra e aí como você vai ter que juntar em uma de máximo ou uma de mínimo, aquelas que eram ao contrário, que eram ou minimizar dado que você vai maximizar, ou maximizar dado que você vai minimizar, é só colocar um sinal de menos pra você descontar isso.