Skip to content

Instantly share code, notes, and snippets.

@pcallec
Last active August 23, 2023 07:20
Show Gist options
  • Select an option

  • Save pcallec/9c310362dcc06bb69b890a7d51693a07 to your computer and use it in GitHub Desktop.

Select an option

Save pcallec/9c310362dcc06bb69b890a7d51693a07 to your computer and use it in GitHub Desktop.
NSGA-II
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This code is a modification of [this file](https://github.com/aarongarrett/inspyred/blob/master/examples/standard/nsga_example.py).\n",
"The complete file of this notebook is [here](https://gist.github.com/pabloQuispe/65fda3d2fd7e976bdc49562e3e3bb1c5)\n",
"### Choosing libraries\n",
"Importing required libraries to run script. To install inspyred library see [here](https://github.com/aarongarrett/inspyred/blob/master/docs/installation.rst)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from random import Random\n",
"from time import time\n",
"import inspyred\n",
"import csv"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Initializing seed with current time. You can set a constant number to compare different algorithms or parameters.<br /> display is set to True to plot the results."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"display=True\n",
"\n",
"prng = Random()\n",
"prng.seed(time())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Choosing problem and method to solve\n",
"The Kursawe problem is chosen for test, for more information about test functions [here](http://aarongarrett.github.io/inspyred/reference.html#multi-objective-benchmarks).\n",
"The second line gets the algorithm NSGA2 from the library.<br />\n",
"* Defaults values for NSGA-II:\n",
" * Selection: Tournament selection, size: 2. It randomly picks 2 values and choose the best.\n",
" * Archive : best_archive, it saves the best solutions through time"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"problem = inspyred.benchmarks.Kursawe(3)\n",
"ea = inspyred.ec.emo.NSGA2(prng)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Choosing the crossover and mutation \n",
"For this case: blend_crossover and gaussian_mutation.<br />\n",
"More about variators (it comprises crossover and mutation functions) [here](http://aarongarrett.github.io/inspyred/reference.html#variators-solution-variation-methods).<br />\n",
"Besides, the termination criteria is chosen, for this case it's the number of generations."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"ea.variator = [inspyred.ec.variators.blend_crossover,\n",
" inspyred.ec.variators.gaussian_mutation]\n",
"\n",
"ea.terminator = inspyred.ec.terminators.generation_termination"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following parameters are set in *evolve*:\n",
"* Generator: It generates the initial population\n",
"* Evaluator: It is used to compute the fitness of the individual\n",
"* Population size \n",
"* Bounder: It bounds the value if they exceed certain values \n",
"* Maximize: Use to determine if it is a maximization or minimization problem\n",
"* Maximum number of iterations \n",
"\n",
"<br />\n",
"Besides we can change default parameters of the crossover and mutation function\n",
"* crossover_rate\n",
"* mutation_rate"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"final_pop = ea.evolve(generator=problem.generator,\n",
" evaluator=problem.evaluator,\n",
" pop_size=100,\n",
" maximize=problem.maximize,\n",
" bounder=problem.bounder,\n",
" max_generations=100,\n",
" crossover_rate = 1,\n",
" mutation_rate=0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting the Pareto-front optimal\n",
"Plot the results and save in pdf. Remember that *archive* for this case stores the best values through time"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x80ddf10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if display:\n",
" final_arc = ea.archive\n",
" #print('Best Solutions: \\n')\n",
" #for f in final_arc:\n",
" #print(f)\n",
" import matplotlib.pyplot as plt\n",
" x = []\n",
" y = []\n",
" for f in final_arc:\n",
" x.append(f.fitness[0])\n",
" y.append(f.fitness[1])\n",
" plt.scatter(x, y, color='b')\n",
" plt.xlabel(\"Function 1\")\n",
" plt.ylabel(\"Function 2\")\n",
" #Plot and save in pdf format\n",
" plt.savefig('{0} Example ({1}).pdf'.format(ea.__class__.__name__,\n",
" problem.__class__.__name__),\n",
" format='pdf')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Save results in csv file \n",
"The name of the columns is store in fieldnames. First the variable names then the objectives' name. This is the order in which values will be store in the csv file."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"fieldnames = ['x0', 'x1', 'x2','f1','f2']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"listCandidate stores the candidates value and objective functions"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"listCandidate = []\n",
"for f in final_arc:\n",
" listCandidate.append(f.candidate + f.fitness.values)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"my_list stores a list of dictionaries"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_list = []\n",
"for values in listCandidate:\n",
" temp = zip(fieldnames, values)\n",
" inner_dict = dict(temp)\n",
" my_list.append(inner_dict)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following code stores the values in \"Pareto_Optimal_Solutions.csv\". writeheader() writes a row with the values in fieldnames. Then with the for loop, every candidate is written in the csv."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with open(\"Pareto_Optimal_Solutions.csv\", \"wb\") as out_file:\n",
" writer = csv.DictWriter(out_file, fieldnames=fieldnames)\n",
" writer.writeheader()\n",
" for row in my_list:\n",
" writer.writerow(row)\n",
" out_file.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment