Reduzindo a programação linear para programação linear positiva

7

Suponha que tenhamos um oráculo que resolve problemas da forma

maximize  cTxsubject to  Ax=b,x0

quando (todos os coeficientes no alvo de maximização são não negativos).c0

Pode ser usado para resolver com eficiência programas lineares gerais?

TENTATIVA FAILED # 1: substitua cada variável que aparece com um coeficiente negativo em , por outra variável . Infelizmente, esse não satisfaz a restrição de não negatividade.xicTxyi:=xiyi

TENTATIVA FALHADA # 2: Assegure-se de que todos os elementos em sejam não positivos (multiplicando a equação por -1 se necessário). Em seguida, crie o LP duplo:b

maximize  bTysubject to  ATyc

Aqui, todos os coeficientes no objetivo são não negativos. No entanto, esse formulário não corresponde ao que o oráculo pode resolver, pois as restrições não são equacionais e as variáveis são ilimitadas.y

Erel Segal-Halevi
fonte
Você pode tentar usar a redução de otimização para viabilidade (pesquisa essencialmente binária).
Yuval Filmus
Posso perguntar qual é a motivação para essa não-negatividade?
John L.
11
@ Apass.Jack Tentei provar a dureza de algum problema e pensei que uma maneira potencial é reduzi-lo a partir da programação linear. No entanto, no meu problema, os coeficientes são todos positivos. Então, eu queria saber se a programação linear positiva é tão difícil quanto o problema geral.
Erel Segal-Halevi

Respostas:

5

Você pode adicionar uma variável e uma igualdade linear para alguns . Então, o problema original é equivalente a maximizar no novo sistema.yy=cTx+c0c0y

Exceto pela condição . É aí que entra. Precisamos fazer grande o suficiente que para alguns viável (isto é e hold), temos . Nesse caso, não importa que a não-negatividade corte partes do espaço viável. O valor ideal ainda é o mesmo.y0c0c0xAx=bx0cTx+c00

Então, como escolher ? Eu não sou especialista em otimização linear. Encontrar um viável é mais fácil do que encontrar um que maximize a função objetivo? caso, podemos considerar que é .c0x0c0cTx0

Se os coeficientes dados são racionais, existe outro caminho. Primeiro, vamos estabelecer que o politopo de viável tem vértices (a menos que esteja vazio): Seja um ponto em uma célula de fronteira dimensional mínima do referido politopo. Por contradição, suponha que a dimensão desta célula seja . Então, existe um ponto diferente na mesma célula. Como a célula possui uma dimensão mínima, ela não tem limites; portanto, os pontos da forma estão na mesma célula e, portanto, no politopo. Como , alguns desses têm coordenadas negativas, contradizendo a condição polítopo .xp1qr=p+t(qp)qp0rr0

Agora, faça todos os coeficientes de e inteiros multiplicando pelo denominador comum. Seja a dimensão (o comprimento do vetor ) e seja o valor absoluto máximo de qualquer coeficiente de , ou . Em seguida, podemos vincular as coordenadas de qualquer vértice do polítopo possível por . Portanto, escolha .AbncMAbcn!Mnc0:=nn!Mn+1

[EDITAR]

Ainda outra abordagem, caso você esteja disposto a ligar para o oráculo várias vezes: Primeiro, tente o acima com . Se você obtiver uma solução ou a resposta "ilimitada", está bem. Se a resposta for "insolúvel", é necessário descobrir se existem soluções com função objetiva negativa. Portanto, defina e maximize vez disso. Se você obtiver uma solução, poderá usá-la como . Se você ficar "insolúvel" novamente, estará pronto também. O último caso é a resposta "ilimitada". Então, você precisa experimentar cada vez maior (para poucas chamadas da Oracle, use uma função de crescimento rápido; a função Ackermann pode funcionar) até encontrar uma solução.c0=0z=cTzx0c0

ajoelhar
fonte
Parece bom. Eu acho que você nem precisa da última parte. Para encontrar uma solução viável, basta resolver um problema fictício como "maximizar 1 sujeito a ". A resposta deve ser 1 se houver uma solução viável (embora não tenha certeza disso). Ax=b,x0
Erel Segal-Halevi
-1

Você pode substituir uma variável x que não tem restrição para ser positiva por duas variáveis onde e são restritas para serem positivas. Todos os seus coeficientes serão idênticos, exceto que eles têm o sinal oposto.x+xx+x

No algoritmo simplex, é sempre possível colocar apenas um deles na base. Na verdade, você pode evitar cálculos adicionais apenas acompanhando se alguma variável de base é atualmente positiva ou negativa.

gnasher729
fonte
Eu não entendi essa resposta. Se você substituir por duas variáveis, os coeficientes no objetivo de maximização serão negativos.x
Erel Segal-Halevi