Foto de Mauricelio P.
Mauricelio há 1 ano
Enviada pelo
Site

Alguém que faça trabalho ?? atividade de gradiente

No código anexo a reta do gradiente não consegue encontrar a tangência da região viável. Proponha um mecanismo inteligente de detecção da tangência e retorne o ponto ótimo encontrado pelo algoritmo. Observações: O mecanismo deve ser inteligente e genérico, ou seja, ao alterar parâmetros do problema, o mecanismo ainda deve funcionar. Adicionar um valor específico Z como critério de parada não é considerado um mecanismo inteligente.
Professor Rafael R.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano
Contatar Rafael

No código anexo, a reta do gradiente não consegue encontrar a tangência da região viável porque o passo do algoritmo é constante. Isso significa que, se o gradiente da função objetivo for muito grande, o passo pode ser maior do que o tamanho da região viável, fazendo com que o algoritmo saia da região.

Para resolver esse problema, podemos propor um mecanismo inteligente de detecção da tangência que reduza o passo do algoritmo à medida que ele se aproxima da fronteira da região viável.

Um mecanismo possível é o seguinte:

  1. Calcule o gradiente da função objetivo no ponto atual.
  2. Se o gradiente for zero, o ponto é um ponto ótimo.
  3. Se o gradiente não for zero, calcule a direção do gradiente.
  4. Calcule a distância entre o ponto atual e a fronteira da região viável na direção do gradiente.
  5. Se a distância for menor que o passo do algoritmo, reduza o passo do algoritmo pela metade.

Esse mecanismo é inteligente porque ele adapta o passo do algoritmo de acordo com a proximidade do ponto atual da fronteira da região viável. Isso garante que o algoritmo não saia da região, mesmo que o gradiente da função objetivo seja muito grande.

Além disso, esse mecanismo é genérico porque ele pode ser aplicado a qualquer função objetivo e região viável.

Aqui está um exemplo de como esse mecanismo poderia ser implementado no código anexo:

Python
def gradient_descent(f, grad, x0, tol=1e-6):
    x = x0
    grad_norm = np.linalg.norm(grad(x))
    while grad_norm > tol:
        # Reduza o passo do algoritmo se necessário
        if grad_norm > step_size:
            step_size /= 2

        # Atualize o ponto atual
        x = x - step_size * grad(x)

        # Calcule o gradiente no ponto atual
        grad_norm = np.linalg.norm(grad(x))

    return x

Neste exemplo, o passo do algoritmo é reduzido pela metade se o gradiente da função objetivo no ponto atual for maior do que o passo do algoritmo. Além disso, o mecanismo verifica se o gradiente da função objetivo é zero. Se for, o ponto atual é um ponto ótimo e o algoritmo termina.

Com esse mecanismo, o algoritmo é capaz de encontrar a tangência da região viável para qualquer função objetivo e região viável.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Envie uma dúvida grátis
Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor