Algoritmo el problema de la mochila (problema de mochila) en más de 128 palabras

El problema de la mochila algorítmica es interesante y forma parte del primer programa de ciencia digital e informática.

Este problema ilustra los algoritmos glotón que enumeran todas las posibilidades de resolver un problema para encontrar la mejor solución.

El problema de la mochila es un problema de optimización, es decir, una función que debe ser maximizada o minimizada y restricciones que deben cumplirse.

El problema de la mochila

Para una mochila de máxima capacidad de artículos P y N cada uno con su propio peso y un valor establecido, tire los artículos dentro de la mochila para que el contenido final tenga el máximo valor.

Ejemplo de una declaración:

  • Capacidad máxima de la mochila: 11 unidades
  • Número de artículo: 5
  • Valores de objeto: $10.50,20,30.60
  • Peso de los objetos: ‘1,5,3,2,4’

¿Cuál es el valor máximo que se puede poner en la mochila teniendo en cuenta la restricción de capacidad máxima de la bolsa que es 11?

Algoritmo gluttonoso

Una solución eficaz es utilizar un algoritmo glotón. La idea es calcular la relación valor/peso para cada objeto y ordenar el objeto en función de esta relación calculada.

Toma el objeto con la proporción más alta y agrega hasta que no puedaagregar más.

En versión fraccionaria es posible añadir fracciones de artículo a la mochila.

Implementación del problema en versión no fraccionada

Aquí está una implementación del problema en una versión no fraccionada, es decir, no se puede agregar una fracción de un objeto a la bolsa. Solo se pueden agregar objetos enteros.

itemsac clase: 
    def __init__ (auto, peso, valor, índice): 
        self.index - índice         
        self.weight - peso 
        self.value
        self.report - valor // peso 
  #Fonction para la comparación entre dos ObjectsSac
  #On compara la relación calculada para ordenarlas
    def __lt__ (yo, otros): 
        devolver self.report< other.rapport 
  

def getValeurMax (pesos, valores, capacidad): 
        TableTrie[] 
        para i en el rango: 
            tableTrie.append (ObjectSac (peso[i]s, valore[i]s, i)) 
  
        #Trier los elementos de la bolsa por su informe
        tableTrie.sort (reverse - True) 
  
        MeterValeur - 0
        para el objeto en tableauTrie: 
            WeightCourant - int (object.weight) 
            ValueCourante - int (object.value) 
            si la capacidad - weightsCourant '0: 
                #on añade el objeto a la bolsa
                #On resta capacidad
                capacidad - weightsCourant 
                MeterValeur - ValueCourante
                #On añade valor a la bolsa 
        devolver contraValeur 


Pesos[1,5,3,2,4] 
Valores[10,50,20,30,60] 
capacidad - 11
Valor máximo - getValeurMax (peso, valores, capacidad) 
(valor máximo en la mochila", ValueMax) 

El resultado es el siguiente:

py sacados.py 
Valor máximo en mochila - 120

Implementación del problema en versión fraccionaria

En una versión fraccionaria del problema de la mochila se pueden añadir fracciones de objeto a la mochila.

itemsac clase: 
    def __init__ (auto, peso, valor, índice): 
        self.index - índice         
        self.weight - peso 
        self.value
        self.report - valor // peso 
  #Fonction para la comparación entre dos ObjectsSac
  #On compara la relación calculada para ordenarlas
    def __lt__ (yo, otros): 
        devolver self.report< other.rapport 
  

def getValeurMax (pesos, valores, capacidad): 
        TableTrie[] 
        para i en el rango: 
            tableTrie.append (ObjectSac (peso[i]s, valore[i]s, i)) 
  
        #Trier los elementos de la bolsa por su informe
        tableTrie.sort (reverse - True) 
  
        MeterValeur - 0
        para el objeto en tableauTrie: 
            WeightCourant - int (object.weight) 
            ValueCourante - int (object.value) 
            si la capacidad - weightsCourant '0: 
                #on añade el objeto a la bolsa
                #On resta capacidad
                capacidad - weightsCourant 
                MeterValeur - ValueCourante
                #On añade valor a la bolsa 
            Otro: 
                fracción - capacidad / pesoCouring 
                MeterValeur -Valor Courante - fracción 
                capacidad - int (capacidad - (weightsCourant - fracción)) 
                Romper
        devolver contraValeur 


Pesos[1,5,3,2,4] 
Valores[10,50,20,30,60] 
capacidad - 11
Valor máximo - getValeurMax (peso, valores, capacidad) 
(valor máximo en la mochila", ValueMax) 

El resultado es el siguiente:

py sacados.py 
Valor máximo en mochila - 140.0

Deja una respuesta

Tu dirección de correo electrónico no será publicada.