genetic_algorithm.py

Skrypt z implementacją algorytmu genetycznego.
 avatar
unknown
plain_text
a month ago
2.2 kB
2
Indexable
import json
import random

# Wczytaj dane wejściowe
with open("simulation_input.json", "r") as file:
    data = json.load(file)

# Parametry wejściowe
mass_tonnes = data["mass_tonnes"]
fuel_consumption_factor = data["fuel_consumption_factor"]
cost_per_tonne_usd = data["cost_per_tonne_usd"]

# Funkcja celu: minimalizacja kosztów
def fitness_function(solution):
    mass = solution["mass"]
    fuel_cost = mass * fuel_consumption_factor * cost_per_tonne_usd
    return fuel_cost

# Algorytm genetyczny
def genetic_algorithm(mass_options, population_size=10, generations=20, mutation_rate=0.1):
    # Inicjalizacja populacji
    population = [{"mass": random.choice(mass_options)} for _ in range(population_size)]

    for generation in range(generations):
        # Obliczanie dopasowania
        fitness_scores = [fitness_function(ind) for ind in population]

        # Selekcja najlepszych
        sorted_population = [x for _, x in sorted(zip(fitness_scores, population))]
        population = sorted_population[:population_size // 2]

        # Krzyżowanie
        offspring = []
        for _ in range(len(population) // 2):
            parent1 = random.choice(population)
            parent2 = random.choice(population)
            child = {"mass": (parent1["mass"] + parent2["mass"]) // 2}
            offspring.append(child)

        # Mutacja
        for ind in offspring:
            if random.random() < mutation_rate:
                ind["mass"] = random.choice(mass_options)

        # Aktualizacja populacji
        population += offspring

    # Zwrot najlepszego rozwiązania
    best_solution = min(population, key=fitness_function)
    return best_solution

# Uruchom algorytm
try:
    best_result = genetic_algorithm(mass_tonnes)
    print("Najlepsze rozwiązanie:", best_result)

    # Zapisz wynik do pliku
    with open("genetic_algorithm_results.json", "w") as result_file:
        json.dump(best_result, result_file, indent=4)
    print("Wynik został zapisany w pliku 'genetic_algorithm_results.json'.")
except Exception as e:
    print("Wystąpił błąd:", str(e))
Leave a Comment