LPSolve - especificar coeficientes constantes
-
21-12-2019 - |
Pergunta
Eu estou usando LPSolve IDE para resolver um LP problema.Eu tenho que testar o modelo em relação a cerca de 10 ou 20 conjuntos de parâmetros diferentes e compará-los.
Existe alguma maneira para me manter o modelo geral, mas para especificar as constantes como eu desejo?Por exemplo, se eu tenho a seguinte restrição:
A >= [c]*B
Quero fazer o teste como o modelo se comporta quando [c] = 10
, [c] = 20
, e assim por diante.Por agora, eu estou simplesmente preparar diferentes .lp arquivos via pesquisar e substituir, mas:
a) ele não parece muito eficiente
b) em algum ponto, eu tenho que considerar a restrição do formulário A >= B/[c] // =(1/[c]*B)
.Parece, no entanto, que LPSolve não recogize o operador de divisão.É especificar 1/[c]
diretamente a cada vez que a única opção?
Solução
Ele não é totalmente claro qual o formato que você usa com lp_solve.Com o cplex lp formato, por exemplo, não há nenhuma maneira melhor:você não pode usar a divisão para o coeficiente (ou mesmo de multiplicação para que o assunto) e não há nenhuma função 'incluir' outro arquivo ou introduzir nomes simbólicos para um parâmetro.É uma linguagem muito simples, e não é adequado para qualquer tarefa complexa.
Há várias soluções para o seu problema;depende se você está interessado em algo rápido para implementar, ou "limpar", reutilizáveis e com um curto tempo de execução (é claro que este é um compromisso).
Você tem a possibilidade de gerar o seu lp ficheiros a partir de outro idioma, por exemplo,python, bash, etc.Esta é uma "rápida e suja" em solução:muito lento em tempo de execução, mas, provavelmente, o mais rápido de implementar.
Como todos os lp solver eu sei, lp_solve vem com vários modelação de interfaces:você pode utilizar, por exemplo, o GNU formato mp em vez da atual.Ele reconhece multiplicação, divisão, condicionais, etc.(tudo o que você está procurando, consulte a seção 3.1 'expressões numéricas')
Finalmente, você tem a possibilidade de utilizar diretamente o lp_solve interface a partir de outra linguagem de programação (por exemplo,C) qual será a opção mais flexível, mas pode exigir um pouco mais de trabalho.
Ver o lp_solve documentação para mais detalhes sobre os formatos de entrada suportados e a referência da API.