{"id":650,"date":"2010-01-10T02:21:03","date_gmt":"2010-01-10T01:21:03","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=650"},"modified":"2010-01-10T02:21:03","modified_gmt":"2010-01-10T01:21:03","slug":"galib-with-tsp-implementation","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/","title":{"rendered":"GALib with TSP implementation"},"content":{"rendered":"<p>Over the last week, I&#8217;ve been rewriting my Genetic Algorithm (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Genetic_algorithm\">GA<\/a>) implementation of the Travelling Salesman Problem (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Travelling_salesman_problem\" target=\"_blank\">TSP<\/a>). I&#8217;ve rewritten pretty much everything, but the two most notable changes are:<\/p>\n<p>1. I split the code into 2 projects: one holding the general GA code, which is now called GALib, and one holding the code specific to the TSP, now called <a href=\"http:\/\/en.wikipedia.org\/wiki\/Skynet_%28Terminator%29\" target=\"_blank\">Skynet<\/a> (lol :P). This allows for making any other GA implementation using GALib, even in .Net languages different from C#. The underneath diagram should give you a good idea of how the who thing works. The 4 most left classes are of Skynet, all remaining classes and interfaces are of GALib.<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-651\" title=\"Dependency diagram of a Visual Studio solution containing the GALib and TSP app (Skynet)\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif\" alt=\"Dependency diagram of a Visual Studio solution containing the GALib and TSP app (Skynet)\" width=\"603\" height=\"333\" \/><\/a><\/p>\n<p>2. I rewrote the genotype of the Route individual type, the core of the TSP implementation. Instead of having a list of integers, referring to cities, I now have a list of Connection, each containing 2 instances of Location. I&#8217;ve done this to allow smarter <a href=\"http:\/\/en.wikipedia.org\/wiki\/Crossover_%28genetic_algorithm%29\">crossover<\/a>, decreasing the chance of not finding a better solution while it&#8217;s still in the converged search space significantly. As a result of this change, I also had to rewrite pretty much everything else of the Route class, including random initialization, mutation and fitness assessment. The biggest challenge here was preventing the creation of multiple loops in the crossover algorithm.<\/p>\n<p>The interface of the TSP app (now called Skynet) also has seen quite some work. I figured out quite a lot of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Windows_Presentation_Foundation\">WPF<\/a> stuff by further creating it. Some extra controls and progress indicators still need to be added though, and I also haven&#8217;t created the Cancel\/Stop functionality.<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-652\" title=\"Skynet interface showing 42 cities arranged in a circle\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP.png\" alt=\"Skynet interface showing 42 cities arranged in a circle\" width=\"592\" height=\"662\" \/><\/a><\/p>\n<p>Although the algorithm is efficient in the way that it takes relatively few generations to find a close to optimal solution, there remain a few mayor performance issues. If I compare the speed of evolution (measured in generations) with similar applications tackling the TSP, there are those performing up to 3 orders of magnitude faster. Although the fastest of those are written in C++ or C, I should be able to significantly speed up my application. Tracking down resource eating parts of code will be one of my next steps in developing this app. Another possible issue is diversity of the population. I have the suspicion that the diversity shrinks pretty fast, resulting into evolution driven only by mutation. I&#8217;m not sure of this though, and also have to investigate how I can prevent this from happening.<\/p>\n<p>Here you have a few screenshots of the app in action \ud83d\ude42<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-gen41.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-653\" title=\"Skynet interface showing the evolved route between 42 cities after 41 generations.\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-gen41.png\" alt=\"Skynet interface showing the evolved route between 42 cities after 41 generations.\" width=\"594\" height=\"662\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-gen2-1470.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-654\" title=\"Skynet interface showing the evolved route between 42 cities after 1470 generations.\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-gen2-1470.png\" alt=\"Skynet interface showing the evolved route between 42 cities after 1470 generations.\" width=\"592\" height=\"660\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the last week, I&#8217;ve been rewriting my Genetic Algorithm (GA) implementation of the Travelling Salesman Problem (TSP). I&#8217;ve rewritten&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[9,11,55,100,101,103,181,236,266,267,294,297],"class_list":["post-650","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-net","tag-net-4-0","tag-c","tag-ga","tag-galib","tag-genetic-algorithm","tag-open-source","tag-skynet","tag-tsp","tag-ttravelling-salesman-problem","tag-wpf","tag-xaml"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GALib with TSP implementation - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GALib with TSP implementation - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"Over the last week, I&#8217;ve been rewriting my Genetic Algorithm (GA) implementation of the Travelling Salesman Problem (TSP). I&#8217;ve rewritten&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2010-01-10T01:21:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"GALib with TSP implementation\",\"datePublished\":\"2010-01-10T01:21:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/\"},\"wordCount\":417,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/01\\\/GALib-TSP-dependencyDiagram.png.gif\",\"keywords\":[\".Net\",\".Net 4.0\",\"C#\",\"GA\",\"GALib\",\"Genetic Algorithm\",\"Open Source\",\"Skynet\",\"TSP\",\"Ttravelling Salesman Problem\",\"WPF\",\"XAML\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/\",\"name\":\"GALib with TSP implementation - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/01\\\/GALib-TSP-dependencyDiagram.png.gif\",\"datePublished\":\"2010-01-10T01:21:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/01\\\/GALib-TSP-dependencyDiagram.png.gif\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/01\\\/GALib-TSP-dependencyDiagram.png.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2010\\\/01\\\/10\\\/galib-with-tsp-implementation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GALib with TSP implementation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GALib with TSP implementation - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/","og_locale":"en_US","og_type":"article","og_title":"GALib with TSP implementation - Blog of Jeroen De Dauw","og_description":"Over the last week, I&#8217;ve been rewriting my Genetic Algorithm (GA) implementation of the Travelling Salesman Problem (TSP). I&#8217;ve rewritten&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2010-01-10T01:21:03+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"GALib with TSP implementation","datePublished":"2010-01-10T01:21:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/"},"wordCount":417,"commentCount":3,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif","keywords":[".Net",".Net 4.0","C#","GA","GALib","Genetic Algorithm","Open Source","Skynet","TSP","Ttravelling Salesman Problem","WPF","XAML"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/","url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/","name":"GALib with TSP implementation - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif","datePublished":"2010-01-10T01:21:03+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-TSP-dependencyDiagram.png.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/10\/galib-with-tsp-implementation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"GALib with TSP implementation"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-au","jetpack-related-posts":[{"id":686,"url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/30\/skynet-released\/","url_meta":{"origin":650,"position":0},"title":"Skynet released!","author":"Jeroen","date":"2010-01-30","format":false,"excerpt":"Today I released the first public beta of Skynet, which is now at version 0.1.3. Skynet is an implementation of GALib with WPF GUI that solves the Travelling Salesman Problem (TSP) using Genetic Algorithms (GA). It's completely open source and available under the GNU General Public License. Downloads Skynet 0.1.3.zip\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/Skynet-application-interface.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/Skynet-application-interface.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/Skynet-application-interface.gif?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":662,"url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/19\/galib-available-now\/","url_meta":{"origin":650,"position":1},"title":"GALib available now!","author":"Jeroen","date":"2010-01-19","format":false,"excerpt":"Over the past 2 weeks I've been putting time in creating a general purpose Genetic Algorithm (GA) library in C#. It provides the scaffolding for any GA based functionality. Although it's not fully finished yet, it is now available under the GPL licence at SourceForge. What does it provide and\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Class diagram of GALib by Jeroen De Dauw","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-cd.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-cd.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/GALib-cd.gif?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":677,"url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/24\/galib-0-1-released\/","url_meta":{"origin":650,"position":2},"title":"GALib 0.1 released","author":"Jeroen","date":"2010-01-24","format":false,"excerpt":"Yesterday I released GALib version 0.1, a small C# Library that provides the scaffolding for Genetic Algorithm based functionality. It's completely open source and available under the GNU General Public License. (See other blog posts about GALib) You can download both the source and compiled .dll from SourceForge. I've done\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1527,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/01\/08\/old-project-documentation-restored\/","url_meta":{"origin":650,"position":3},"title":"Old project pages restored","author":"Jeroen","date":"2016-01-08","format":false,"excerpt":"During the past week I've been restoring the documentation and project pages of some of my old (2007 - 2010) projects. This documentation used to reside on my wiki at wiki.bn2vs.com. This wiki however has been down for two years, as I could not be bothered to fix it. Step\u2026","rel":"","context":"In &quot;Life&quot;","block_context":{"text":"Life","link":"https:\/\/www.entropywins.wtf\/blog\/category\/life\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":644,"url":"https:\/\/www.entropywins.wtf\/blog\/2010\/01\/03\/my-first-genetic-algorithm\/","url_meta":{"origin":650,"position":4},"title":"My first genetic algorithm","author":"Jeroen","date":"2010-01-03","format":false,"excerpt":"To practice some AI methods I've been reading about, I created a genetic algorithm (GA) implementation to tackle the travelling salesman problem (TSP). I decided to do this in C#, to practice myself in some more advanced aspects of the language, and mess some more around with the new stuff\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2010\/01\/tsp-genetic-algorithm-cities.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2049,"url":"https:\/\/www.entropywins.wtf\/blog\/2017\/06\/06\/review-of-ayreon-the-source\/","url_meta":{"origin":650,"position":5},"title":"Review of Ayreon: The Source","author":"Jeroen","date":"2017-06-06","format":false,"excerpt":"In this post I review the source code of the Ayreon software. Well, actually not. This is a review of The Source, a progressive rock\/metal album from the band Ayreon. Yes really. Much wow omg. Overall rating This album is awesome. Like every Ayreon album, The Source features a crapton\u2026","rel":"","context":"In \"Ayreon\"","block_context":{"text":"Ayreon","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/ayreon\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=650"}],"version-history":[{"count":0,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/650\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}