
Explore optimization with metaheuristics in Python through a concise promo video that highlights course goals, methods, and practical applications.
Learn optimization with metaheuristics in Python, applying simulated annealing, genetic algorithms, tabu search, and evolutionary strategies to continuous and combinatorial problems, including the traveling salesman problem.
Explore operations research as a method to model and optimize decisions under resource constraints. Learn to define objective functions, decision variables, and hard and soft constraints with a two-product example.
Compare continuous problems with infinite solutions to combinatorial problems, and explain P vs NP, noting NP solutions are verifiable in polynomial time but finding them often requires exponential time.
Explore metaheuristics, nature-inspired optimization methods that tackle large problems beyond traditional algorithms, escape local minima by accepting bad moves, and apply genetic algorithm, tabu search, and simulated annealing.
Compare local and global search, deterministic and stochastic methods, and how metaheuristics use populations to avoid local minima and approach global minima in complex problems.
Examine continuous and combinatorial search problems, global and local minima exemplified by Himmelblau, and population-based metaheuristics such as gradient descent, simulated annealing, tabu search, genetic algorithms, and particle swarm optimization.
We introduce random initial solutions, neighborhood and population-based search with fitness tracking, and briefly outline simulated annealing, genetic algorithms, and tabu search with aspiration criteria.
Simulated annealing, a probabilistic metaheuristic derived from the Metropolis algorithm, models cooling in a heat bath to perform local search and converge toward an optimal solution.
Explore how simulated annealing uses temperature, cooling rate, and probabilistic acceptance of worse moves to escape local minima and converge to better solutions.
This lecture explains simulated annealing basics, including initial and final solutions, the objective function, temperature schedules, cooling rate, neighborhood moves, and probabilistic acceptance of worse moves.
Apply simulated annealing to a continuous optimization problem in Python by minimizing the Himmelblau function, noting four global minima between -6 and 6.
Implement simulated annealing on the Himmelblau continuous problem in Python, using numpy and matplotlib to minimize the objective function and visualize progress.
Explore simulated annealing in Python for the Himmelblau objective, starting from a point and moving through neighborhood solutions, while tuning initial temperature, M, N, alpha, and K for small steps.
Explore neighborhood search in Python, starting at a point and moving to neighboring (X, Y) solutions with random steps and temperature-based acceptance for better or worse neighbors.
Explore simulated annealing for continuous optimization, comparing current and neighbor solutions in x and y. Learn when to accept worse moves using a probabilistic rule based on the objective function.
Learn how simulated annealing solves a continuous problem with an outer loop and inner 15-neighbor searches, updating temperature by alpha to converge on X, Y, and the objective value.
Run the simulated annealing process multiple times to explore different outcomes for a continuous problem, recording X, Y, and Z values, and plot temperature versus Z.
Plot the simulated annealing results by showing temperature on the x-axis and the final objective value for each M across 300 steps, as the Himmelblau function is minimized.
Plot the simulated annealing results for the Himmelblau function, linking temperature schedules (initial to final) with objective values, and compare how different M and N settings affect convergence.
Explore coding a combinatorial quadratic assignment problem with simulated annealing in Python, building distance and flow matrices, and minimizing total cost by optimal department placement.
Configure simulated annealing parameters, generate a random initial solution, reindex the distance matrix, convert to an array, and compute the cost as distance times flow to obtain the objective value.
Explore solving the quadratic assignment problem with simulated annealing in Python by swapping departments, computing cost as flow times distance, and cooling to minimize the objective.
Genetic algorithm drives population-based search using evolution-inspired mechanisms, natural selection, reproduction, survival of the fittest, and encodes solutions in binary chromosomes, mapping genotype to phenotype through crossover and mutation.
Delve into genetic algorithms by exploring crossover (two-point, single-point, multi), mutation with bit flips, and elitism guided by fitness values, plus selection methods like roulette wheel and tournament selection.
Decode a binary string for continuous problems by bounding the variable, selecting chromosome length, and computing precision to derive the fitness, with genotype as encoding and phenotype as decoding.
Explore how a genetic algorithm runs from a written pseudocode to a flowchart, detailing generations, population size, crossover and mutation probabilities, tournament selection, elitism, and choosing the best final chromosome.
Evolve a population across generations in a genetic algorithm by tournament selection of two parents, two-point crossover, and mutation, while tracking the best chromosome for the final solution.
Code a genetic algorithm from scratch for continuous optimization using the Himmelblau function. Minimize the objective to zero and locate the four global minima.
Decode binary chromosomes for a genetic algorithm into X and Y values using bitwise summation and precision, then minimize the Himmelblau objective function within defined bounds in Python.
Decode x and y from a 24-gene chromosome using bounds (-6, 6) and precision, then compute the objective value f(x,y) = x^2 + (y-11)^2 to evaluate the continuous problem.
Decode a chromosome into X and Y, compute the himmelblau objective value, and return decoded X, decoded Y, and the objective value via a single function.
Select two parents via tournament selection by decoding x and y from the chromosome and computing the himmelblau objective value to drive cross over and mutate in minimization problem.
Create a population of 20 solutions by shuffling chromosomes, with 12 genes (6 x, 6 y); decode x and y, and evaluate fitness with Himmelblau to select two parents.
Select three unique candidates from the initial population of 12-gene solutions using tournament selection, evaluate their objective function values, and choose the best as each parent.
Apply tournament selection with three randomly chosen chromosomes, decode to X and Y, and use the Himmelblau objective value to select the lowest fitness as the first parent.
Use tournament selection with k=3 to pick two parents for crossover by looping twice, storing them in an empty array, and selecting the lowest fitness values for a minimization problem.
Learn tournament-based parent selection in a genetic algorithm with Python: define a reusable find_parents function, select three individuals, compare fitness for minimization, and return two parents.
explore two-point crossover in genetic algorithms for continuous problems, showing how to select two crossover points, guarantee different indices, and apply 100% crossover to generate children while preserving genetic information.
Learn two-point crossover in Python for problems by dividing each parent into three segments to create two children, using left-to-right indices and smaller to parent one, larger to parent two.
Explore the crossover operator in a genetic algorithm for continuous problems using Python, showing how to form children from two parents' first, middle, and last segments with a default probability.
Explore the mutation operator for a continuous binary GA, applying bit-flip mutation to generate diversity, with a 0.3 probability and experiments with high and low rates using child updates.
Mutate a chromosome with a 0.3 probability across indices 0 to 5, updating the first child and printing before and after states. Mirror the mutation for a second child.
Explore how a genetic algorithm mutates a child by applying a mutation probability to each gene, flipping bits when a random number is below the threshold, with 0/1 sequences illustrated.
Develop and test a python mutation function for two child arrays in a genetic algorithm, using a default 0.2 probability to flip each gene.
Learn to structure a genetic algorithm for continuous problems by isolating GA functions in a reusable ga_functions_continuous.py file, using tournament selection, crossover, and mutation for Himmelblau.
Implement a genetic algorithm in python to minimize the continuous himmelblau problem, using a 200-solution population over 180 generations with crossover and mutation.
Initialize a 200-solution pool with 13 x and 13 y genes, run 180 generations, use parent and mutation steps, track objective values, and plot the best per generation.
Explore a genetic algorithm approach for continuous optimization in python, detailing population initialization, selection of two parents, crossover, mutation, and maintaining a 200-solution generation across cycles.
Compute fitness values for two mutant chromosomes by evaluating their objective functions, pair each chromosome with its objective value, and prepare generation tracking in a continuous genetic algorithm using Python.
Construct each generation by spawning a random initial population and then stacking two mutant children to build a 200-solution new population. Track solution's objective value for the next generation.
Describe running a genetic algorithm with a 200-solution population, selecting parents, creating mutant children, and forming generations while tracking solutions by objective value in a minimization problem.
Explore how to extract the global minima in a genetic algorithm by comparing convergence from the last population with the best-of-generation approach, and decode the final X and Y strings.
Decode converged and best genetic algorithm strings to get decoded X and Y and their objective values, illustrating progression across generations for the Himmelblau function.
Experiment with a genetic algorithm on the Himmelblau function using a larger population and more generations, exploring crossover and a 30% mutation rate to approach global minima.
Extract the best converged and best overall objective values from generations, and plot the best-of-generation values across generations with matplotlib, including red dashed reference lines and axes labels.
Code a ga to solve the quadratic assignment problem in python, building distance and flow matrices and an initial random solution to minimize flow times distance.
Apply a genetic algorithm in python with tournament selection, crossover 1, mutation 0.3, and elitism to evolve a 100-solution population over 30 generations for eight-department problem, minimizing distance times flow.
Learn to implement a two-cut-point crossover for a combinatorial problem in Python: choose cut points, build middle and first segments, and assemble feasible offspring by removing duplicates.
Mutate two offspring by selecting two random indices and reversing the segment between them, handling a1 and a2 order, then compute distance, total cost, and update fitness for each mutant.
Apply genetic algorithm techniques in Python to solve a quadratic assignment problem by mutating, stacking, and elitist selection across generations to find the minimum cost solution.
Explore tabu search, a 1986 local neighborhood search method by Fred Glover for combinatorial problems, using a tabu list to prohibit revisiting solutions within a set number of iterations.
Explore tabu search fundamentals: tabu list memory, aspiration criteria, intensification versus diversification, and short term, intermediate term, long term memory with frequency based memory.
Explore tabu search fundamentals by configuring iterations, tabu list length, and move operators, swap two cities in a traveling salesman problem, and use aspiration criteria to diversify and avoid cycling.
Code the quadratic assignment problem with tabu search, using distance and flow matrices, a random initial solution, and a swap-based neighborhood to compute costs as flow times distance.
Explore coding a combinatorial problem in Python by running 60 iterations, generating 28 neighbor solutions via two-department swaps, and computing costs as distance times flow, then sorting by objective values.
This lecture demonstrates tabu search for the quadratic assignment problem, using department swaps, a dynamic tabu list, and aspiration criteria to reach the best solution after 60 runs.
Explore evolutionary strategies for continuous problems, focusing on mutation-driven search, mu and lambda variations, and parent–offspring competition in a population-based framework.
Explore evolutionary strategies, where mutation is the primary operator and recombination designs new parents; learn how many children exceed parents, how sigma governs mutations, and the one-fifth rule.
Implement evolution strategies by mutating to form lambda children from mu parents, then select the best mu to replace the population while adjusting sigma via the one fifth rule (0.82–0.85).
Code an evolution strategies approach to minimize a continuous two-variable cosine function in Python, with 120 parents and 720 children within defined bounds and initial sigmas.
Develops a continuous optimization workflow in Python by evolving a random initial population, selecting five random parents, creating children with gaussian mutations, and applying the one fifth rule.
Apply evolution strategies in Python to a continuous problem, tracking parents and children, using the one fifth rule to adapt sigma, and converge on x1 and x2.
Learn constraint handling in optimization by discarding, repairing, or penalizing infeasible solutions to stay within the feasible region for both minimization and maximization problems. Includes a chair and table example.
Use a penalty function to handle two constraints in a genetic algorithm, decoding binary chromosomes into x and y within -5 to 5 to approach the global minimum.
Apply penalty functions to handle constraints in a genetic algorithm, adding penalties when X or Y violate bounds. Learn about decoding, selection, crossover, mutation, and elitism in a minimization setting.
This course will guide you on what optimization is and what metaheuristics are. You will learn why we use metaheuristics in optimization problems as sometimes, when you have a complex problem you'd like to optimize, deterministic methods will not do; you will not be able to reach the best and optimal solution to your problem, therefore, metaheuristics should be used.
This course covers information on metaheuristics and four widely used techniques which are:
Simulated Annealing
Genetic Algorithm
Tabu Search
Evolutionary Strategies
By the end of this course, you will learn what Simulated Annealing, Genetic Algorithm, Tabu Search, and Evolutionary Strategies are, why they are used, how they work, and best of all, how to code them in Python! With no packages and no libraries, learn to code them from scratch!! You will also learn how to handle constraints using the penalty method.
Here's the awesome part --> you do NOT need to know Python programming!
This course will teach you how to optimize continuous and combinatorial problems using Python
Where every single line of code is explained thoroughly
The code is written in a simple manner that you will understand how things work and how to code the algorithms even with zero knowledge in Python
Basically, you can think of this as not only a course that teaches you 4 well known metaheuristics, but also Python programming!
Real Testaments -->
1) "I can say that this is the best course I've had on Udemy ! Dana is a very good instructor. She not only explains the problems and the coding, but also reassures you and remove the fears you might have when learning complex concepts. For someone with a business background, this topic was close to a nightmare ! I highly recommend this course for anyone interested in learning about Metaheuristics. Again, big THANK YOU Dana ! :)" -- Logistics Knowledge Bank, 5 star rating
2) "I am half way through the course. What I learnt so far is far beyond what I expected. What I really liked is the applicability of the examples to real world problems. The most exciting feature in the course is the hands on, what you learn will be implemented in python and you can follow every single step. If you did not understand, the instructor is there to help. I even felt like it is a one to one course. Thanks a lot to the instructor." -- Ali, 5 star rating
3) "The best introduction to Metaheuristics bar none. Best value course on Udemy. I love that we cover a bit of theory and code the actual algorithm itself. The course doesn't just give you some package to use but presents you with code very easy to follow. The code is not optimized or written for maximum performance but for maximum readability. This means you can play around with it once you really understand it and speed it up. Thank you Dana for this amazing course. It has given me the confidence to code my own slightly more advanced algorithms from Sean Luke's book: Essential Metaheuristics. I feel the two are great companions." -- Dylan, 5 star rating
4) "It is a great introduction to Metaheuristics. The course deserves five stars for the overall information on this topic. The instructor is talented and knowledgeable about the optimization problems. I recommend the course for someone looking to solve an optimization problem." -- Abdulaziz, 5 star rating
5) "I still not finished the course, but until now, I am really satisfied with I've seen. THEORETICAL EXPLANATIONS: Dana is very didactic, before presenting the code she always briefly present the theory in a simple way, much easier to understand than books and journal papers explanations. Of course, it is necessary to complement this with other materials, but if you already have a theoretical base, it is just great! Dana, I loved your explanation about crossover and mutation! FOR BEGINNERS IN PYTHON: I am a beginner in Python and even in programming, so Dana's code helped me a lot to understand the meaning of each step and variable since she wrote a very readable code. GOOD TIME-MANAGEMENT: Dana presents the code already done but she explains what she has done in each step. Thus, in 5 minutes we can learn a lot, without being bored. I prefer this way of doing because I've done courses with teachers that do the code during the classes and we waste a lot of time fixing errors and bugs. She is objective and efficient on teaching, I like that. There are things not totally clear to me on courses, so I ask questions to Dana. She takes some days to give us an answer, but she replies anyway. I would appreciate an example of constraint handling for combinatorial problems." -- Rachel, 4.5 star rating
6) "Nice course that really does explain Metaheuristics in a very practical way. Highly recommended!" -- David, 5 star rating