Excel Solver: defina a restrição como zero OU maior que

Excel Solver: defina a restrição como zero OU maior que

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 ORno 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):

insira a descrição da imagem aqui

informação relacionada