Eu tenho duas variáveis k
e t
como funções de duas outras variáveis p1
e p2
. Eu também sei seus valores máximos. Não tenho expressão analítica para isso. Quero encontrar os valores de k
e t
quais são os mais próximos de seus valores máximos.
Existe uma maneira de otimizar o k = f1(p1, p2)
e t = f2(p1, p2)
?
Eu posso tentar verificar o produto k0 * t0
ou o produto dos quadrados k0^2 * t0^2
ou alguma outra relação dos dois.
Isso é eficiente e para onde ir?
Obrigado.
optimization
Christian Clason
fonte
fonte
p1
ep2
tal quek
et
atingir (tanto quanto possível) os seus valores máximos? Suponho que você tenha uma função que, dadap1
ep2
, retorne o valor dek
et
, mas nenhuma informação sobre os derivados dek
et
com relação ap1
ep2
?k
et
será atingido no mesmo ponto (que você está tentando encontrar) ou está procurando uma compensação?Respostas:
Há duas questões aqui:
Seu problema de otimização tem dois objetivos concorrentes: maximizar e maximizar . Isso é conhecido como otimização multi-objetivo (ou multi-critério ), e esses problemas têm um número infinito de soluções, cada uma baseada em uma escolha específica do peso relativo dos objetivos (ou seja, é mais importante que esteja próximo para o valor máximo que para ?). Se ambos têm a mesma importância para você, você pode simplesmente minimizar a função em que e são os valores máximos conhecidos dek=f1(p1,p2) t=f2(p1,p2) f1 f2 F(p1,p2)=(f1(p1,p2)−K)2+(f2(p1,p2)−T)2, K T k e , respectivamente. Caso contrário, você adicionaria um peso correspondente antes de cada termo. (Se os valores máximos não fossem conhecidos, você minimizaria )t −f21−f22
Para encontrar um minimizador de , você só pode usar valores de função de em um determinado ponto . Isso é conhecido como otimização livre de derivado ; veja, por exemplo, Introdução à Otimização sem Derivativos por Conn, Scheinberg e Vicente ou capítulo 9 em Otimização Numérica . A maioria deles usa derivadas aproximadas com base em diferenças finitas ou derivadas de funções de interpolação. Como é uma função de apenas duas variáveis, construir aproximações de diferenças finitas do Hessiano completo não é muito caro (ou instável). A idéia é a seguinte: dado um ponto , você constrói um modelo quadrático localF F (p1,p2) F pk=(pk1,pk2) mk(pk+d)=F(pk)+(gk)Td+12dTHkd,
calcule seu minimizador e defina . Aqui, para um pequeno (mas não muito pequeno, veja abaixo) ,
com e , é o gradiente aproximado e
é uma aproximação de Taylor do Hessiano. Isso requer avaliação dedk pk+1=pk+dk ϵ>0 gk=(g1,g2)T,gi=F(pk+ϵei)−F(pk−ϵei)2ϵ e1=(1,0)T e2=(0,1)T Hk=(h11h21h12h22),hij=F(pk+ϵei+ϵej)−F(pk+ϵei)−F(pk+ϵej)+F(pk)ϵ2 F em 5 pontos adicionais em cada iteração.
Uma questão importante em qualquer aproximação de diferença finita é a escolha de : se for muito grande, você terá uma aproximação ruim da derivada; se for muito pequeno, você corre o risco de cancelamento e, portanto, a instabilidade numérica. Uma boa regra geral é , em que é o arredondamento da unidade (cerca de para precisão dupla).ϵ ϵ=u1/3 u 10−16
Na prática, você gostaria de combinar isso com uma estratégia de região de confiança, na qual exigiria para dentro de uma bola cujo raio você se adapta durante a iteração (consulte os livros mencionados acima).dk
Uma comparação de algoritmos e implementações para otimização sem derivadas pode ser encontrada nesta página da Web , que acompanha o artigo "Otimização sem derivadas: uma revisão de algoritmos e comparação de implementações de software" por Luis Miguel Rios e Nikolaos V. Sahinidis
fonte
fminunc
Com a otimização multiobjetivo, existem várias maneiras de combinar / comparar as variáveis objetivas em sua análise. O problema é que não existe uma maneira "certa" de fazer isso. Depende inteiramente do que realmente é o problema e do que as variáveis representam. É provável que sua melhor aposta maximize algo como onde é um valor positivo arbitrário. Uma vez que você tem uma resposta, veja se você como a resultante e , e modificar conforme necessário até encontrar uma solução que você está feliz com.a k t ak+a∗t a k t a
Quanto à otimização real, não ter uma expressão analítica para as funções não é o fim do mundo, mas não ter nenhuma informação dificultará as coisas. Se você pode assumir algum nível de suavidade / continuidade, mesmo que seja apenas por partes, pode usar um algoritmo de localização de raiz em uma aproximação derivada para encontrar máximos locais (existem muitos métodos mais sofisticados que isso, mas não estou familiarizado com É provável que outras pessoas aqui apontem você na direção certa). Se você pode estabelecer a convexidade, pode estendê-la à otimização global.
A otimização multiobjetiva de caixa preta verdadeira não é exatamente um problema fácil, mas algumas suposições e um processo iterativo com uma redução objetiva devem fornecer uma resposta aceitável (supondo que exista).
fonte