Suponha que tenhamos um oráculo que resolve problemas da forma
quando (todos os coeficientes no alvo de maximização são não negativos).
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.
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:
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.
linear-programming
Erel Segal-Halevi
fonte
fonte
Respostas:
Você pode adicionar uma variável e uma igualdade linear para alguns . Então, o problema original é equivalente a maximizar no novo sistema.y y=cTx+c0 c0 y
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.y≥0 c0 c0 x Ax=b x≥0 cTx+c0≥0
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 é .c0 x0 c0 −cTx0
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 .x p ≥1 q r=p+t(q−p) q−p≠0 r r≥0
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 .A b n c M A b c n!⋅Mn c0:=n⋅n!⋅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=0 z=−cT z x0 c0
fonte
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+−x− x+ 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.
fonte