Codigo Problema Mochila

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 2

import random

# Definir la capacidad máxima de la mochila


CAPACIDAD_MAXIMA = 15

# Definir los objetos disponibles, cada objeto es una tupla (valor, peso)
objetos = [(4, 7), (5, 6), (6, 8),(3, 2)]

# Definir parámetros del algoritmo genético


TAMANO_POBLACION = 4
NUM_GENERACIONES = 1
PROBABILIDAD_MUTACION = 0.1

# Función de inicialización de la población


def inicializar_poblacion():
poblacion = []
for _ in range(TAMANO_POBLACION):
individuo = [random.randint(0, 1) for _ in range(len(objetos))]
poblacion.append(individuo)
return poblacion

# Función de evaluación de individuos


def evaluar_individuo(individuo):
valor_total = 0
peso_total = 0
for i in range(len(individuo)):
if individuo[i] == 1:
valor_total += objetos[i][0]
peso_total += objetos[i][1]
if peso_total > CAPACIDAD_MAXIMA:
valor_total = 0
return valor_total, peso_total

# Función de selección de individuos para cruzamiento


def seleccion(poblacion):
seleccionados = []
for _ in range(2):
individuos = random.choices(poblacion, k=5)
mejor_individuo = max(individuos, key=lambda x: evaluar_individuo(x)[0])
seleccionados.append(mejor_individuo)
return seleccionados

# Función de cruzamiento de dos individuos


def cruzamiento(padre1, padre2):
punto_corte = random.randint(1, len(objetos) - 1)
hijo1 = padre1[:punto_corte] + padre2[punto_corte:]
hijo2 = padre2[:punto_corte] + padre1[punto_corte:]
return hijo1, hijo2

# Función de mutación de un individuo


def mutacion(individuo):
for i in range(len(individuo)):
if random.random() < PROBABILIDAD_MUTACION:
individuo[i] = 1 - individuo[i]
return individuo

# Algoritmo genético
def algoritmo_genetico():
poblacion = inicializar_poblacion()
for _ in range(NUM_GENERACIONES):
nueva_poblacion = []
for _ in range(TAMANO_POBLACION // 2):
padre1, padre2 = seleccion(poblacion)
hijo1, hijo2 = cruzamiento(padre1, padre2)
hijo1 = mutacion(hijo1)
hijo2 = mutacion(hijo2)
nueva_poblacion.extend([hijo1, hijo2])
poblacion = nueva_poblacion
mejor_individuo = max(poblacion, key=lambda x: evaluar_individuo(x)[0])
return mejor_individuo, evaluar_individuo(mejor_individuo)

# Ejecutar el algoritmo genético


mejor_solucion, (mejor_valor, mejor_peso) = algoritmo_genetico()
print("Mejor solución encontrada:", mejor_solucion)
print("Valor de la mejor solución:", mejor_valor)
print("Peso de la mejor solución:", mejor_peso)

También podría gustarte