Ex12
Ex12
Aim:
To implement a Continuous Genetic Algorithm (GA) for optimizing energy dispatch in a
smart grid, ensuring real-time power distribution from multiple energy sources while minimizing
operational costs, balancing supply with demand, and reducing carbon emissions in compliance
with environmental regulations.
Algorithm:
1) Initialize a population with random power allocations.
2) Evaluate fitness based on cost, emissions, and demand balance.
3) Select the best candidates probabilistically.
4) Apply crossover to generate new solutions.
5) Mutate offspring to introduce diversity.
6) Repeat for multiple generations and plot results.
Code:
import numpy as np
import matplotlib.pyplot as plt
# Define parameters
generators = ["Solar", "Wind", "Coal"]
costs = np.array([0, 0, 50])
emissions = np.array([0, 0, 80])
demand = 500
pop_size = 50
num_generations = 100
mutation_rate = 0.1
# Initialize population
def initialize_population(size):
return np.random.rand(size, len(generators)) * demand / len(generators)
# Fitness function
def fitness(individual):
total_cost = np.sum(individual * costs)
total_emissions = np.sum(individual * emissions)
penalty = abs(np.sum(individual) - demand) * 1000
return -(total_cost + total_emissions + penalty)
# Selection
def select(pop):
scores = np.array([fitness(ind) for ind in pop])
probabilities = np.exp(scores - np.max(scores))
probabilities /= probabilities.sum()
return pop[np.random.choice(len(pop), size=len(pop)//2, p=probabilities)]
# Crossover
def crossover(parents):
offspring = []
for i in range(0, len(parents), 2):
if i + 1 < len(parents):
point = np.random.randint(1, len(generators))
child1 = np.hstack((parents[i][:point], parents[i+1][point:]))
child2 = np.hstack((parents[i+1][:point], parents[i][point:]))
offspring.extend([child1, child2])
return np.array(offspring)
# Mutation
def mutate(offspring):
for i in range(len(offspring)):
if np.random.rand() < mutation_rate:
idx = np.random.randint(len(generators))
offspring[i][idx] += np.random.uniform(-10, 10)
offspring[i][idx] = max(0, offspring[i][idx])
return offspring
# Run optimization
optimal_distribution, fitness_progress, cost_data, emissions_data, generations =
genetic_algorithm()
print("Optimal Power Distribution (MWh):", optimal_distribution)
# Visualization
plt.figure(figsize=(12, 5))
Output:
Inference:
The emission analysis shows that coal is the only source contributing to CO₂ emissions since solar
and wind have zero emissions. Initially, emissions were high due to heavy coal usage, but as the
optimization progressed, the algorithm prioritized renewables, reducing emissions. The final power
distribution shows a balanced mix, with solar and wind taking a larger share, leading to both cost
and emission reductions. This demonstrates a successful trade-off between minimizing emissions
and keeping costs low while meeting energy demand efficiently.