Problema da mochila – Algoritmo em Python (problema da mochila)

O problema da mochila algorítmica (e sua implementação em python) é interessante e faz parte do primeiro programa digital e de ciência da computação.

Este problema ilustra algoritmos gananciosos que enumeram todas as possibilidades de resolver um problema para encontrar a melhor solução.

O problema da mochila de algoritmos python é um problema de otimização, ou seja, uma função que deve ser maximizada ou minimizada e restrições que devem ser satisfeitas.

O problema da mochila – algoritmo Python

Para uma mochila de capacidade máxima de P e N itens, cada um com seu próprio peso e um valor definido, descarte os itens de dentro da mochila para que o conteúdo final tenha o valor máximo.

O problema de mochila - algoritmo Python

Exemplo de declaração:

  • Capacidade máxima da mochila: 11 unidades
  • Número de itens: 5
  • Valores dos itens: {10,50,20,30,60}

Qual é o valor máximo que pode ser colocado na mochila considerando a restrição de capacidade máxima da bolsa que é 11?

Algoritmo ganancioso python

Uma solução eficiente é usar um algoritmo guloso. A ideia é calcular a relação valor / peso de cada objeto e classificar o objeto com base nessa relação calculada.

Pegamos o objeto com a proporção mais alta e adicionamos até que não possamos adicionar mais.

Na versão fracionária é possível adicionar frações do artigo à mochila.

Implementação do problema de mochila Python – versão não fracionária

Aqui está uma implementação do problema da mochila python em versão não fracionária, ou seja, não se pode adicionar uma fração de um objeto na bolsa. Apenas objetos inteiros podem ser adicionados.

 classe BagObject:
    def __init __ (próprio, peso, valor, índice):
        self.index = index
        self.weight = weight
        self.value = value
        self.report = value // weight
  #Função para comparação entre dois BagObjects
  # Comparamos a proporção calculada para classificá-los
    def __lt __ (self, other):
        return self.report & lt; other.report


def getMaxValue (peso, valores, capacidade):
        arraySort = []
        para i no intervalo (len (peso)):
            arraySort.append (BagObject (weight [i], values ​​[i], i))

        # Classifique os elementos da sacola por seu relatório
        arraySort.sort (reverse = True)

        counterValue = 0
        para objeto em arraySort:
            currentWeight = int (object.weight)
            currentValue = int (object.value)
            se capacidade - peso atual> = 0:
                # adicionamos o objeto no saco
                # Nós subtraímos a capacidade
                capacidade - = peso atual
                counterValue + = currentValue
                # Nós adicionamos o valor no saco
        return counterValue


peso = [1,5,3,2,4]
valores = [10,50,20,30,60]
capacidade = 11
maxValue = getMaxValue (peso, valores, capacidade)
print ("Max value in the backpack =", maxValue) 

O resultado é o seguinte:

 py sacados.py
Valor máximo na mochila = 120 

Implementação do problema de mochila Python – versão fracionária

Na versão fracionária do agoritmo da mochila python, você pode adicionar frações do objeto à mochila.

 classe BagObject:
    def __init __ (próprio, peso, valor, índice):
        self.index = index
        self.weight = weight
        self.value = value
        self.report = value // weight
  #Função para comparação entre dois BagObjects
  # Comparamos a proporção calculada para classificá-los
    def __lt __ (self, other):
        return self.report & lt; other.report


def getMaxValue (peso, valores, capacidade):
        arraySort = []
        para i no intervalo (len (peso)):
            arraySort.append (BagObject (weight [i], values ​​[i], i))

        # Classifique os elementos da sacola por seu relatório
        arraySort.sort (reverse = True)

        counterValue = 0
        para objeto em arraySort:
            currentWeight = int (object.weight)
            currentValue = int (object.value)
            se capacidade - peso atual> = 0:
                # adicionamos o objeto no saco
                # Nós subtraímos a capacidade
                capacidade - = peso atual
                counterValue + = currentValue
                # Nós adicionamos o valor no saco
            outro:
                fração = capacidade / peso atual
                counterValue + = currentValue * fração
                capacitância = int (capacitância - (peso atual * fração))
                intervalo
        return counterValue


peso = [1,5,3,2,4]
valores = [10,50,20,30,60]
capacidade = 11
maxValue = getMaxValue (peso, valores, capacidade)
print ("Max value in the backpack =", maxValue) 

O resultado é o seguinte:

 py sacados.py
Valor máximo na mochila = 140,0 

Algoritmo Python de links internos:

https://128mots.com/index.php/category/python/ https://128mots.com/index.php/2021/01/21/algorithme-glouton-python/ https://128mots.com/index.php/2021/01/21/algorithme-glouton-python/ https://128mots.com/index.php/2021/01/19/levenshtein-python/ https://128mots.com/index.php/2021/01/19/levenshtein-python/ https://128mots.com/index.php/2021/01/13/algorithme-tri-quantique/ https://128mots.com/index.php/2021/01/13/algorithme-tri-quantique/

Algoritmo Python de links externos:

http://math.univ-lyon1.fr/irem/IMG/pdf/monnaie .pdf

http://www.dil.univ-mrs.fr/ ~ gcolas / algo-license / slides / gloutons.pdf

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *