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

2

Estou criando um modelo para otimizar os pedidos.

O valor a ser pedido deve ser maior que 500 ou igual a zero.

Como defino essa restrição no Solver?

Eu tentei uma restrição binária e também tentei várias fórmulas diferentes, mas nada parece funcionar.

Basicamente eu preciso ser capaz de expressar OR no Solver, como faço isso?

EDIT: no link a seguir você pode ver o arquivo excel que estou usando: Clique aqui

    
por Nuno Nogueira 27.01.2016 / 13:58

2 respostas

2

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 um tipo de problema combinatório. Temo que 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 maior (otimizar no Solver usando restrição > = 500);

e, em seguida, compare esses dois casos usando uma fórmula IF.

EDITAR:

Eu tentei usar restrições "binárias" e "inteiras" como Karl sugeriu, mas elas não funcionaram.

  • Crie uma variável binária 0-1 e uma variável contínua > = 500 e use IF para copiar a variável contínua ou escrever 0 para o valor de compras
  • Crie uma variável binária 0-1 e uma variável contínua > = 500 e, em seguida, calcule as compras como seu produto
  • Crie uma variável inteira > = 499 e use IF para substituir 499 por 0 pelo valor de compras

Em todos os casos, o resultado foi muitas vezes errado e dependia das condições iniciais. Aparentemente Solver não gosta de coisas assim.

Depois, pensei em aplicar minha proposta acima a todos os seis valores de compra e otimizá-los de forma independente, por exemplo, otimizando a soma de custos para todos os meses. Mas acontece que eles não são independentes: o estoque inicial depende do mês anterior e a compra ideal por um mês depende de uma compra ter sido feita no mês anterior. Por isso, não é possível adicionar um IF simples a cada mês.

O melhor que pude fazer é o seguinte.

Eu 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 eu 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 uma compra será feita e usamos o Solver para calcular os valores dessas compras e, em seguida, anotar o custo total resultante.

Isso 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, acabará com um estoque de fechamento negativo que não é permitido. Portanto, existem apenas 32 combinações válidas. Eu adicionei fórmulas para calcular os valores binários do índice de combinação, iterou o índice 32 vezes, lançou o Solver a cada mão e copiou os resultados "como valores apenas" para cada combinação.

O resultado é que o custo mínimo é de 4 625,00 € e existem duas combinações para alcançar este valor.

Aqui está o arquivo enviado para o Google Docs, com uma captura de tela do Solver.

Iniciar o Solver várias vezes manualmente é entediante, acredito que possa ser automatizado usando macros.

    
por 27.01.2016 / 15:58
1

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 dessa variável na função objetivo deve ser 0. então você adiciona as seguintes restrições como faria normalmente:

-500B + X > = 0 (nunca abaixo de 500)

-MB + X < = 0 (combinado com 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]

Eu entendo que você quer fazer algo assim (eu também fiz algumas alterações no seu arquivo de folhas, mas eu não posso compartilhar o arquivo de excel que eu trabalhei aqui):

    
por 27.01.2016 / 15:58