Existe um sistema de restrições lineares . Desejo encontrar um vetor estritamente positivo que satisfaça essas restrições. Isso significa que é necessário para cada componente de . Como posso usar um solucionador de LP para encontrar um vetor tão estritamente positivo (ou confirmar que não existe )? Não posso simplesmente introduzir outro sistema de restrições , porque a igualdade sempre deve ser permitida em um LP - mas posso usar o solucionador de LP várias vezes, com a alteração das funções objetivas. Acho que devo usar o método da variável slack, mas não sei como.x > 0 x i > 0 x i x x x x i > 0
15
Para um problema de viabilidade de LP, eu não usaria simplex padrão. Os algoritmos simplais primários (ou duplos) padrão apenas visitarão os vértices do conjunto viável dos problemas primários (ou duplos).
Deixe o conjunto viável do problema que você realmente deseja resolver seja e suponha que você deveria resolver o problema ( F ε ):F={x:Ax≤b,x>0} Fε
O aproximar mais próximo do problema que você deseja resolver é , que admite pontos um pouco demais. O problema é que o limite da orthant positiva (isto é, o conjunto B = { x : x ≥ 0 , ∃ i : x i = 0 } poderia tornar-se parte da fronteira do conjunto viável de F 0 . Tínhamos gostaria de excluir esses pontos.Uma maneira de fazer isso é fazer o que Aron sugeriu, que é definir εF0 0 B={x:x≥0,∃i:xi=0} F0 ε para algum pequeno valor positivo e, em seguida, use qualquer algoritmo LP padrão. Essa estratégia é boa e provavelmente funcionará em uma ampla variedade de situações. No entanto, falhará se for inviável. Sabemos que F 0 ⊂ F ⊂ F ε para todos ε > 0 (para abusar da notação e se referir a um conjunto viável pelo seu problema correspondente), e é possível que, mesmo se você escolher pequenos valores positivos de ε , o solucionador de LP indicará que seu LP é inviável.Fε F0⊂F⊂Fε ε>0 ε
Para um solucionador LP, eu usaria qualquer algoritmo de ponto interior de LPs que começa com um ponto e estadias possíveis viável, que é outra maneira de excluir pontos em . Você não precisa fornecer um ponto viável para esses algoritmos; os solucionadores padrão farão isso por você. Métodos como escala afim, redução de potencial e métodos de barreira configuram LPs auxiliares que encontrarão soluções viáveis, e as iterações para esses algoritmos atravessam o interior da região viável. Você só precisa localizar um ponto em sua região viável, desde que os problemas auxiliares usados pelos solucionadores de LP localizem um ponto viável para o seu problema e esse ponto viável seja estritamente positivo, você deve estar bem. Se a resolução de F ε falhar para pequenos valores positivos de εB Fε ε , você ainda poderá usar esses métodos para localizar um ponto viável estritamente positivo em .F0
Não use simplex, porém, porque ele explorará apenas os vértices de , que é exatamente o que você deseja evitar.Fε
fonte
Os problemas de viabilidade são um jogo um pouco mais complicado que os problemas lineares gerais, que você observou. Se você estiver resolvendo aproximadamente (usando uma representação em ponto flutuante do sistema de equações e restrições), é legítimo exigir , onde ϵ é um valor numérico muito pequeno, grande o suficiente para garantir que x i realmente vive em ℜ + , mas pequeno o suficiente para que uma solução na fronteira não seja considerada.xi>=ϵ ϵ xi R+
Pode ser necessário ajustar , e sua solução será qualificada para "dentro de um fator de ϵ ", mas isso é suficiente para muitas situações.ϵ ϵ
fonte
A resposta dada pelo aeismail deve ser lida com atenção, observe o lp
st
Possui soluções e ( 0 , 1 ) , além de outras (degeneradas). A generalidade da questão implica que esses casos também precisam ser tratados.(1,0) (0,1)
Como você pode escolher sua função objetiva, tente modificá-la iterativamente. Por exemplo, comece com todos os coeficientes para todas as variáveis iguais a uma, verifique se você obtém uma solução adequada. Se uma variável é zero, aumente o coeficiente e comece novamente ...
Embora eu não possa dar uma prova matemática de que isso funciona (ou um procedimento bem definido de como modificar a função objetivo). Eu espero que isso ajude :)
fonte