DEAP (software)
- 3 min read
- 1 chapter
Explore on Lably
ToursExplore Lably’s 3D toursExample
The following code gives a quick overview how the Onemax problem optimization with genetic algorithm can be implemented with DEAP.
<span id="mwKQ"></span><span class="kn" id="mwKg">import</span><span class="w" id="mwKw"> </span><span class="nn" id="mwLA">array</span> <span class="kn" id="mwLQ">import</span><span class="w" id="mwLg"> </span><span class="nn" id="mwLw">random</span> <span class="kn" id="mwMA">from</span><span class="w" id="mwMQ"> </span><span class="nn" id="mwMg">deap</span><span class="w" id="mwMw"> </span><span class="kn" id="mwNA">import</span> <span class="n" id="mwNQ">creator</span><span class="p" id="mwNg">,</span> <span class="n" id="mwNw">base</span><span class="p" id="mwOA">,</span> <span class="n" id="mwOQ">tools</span><span class="p" id="mwOg">,</span> <span class="n" id="mwOw">algorithms</span> <span class="n" id="mwPA">creator</span><span class="o" id="mwPQ">.</span><span class="n" id="mwPg">create</span><span class="p" id="mwPw">(</span><span class="s2" id="mwQA">"FitnessMax"</span><span class="p" id="mwQQ">,</span> <span class="n" id="mwQg">base</span><span class="o" id="mwQw">.</span><span class="n" id="mwRA">Fitness</span><span class="p" id="mwRQ">,</span> <span class="n" id="mwRg">weights</span><span class="o" id="mwRw">=</span><span class="p" id="mwSA">(</span><span class="mf" id="mwSQ">1.0</span><span class="p" id="mwSg">,))</span> <span class="n" id="mwSw">creator</span><span class="o" id="mwTA">.</span><span class="n" id="mwTQ">create</span><span class="p" id="mwTg">(</span><span class="s2" id="mwTw">"Individual"</span><span class="p" id="mwUA">,</span> <span class="n" id="mwUQ">array</span><span class="o" id="mwUg">.</span><span class="n" id="mwUw">array</span><span class="p" id="mwVA">,</span> <span class="n" id="mwVQ">typecode</span><span class="o" id="mwVg">=</span><span class="s2" id="mwVw">"b"</span><span class="p" id="mwWA">,</span> <span class="n" id="mwWQ">fitness</span><span class="o" id="mwWg">=</span><span class="n" id="mwWw">creator</span><span class="o" id="mwXA">.</span><span class="n" id="mwXQ">FitnessMax</span><span class="p" id="mwXg">)</span> <span class="n" id="mwXw">toolbox</span> <span class="o" id="mwYA">=</span> <span class="n" id="mwYQ">base</span><span class="o" id="mwYg">.</span><span class="n" id="mwYw">Toolbox</span><span class="p" id="mwZA">()</span> <span class="n" id="mwZQ">toolbox</span><span class="o" id="mwZg">.</span><span class="n" id="mwZw">register</span><span class="p" id="mwaA">(</span><span class="s2" id="mwaQ">"attr_bool"</span><span class="p" id="mwag">,</span> <span class="n" id="mwaw">random</span><span class="o" id="mwbA">.</span><span class="n" id="mwbQ">randint</span><span class="p" id="mwbg">,</span> <span class="mi" id="mwbw">0</span><span class="p" id="mwcA">,</span> <span class="mi" id="mwcQ">1</span><span class="p" id="mwcg">)</span> <span class="n" id="mwcw">toolbox</span><span class="o" id="mwdA">.</span><span class="n" id="mwdQ">register</span><span class="p" id="mwdg">(</span> <span class="s2" id="mwdw">"individual"</span><span class="p" id="mweA">,</span> <span class="n" id="mweQ">tools</span><span class="o" id="mweg">.</span><span class="n" id="mwew">initRepeat</span><span class="p" id="mwfA">,</span> <span class="n" id="mwfQ">creator</span><span class="o" id="mwfg">.</span><span class="n" id="mwfw">Individual</span><span class="p" id="mwgA">,</span> <span class="n" id="mwgQ">toolbox</span><span class="o" id="mwgg">.</span><span class="n" id="mwgw">attr_bool</span><span class="p" id="mwhA">,</span> <span class="mi" id="mwhQ">100</span> <span class="p" id="mwhg">)</span> <span class="n" id="mwhw">toolbox</span><span class="o" id="mwiA">.</span><span class="n" id="mwiQ">register</span><span class="p" id="mwig">(</span><span class="s2" id="mwiw">"population"</span><span class="p" id="mwjA">,</span> <span class="n" id="mwjQ">tools</span><span class="o" id="mwjg">.</span><span class="n" id="mwjw">initRepeat</span><span class="p" id="mwkA">,</span> <span class="nb" id="mwkQ">list</span><span class="p" id="mwkg">,</span> <span class="n" id="mwkw">toolbox</span><span class="o" id="mwlA">.</span><span class="n" id="mwlQ">individual</span><span class="p" id="mwlg">)</span> <span class="n" id="mwlw">evalOneMax</span> <span class="o" id="mwmA">=</span> <span class="k" id="mwmQ">lambda</span> <span class="n" id="mwmg">individual</span><span class="p" id="mwmw">:</span> <span class="p" id="mwnA">(</span><span class="nb" id="mwnQ">sum</span><span class="p" id="mwng">(</span><span class="n" id="mwnw">individual</span><span class="p" id="mwoA">),)</span> <span class="n" id="mwoQ">toolbox</span><span class="o" id="mwog">.</span><span class="n" id="mwow">register</span><span class="p" id="mwpA">(</span><span class="s2" id="mwpQ">"evaluate"</span><span class="p" id="mwpg">,</span> <span class="n" id="mwpw">evalOneMax</span><span class="p" id="mwqA">)</span> <span class="n" id="mwqQ">toolbox</span><span class="o" id="mwqg">.</span><span class="n" id="mwqw">register</span><span class="p" id="mwrA">(</span><span class="s2" id="mwrQ">"mate"</span><span class="p" id="mwrg">,</span> <span class="n" id="mwrw">tools</span><span class="o" id="mwsA">.</span><span class="n" id="mwsQ">cxTwoPoint</span><span class="p" id="mwsg">)</span> <span class="n" id="mwsw">toolbox</span><span class="o" id="mwtA">.</span><span class="n" id="mwtQ">register</span><span class="p" id="mwtg">(</span><span class="s2" id="mwtw">"mutate"</span><span class="p" id="mwuA">,</span> <span class="n" id="mwuQ">tools</span><span class="o" id="mwug">.</span><span class="n" id="mwuw">mutFlipBit</span><span class="p" id="mwvA">,</span> <span class="n" id="mwvQ">indpb</span><span class="o" id="mwvg">=</span><span class="mf" id="mwvw">0.05</span><span class="p" id="mwwA">)</span> <span class="n" id="mwwQ">toolbox</span><span class="o" id="mwwg">.</span><span class="n" id="mwww">register</span><span class="p" id="mwxA">(</span><span class="s2" id="mwxQ">"select"</span><span class="p" id="mwxg">,</span> <span class="n" id="mwxw">tools</span><span class="o" id="mwyA">.</span><span class="n" id="mwyQ">selTournament</span><span class="p" id="mwyg">,</span> <span class="n" id="mwyw">tournsize</span><span class="o" id="mwzA">=</span><span class="mi" id="mwzQ">3</span><span class="p" id="mwzg">)</span> <span class="n" id="mwzw">population</span> <span class="o" id="mw0A">=</span> <span class="n" id="mw0Q">toolbox</span><span class="o" id="mw0g">.</span><span class="n" id="mw0w">population</span><span class="p" id="mw1A">(</span><span class="n" id="mw1Q">n</span><span class="o" id="mw1g">=</span><span class="mi" id="mw1w">300</span><span class="p" id="mw2A">)</span> <span class="n" id="mw2Q">NGEN</span> <span class="o" id="mw2g">=</span> <span class="mi" id="mw2w">40</span> <span class="k" id="mw3A">for</span> <span class="n" id="mw3Q">gen</span> <span class="ow" id="mw3g">in</span> <span class="nb" id="mw3w">range</span><span class="p" id="mw4A">(</span><span class="n" id="mw4Q">NGEN</span><span class="p" id="mw4g">):</span> <span class="n" id="mw4w">offspring</span> <span class="o" id="mw5A">=</span> <span class="n" id="mw5Q">algorithms</span><span class="o" id="mw5g">.</span><span class="n" id="mw5w">varAnd</span><span class="p" id="mw6A">(</span><span class="n" id="mw6Q">population</span><span class="p" id="mw6g">,</span> <span class="n" id="mw6w">toolbox</span><span class="p" id="mw7A">,</span> <span class="n" id="mw7Q">cxpb</span><span class="o" id="mw7g">=</span><span class="mf" id="mw7w">0.5</span><span class="p" id="mw8A">,</span> <span class="n" id="mw8Q">mutpb</span><span class="o" id="mw8g">=</span><span class="mf" id="mw8w">0.1</span><span class="p" id="mw9A">)</span> <span class="n" id="mw9Q">fits</span> <span class="o" id="mw9g">=</span> <span class="n" id="mw9w">toolbox</span><span class="o" id="mw-A">.</span><span class="n" id="mw-Q">map</span><span class="p" id="mw-g">(</span><span class="n" id="mw-w">toolbox</span><span class="o" id="mw_A">.</span><span class="n" id="mw_Q">evaluate</span><span class="p" id="mw_g">,</span> <span class="n" id="mw_w">offspring</span><span class="p" id="mwAQA">)</span> <span class="k" id="mwAQE">for</span> <span class="n" id="mwAQI">fit</span><span class="p" id="mwAQM">,</span> <span class="n" id="mwAQQ">ind</span> <span class="ow" id="mwAQU">in</span> <span class="nb" id="mwAQY">zip</span><span class="p" id="mwAQc">(</span><span class="n" id="mwAQg">fits</span><span class="p" id="mwAQk">,</span> <span class="n" id="mwAQo">offspring</span><span class="p" id="mwAQs">):</span> <span class="n" id="mwAQw">ind</span><span class="o" id="mwAQ0">.</span><span class="n" id="mwAQ4">fitness</span><span class="o" id="mwAQ8">.</span><span class="n" id="mwARA">values</span> <span class="o" id="mwARE">=</span> <span class="n" id="mwARI">fit</span> <span class="n" id="mwARM">population</span> <span class="o" id="mwARQ">=</span> <span class="n" id="mwARU">offspring</span>

