Problema de viabilidade de programação linear com restrições estritas de positividade


15

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 > 0Axbx>0xi>0xixxxxi>0

Respostas:


15

Você pode contornar o problema de escolher um pequeno ϵ>0 sendo um pouco mais ambicioso: tente encontrar x modo que UMAxb e que a menor entrada em x seja a maior possível.

y=[xϵ]Rn+1 1
xRn
maxy[0 0...0 0 1 1]yst[UMA 0 0]ybe0 0[1 10 00 0-1 10 01 10 0-1 10 01 1-1 1]y.

Esta é uma reformulação do seguinte problema:

maxϵstUMAxbexϵ1 1.


bem feito, isso é equivalente a um truque que um co-autor e eu acabei de usar em um artigo recente e definitivamente superior à abordagem sugerida.
Aron Ahmadia

Acordado. Bem jogado, senhor.
Geoff Oxberry

O problema reformulado pode ter um objetivo ilimitado nos casos em que a resposta ao problema original é trivial. Por exemplo, se o sistema de restrições for apenas . Tudo bem, desde que você verifique se é viável, ideal ou ilimitado no status de retorno do seu solucionador lp ou vincule explicitamente o . ϵx1ϵ
David Nehme

@DavidNehme: Pode-se adicionar a restrição para obter um objetivo limitado. yn+1 11 1
Arnold Neumaier

5

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:Axb,x>0}Fε

minx0 0stUMAxbxε1 1.

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 : x0 , 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 0B={x:x0,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 0F 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εF0FFεε>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 εBFεε, 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ε


4

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+

Pode ser necessário ajustar , e sua solução será qualificada para "dentro de um fator de ϵ ", mas isso é suficiente para muitas situações.ϵϵ


2

A resposta dada pelo aeismail deve ser lida com atenção, observe o lp

max(x1+x2)

st

x1+x21

x1,x20

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


No entanto, se você tiver um grande número de soluções degeneradas, como você lidaria com isso numericamente? Praticamente nenhum solucionador numérico lançará um aviso (ou pior) sobre a solução desse problema?
precisa saber é

Não, eles não vão; eles apenas retornam a primeira solução ideal encontrada. A maneira como você continuaria a gerar soluções é adicionar planos de corte (ou outras restrições) que excluam as soluções ideais previamente calculadas. Nesse caso, a adição de planos de corte permitiria retornar uma aproximação discreta do conjunto infinito de soluções ideais.
precisa saber é o seguinte

Eu consideraria isso uma decisão de programação estranha; por que você não gostaria de informar ao usuário que a função objetivo estava fazendo algo estranho na vizinhança da solução relatada? Para um solucionador não-linear, eu pude ver que havia um problema em descobrir o que estava acontecendo; mas não seria mais fácil dizer isso com um sistema linear?
precisa saber é

Eu precisaria pensar em como detectar a degenerescência construindo problemas, mas, normalmente, os usuários desejam uma solução ideal; portanto, a informação mais importante para um LP é retornar se a solução for ótima, viável (mas não ótima), inviável ou ilimitado. (Esses status são, de fato, o que um solucionador como o CPLEX retornaria.) A degeneração é principalmente uma questão teórica; a única razão pela qual isso seria discutido em um contexto numérico é no design de algoritmos ou na prática, para observar que a degenerescência normalmente retarda o solucionador.
Geoff Oxberry
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.