Estou criando um modelo para otimizar pedidos de compra.
O valor a encomendar deverá ser superior a 500 ou igual a zero.
Como defino tal restrição no Solver?
Tentei uma restrição binária e também tentei várias fórmulas diferentes, mas nada parece funcionar.
Basicamente preciso conseguir expressar OR
no Solver, como faço isso?
EDIT: no link a seguir você pode ver o arquivo Excel que estou usando: Clique aqui
Responder1
Então 0 é permitido, 1 não é permitido, 499 não é permitido e 501 é permitido? Parece uma área não contígua. Portanto, não é um problema puro de otimização, mas também uma espécie de problema combinatório. Receio que o Solver não consiga lidar com isso.
Você deve analisar dois casos de uso separadamente:
- O valor é zero (valor fixo, cálculo simples);
- O valor é 500 ou superior (otimizar no Solver usando restrição >=500);
e então compare esses dois casos usando uma fórmula IF.
EDITAR:
Tentei usar restrições "binárias" e "inteiras" como Karl sugeriu, mas não funcionaram.
- Crie uma variável binária 0-1 e uma variável contínua >=500 e, em seguida, use IF para copiar a variável contínua ou escrever 0 no valor das compras
- Crie uma variável binária 0-1 e uma variável contínua >=500 e calcule as compras como seu produto
- Crie uma variável inteira >=499 e use IF para substituir 499 por 0 para o valor das compras
Em todos os casos, o resultado muitas vezes estava errado e dependia das condições iniciais. Aparentemente, o Solver não gosta dessas coisas.
Pensei então em aplicar minha proposta acima a todos os seis valores de compra, e otimizá-los de forma independente, por exemplo, otimizando a soma dos custos de todos os meses. Mas acontece que eles não são independentes: o estoque inicial depende do mês anterior, e a compra ideal para um mês depende se a compra foi feita no mês anterior. Portanto, não é possível adicionar um IF simples a cada mês.
O melhor que pude fazer é o seguinte.
Adicionei uma variável binária 0-1 e uma variável contínua >=500 e calculei as compras de cada mês usando IF. Mas otimizei apenas as variáveis contínuas usando o Solver. As variáveis binárias são um parâmetro. Ou seja, selecionamos os meses em que será realizada uma compra, depois utilizamos o Solver para calcular os valores dessas compras, e a seguir anotamos o custo total resultante.
Isto deve ser repetido para todas as combinações de compras e não compras. O número dessas combinações é 2 6 =64. Mas na verdade, se você não comprar nada em janeiro, você acaba com um estoque final negativo, o que não é permitido. Portanto, existem apenas 32 combinações válidas. Adicionei fórmulas para calcular os valores binários do índice de combinação, iterei o índice 32 vezes, iniciei o Solver manualmente e copiei os resultados "apenas como valores" para cada combinação.
O resultado é que o custo mínimo é de 4 625,00€ e existem duas combinações para atingir este valor.
Aqui está o arquivo enviado para o Google Docs, com uma captura de tela do Solver.
Lançar o Solver várias vezes manualmente é entediante, acredito que pode ser automatizado usando macros.
Responder2
Crie uma variável binária adicionando uma restrição informando que o valor da variável (na função objetivo) é binário. O coeficiente desta variável na função objetivo deve ser 0. Em seguida, você adiciona as seguintes restrições como faria normalmente:
-500B+X>=0 (nunca passe de 500)
-MB+X<=0 (combinado com as forças de restrição anteriores 0 quando B é 0)
B= Variável binária1
M = número positivo muito grande (maior que X pode ser)
X= variável contínua
[Editar]
Entendo que você deseja fazer algo assim (também fiz algumas alterações no seu arquivo de planilhas, mas não consigo compartilhar o arquivo Excel em que trabalhei aqui):