विकासवादी संगणना

कंप्यूटर विज्ञान में, विकासवादी संगणना जैविक विकास से प्रेरित वैश्विक अनुकूलन के लिए कलन विधि का एक परिवार है, और कृत्रिम बुद्धिमत्ता और सॉफ्ट कंप्यूटिंग का उपक्षेत्र इन एल्गोरिदम का अध्ययन करता है। तकनीकी शब्दों में, वे मेटाह्यूरिस्टिक या स्टोकेस्टिक अनुकूलन चरित्र के साथ जनसंख्या-आधारित परीक्षण और त्रुटि समस्या समाधानकर्ताओं का एक परिवार हैं।

विकासवादी गणना में, उम्मीदवार समाधानों का एक प्रारंभिक सेट तैयार किया जाता है और पुनरावृत्त रूप से अद्यतन किया जाता है। प्रत्येक नई पीढ़ी कम वांछित समाधानों को हटाकर, और छोटे यादृच्छिक परिवर्तन पेश करके तैयार की जाती है। जैविक शब्दावली में, समाधानों की आबादी प्राकृतिक चयन (या कृत्रिम चयन) और उत्परिवर्तन के अधीन होती है। परिणामस्वरूप, जनसंख्या धीरे-धीरे फिटनेस (जीव विज्ञान) में वृद्धि करने के लिए विकसित होगी, इस मामले में एल्गोरिदम का चुना हुआ फिटनेस कार्य

विकासवादी संगणना तकनीकें समस्या सेटिंग्स की एक विस्तृत श्रृंखला में अत्यधिक अनुकूलित समाधान उत्पन्न कर सकती हैं, जो उन्हें कंप्यूटर विज्ञान में लोकप्रिय बनाती हैं। कई प्रकार और एक्सटेंशन मौजूद हैं, जो समस्याओं और डेटा संरचनाओं के अधिक विशिष्ट परिवारों के लिए उपयुक्त हैं। विकासवादी संगणना का उपयोग कभी-कभी विकासवादी जीव विज्ञान में सामान्य विकासवादी प्रक्रियाओं के सामान्य पहलुओं का अध्ययन करने के लिए इन सिलिको प्रयोगात्मक प्रक्रिया के रूप में भी किया जाता है।

इतिहास
समस्याओं को हल करने के लिए विकासवादी प्रक्रियाओं की नकल करने की अवधारणा कंप्यूटर के आगमन से पहले उत्पन्न हुई थी, जैसे कि जब एलन ट्यूरिंग ने 1948 में आनुवंशिक खोज की एक विधि प्रस्तावित की थी। ट्यूरिंग की बी-प्रकार की यू-मशीनें आदिम तंत्रिका नेटवर्क से मिलती-जुलती हैं, और न्यूरॉन्स के बीच कनेक्शन एक प्रकार के आनुवंशिक एल्गोरिदम के माध्यम से सीखे गए थे। उनकी पी-टाइप यू-मशीनें सुदृढीकरण सीखने की एक विधि से मिलती-जुलती हैं, जहां खुशी और दर्द के संकेत मशीन को कुछ व्यवहार सीखने के लिए निर्देशित करते हैं। हालाँकि, ट्यूरिंग का पेपर 1968 तक अप्रकाशित रहा, और 1954 में उनकी मृत्यु हो गई, इसलिए इस प्रारंभिक कार्य का विकासवादी गणना के क्षेत्र पर बहुत कम या कोई प्रभाव नहीं पड़ा, जिसे विकसित होना था। एक क्षेत्र के रूप में विकासवादी कंप्यूटिंग 1950 और 1960 के दशक में गंभीरता से शुरू हुई। इस समय कंप्यूटिंग में विकास की प्रक्रिया का उपयोग करने के कई स्वतंत्र प्रयास हुए, जो लगभग 15 वर्षों तक अलग-अलग विकसित हुए। इस लक्ष्य को प्राप्त करने के लिए विभिन्न स्थानों में तीन शाखाएँ उभरीं: विकास रणनीति, विकासवादी प्रोग्रामिंग और आनुवंशिक एल्गोरिदम। एक चौथी शाखा, आनुवंशिक प्रोग्रामिंग, अंततः 1990 के दशक की शुरुआत में उभरी। ये दृष्टिकोण चयन की विधि, अनुमत उत्परिवर्तन और आनुवंशिक डेटा के प्रतिनिधित्व में भिन्न हैं। 1990 के दशक तक, ऐतिहासिक शाखाओं के बीच अंतर धुंधला होना शुरू हो गया था, और 'विकासवादी कंप्यूटिंग' शब्द 1991 में एक ऐसे क्षेत्र को दर्शाने के लिए गढ़ा गया था जो सभी चार प्रतिमानों में मौजूद है। 1962 में, लॉरेंस जे. फोगेल ने संयुक्त राज्य अमेरिका में इवोल्यूशनरी प्रोग्रामिंग के अनुसंधान की शुरुआत की, जिसे एक कृत्रिम बुद्धिमत्ता प्रयास माना गया। इस प्रणाली में, भविष्यवाणी की समस्या को हल करने के लिए परिमित-राज्य मशीनों का उपयोग किया जाता है: इन मशीनों को उत्परिवर्तित किया जाएगा (राज्यों को जोड़ना या हटाना, या राज्य संक्रमण नियमों को बदलना), और इन उत्परिवर्तित मशीनों में से सर्वश्रेष्ठ को भविष्य की पीढ़ियों में विकसित किया जाएगा। आवश्यकता पड़ने पर भविष्यवाणियाँ उत्पन्न करने के लिए अंतिम परिमित राज्य मशीन का उपयोग किया जा सकता है। विकासवादी प्रोग्रामिंग पद्धति को भविष्यवाणी समस्याओं, सिस्टम पहचान और स्वचालित नियंत्रण पर सफलतापूर्वक लागू किया गया था। अंततः समय श्रृंखला डेटा को संभालने और गेमिंग रणनीतियों के विकास को मॉडल करने के लिए इसका विस्तार किया गया।

1964 में, इंगो रेचेनबर्ग और हंस पॉल सल्फर ने जर्मनी में विकास रणनीति के प्रतिमान का परिचय दिया। चूंकि पारंपरिक ढतला हुआ वंश  तकनीक ऐसे परिणाम उत्पन्न करती है जो स्थानीय मिनीमा में फंस सकते हैं, रेचेनबर्ग और श्वेफेल ने प्रस्तावित किया कि इन मिनिमा से बचने के लिए यादृच्छिक उत्परिवर्तन (कुछ समाधान वेक्टर के सभी मापदंडों पर लागू) का उपयोग किया जा सकता है। माता-पिता के समाधानों से बाल समाधान तैयार किए गए, और दोनों में से जो अधिक सफल था उसे भावी पीढ़ियों के लिए रखा गया। इस तकनीक का उपयोग पहली बार द्रव गतिकी में अनुकूलन समस्याओं को सफलतापूर्वक हल करने के लिए दोनों द्वारा किया गया था। प्रारंभ में, इस अनुकूलन तकनीक को कंप्यूटर के बिना निष्पादित किया गया था, इसके बजाय यादृच्छिक उत्परिवर्तन निर्धारित करने के लिए पासे पर निर्भर किया गया था। 1965 तक, गणनाएँ पूरी तरह मशीन द्वारा की जाने लगीं।

जॉन हेनरी हॉलैंड ने 1960 के दशक में आनुवंशिक एल्गोरिदम की शुरुआत की और इसे 1970 के दशक में मिशिगन विश्वविद्यालय में आगे विकसित किया गया। जबकि अन्य दृष्टिकोण समस्याओं को हल करने पर केंद्रित थे, हॉलैंड का मुख्य उद्देश्य अनुकूलन का अध्ययन करने और यह निर्धारित करने के लिए आनुवंशिक एल्गोरिदम का उपयोग करना था कि इसे कैसे अनुकरण किया जा सकता है। बिट स्ट्रिंग के रूप में दर्शाए गए गुणसूत्रों की आबादी को एक कृत्रिम चयन प्रक्रिया द्वारा रूपांतरित किया गया, बिट स्ट्रिंग में विशिष्ट 'एलील' बिट्स का चयन किया गया। अन्य उत्परिवर्तन विधियों के बीच, विभिन्न जीवों के बीच डीएनए के आनुवंशिक पुनर्संयोजन को अनुकरण करने के लिए गुणसूत्रों के बीच बातचीत का उपयोग किया गया था। जबकि पिछली विधियाँ एक समय में केवल एक ही इष्टतम जीव को ट्रैक करती थीं (जिसमें बच्चे माता-पिता के साथ प्रतिस्पर्धा करते थे), हॉलैंड के आनुवंशिक एल्गोरिदम ने बड़ी आबादी को ट्रैक किया (जिसमें कई जीव प्रत्येक पीढ़ी में प्रतिस्पर्धा करते हैं)।

1990 के दशक तक, विकासवादी संगणना के लिए एक नया दृष्टिकोण सामने आया जिसे जेनेटिक प्रोग्रामिंग कहा जाने लगा, जिसकी जॉन बकरी सहित अन्य लोगों ने वकालत की। एल्गोरिदम के इस वर्ग में, विकास का विषय स्वयं एक उच्च-स्तरीय प्रोग्रामिंग भाषा में लिखा गया प्रोग्राम था (मशीन कोड का उपयोग करने के लिए 1958 की शुरुआत में कुछ पिछले प्रयास किए गए थे, लेकिन उन्हें बहुत कम सफलता मिली थी)। कोज़ा के लिए, कार्यक्रम लिस्प (प्रोग्रामिंग भाषा) एस-अभिव्यक्ति  थे, जिन्हें उप-एक्सप्रेशन के पेड़ के रूप में माना जा सकता है। यह प्रतिनिधित्व कार्यक्रमों को एक प्रकार के आनुवंशिक मिश्रण का प्रतिनिधित्व करते हुए, उप-वृक्षों की अदला-बदली करने की अनुमति देता है। प्रोग्राम को इस आधार पर स्कोर किया जाता है कि वे किसी निश्चित कार्य को कितनी अच्छी तरह पूरा करते हैं, और स्कोर का उपयोग कृत्रिम चयन के लिए किया जाता है। अनुक्रम प्रेरण, पैटर्न पहचान और योजना सभी आनुवंशिक प्रोग्रामिंग प्रतिमान के सफल अनुप्रयोग थे।

कई अन्य हस्तियों ने विकासवादी कंप्यूटिंग के इतिहास में भूमिका निभाई, हालांकि उनका काम हमेशा क्षेत्र की प्रमुख ऐतिहासिक शाखाओं में से एक में फिट नहीं हुआ। विकासवादी एल्गोरिदम और कृत्रिम जीवन तकनीकों का उपयोग करके विकास का सबसे पहला कम्प्यूटेशनल सिमुलेशन 1953 में निल्स ऑल बरीज़ द्वारा किया गया था, जिसके पहले परिणाम 1954 में प्रकाशित हुए थे। 1950 के दशक में एक अन्य अग्रणी एलेक्स फ़्रेज़र (वैज्ञानिक)वैज्ञानिक) थे, जिन्होंने कृत्रिम चयन के अनुकरण पर पत्रों की एक श्रृंखला प्रकाशित की थी। जैसे-जैसे शैक्षणिक रुचि बढ़ी, कंप्यूटर की शक्ति में नाटकीय वृद्धि ने व्यावहारिक अनुप्रयोगों को अनुमति दी, जिसमें कंप्यूटर प्रोग्राम का स्वचालित विकास भी शामिल था। विकासवादी एल्गोरिदम का उपयोग अब मानव डिजाइनरों द्वारा निर्मित सॉफ़्टवेयर की तुलना में बहु-आयामी समस्याओं को अधिक कुशलता से हल करने और सिस्टम के डिज़ाइन को अनुकूलित करने के लिए भी किया जाता है।

तकनीक
विकासवादी कंप्यूटिंग तकनीकों में अधिकतर मेटाह्यूरिस्टिक गणितीय अनुकूलन एल्गोरिदम शामिल होते हैं। मोटे तौर पर, इस क्षेत्र में शामिल हैं: कई अन्य हाल ही में प्रस्तावित एल्गोरिदम के साथ एक संपूर्ण कैटलॉग इवोल्यूशनरी कंप्यूटेशन बेस्टियरी में प्रकाशित किया गया है। यह ध्यान रखना महत्वपूर्ण है कि हालाँकि, कई हालिया एल्गोरिदम की प्रयोगात्मक मान्यता खराब है।
 * एजेंट-आधारित मॉडलिंग
 * चींटी कॉलोनी अनुकूलन
 * कृत्रिम प्रतिरक्षा प्रणाली
 * कृत्रिम जीवन (डिजिटल जीव भी देखें)
 * सांस्कृतिक एल्गोरिदम
 * सहविकासवादी एल्गोरिदम
 * विभेदक विकास
 * दोहरे चरण का विकास
 * वितरण एल्गोरिदम का अनुमान
 * विकासवादी एल्गोरिदम
 * विकासवादी प्रोग्रामिंग
 * विकास रणनीति
 * जीन अभिव्यक्ति प्रोग्रामिंग
 * जेनेटिक एल्गोरिद्म
 * आनुवंशिक प्रोग्रामिंग
 * व्याकरणिक विकास
 * सीखने योग्य विकास मॉडल
 * लर्निंग क्लासिफायर सिस्टम
 * मेमेटिक एल्गोरिदम
 * तंत्रिका विकास
 * कण झुंड अनुकूलन
 * बीटल एंटीना खोज
 * स्व-संगठन जैसे स्व-व्यवस्थित मानचित्र, प्रतिस्पर्धी शिक्षा
 * झुंड खुफिया

विकासवादी एल्गोरिदम
विकासवादी एल्गोरिदम विकासवादी गणना का एक उपसमूह बनाते हैं, जिसमें वे आम तौर पर केवल प्रजनन, उत्परिवर्तन, आनुवंशिक पुनर्संयोजन, प्राकृतिक चयन और योग्यतम के अस्तित्व जैसे जैविक विकास से प्रेरित तंत्र को लागू करने वाली तकनीकों को शामिल करते हैं। अनुकूलन समस्या के लिए उम्मीदवार समाधान जनसंख्या में व्यक्तियों की भूमिका निभाते हैं, और हानि फ़ंक्शन उस वातावरण को निर्धारित करता है जिसके भीतर समाधान रहते हैं (फिटनेस फ़ंक्शन भी देखें)। उपरोक्त ऑपरेटरों के बार-बार आवेदन के बाद जनसंख्या का विकास होता है।

इस प्रक्रिया में, दो मुख्य ताकतें हैं जो विकासवादी प्रणालियों का आधार बनाती हैं: पुनर्संयोजन उत्परिवर्तन और क्रॉसओवर आवश्यक विविधता पैदा करते हैं और इस तरह नवीनता की सुविधा प्रदान करते हैं, जबकि चयन गुणवत्ता बढ़ाने वाली ताकत के रूप में कार्य करता है।

ऐसी विकासवादी प्रक्रिया के कई पहलू स्टोकेस्टिक हैं। पुनर्संयोजन और उत्परिवर्तन के कारण जानकारी के परिवर्तित टुकड़े यादृच्छिक रूप से चुने जाते हैं। दूसरी ओर, चयन ऑपरेटर या तो नियतात्मक या स्टोकेस्टिक हो सकते हैं। बाद के मामले में, उच्च फिटनेस फ़ंक्शन वाले व्यक्तियों के पास कम फिटनेस फ़ंक्शन वाले व्यक्तियों की तुलना में चुने जाने की अधिक संभावना होती है, लेकिन आमतौर पर कमजोर व्यक्तियों के पास भी माता-पिता बनने या जीवित रहने का मौका होता है।

विकासवादी एल्गोरिदम और जीव विज्ञान
आनुवंशिक एल्गोरिदम जैविक प्रणालियों और सिस्टम जीव विज्ञान को मॉडल करने के तरीके प्रदान करते हैं जो गतिशील प्रणालियों के सिद्धांत से जुड़े होते हैं, क्योंकि उनका उपयोग सिस्टम की भविष्य की स्थितियों की भविष्यवाणी करने के लिए किया जाता है। यह जीव विज्ञान में विकास के व्यवस्थित, सुनियंत्रित और उच्च संरचित चरित्र की ओर ध्यान आकर्षित करने का एक ज्वलंत (लेकिन शायद भ्रामक) तरीका है।

हालाँकि, गतिशील प्रणालियों के सादृश्य से परे, विशेष रूप से कम्प्यूटेशनल सिद्धांत के एल्गोरिदम और सूचना विज्ञान का उपयोग, विकास को समझने के लिए भी प्रासंगिक है।

इस दृष्टिकोण में यह पहचानने की योग्यता है कि विकास का कोई केंद्रीय नियंत्रण नहीं है; जीवों का विकास कोशिकाओं के भीतर और उनके बीच स्थानीय अंतःक्रियाओं के परिणामस्वरूप होता है। प्रोग्राम-विकास समानताओं के बारे में सबसे आशाजनक विचार हमें वे लगते हैं जो कोशिकाओं के भीतर प्रक्रियाओं और आधुनिक कंप्यूटरों के निम्न-स्तरीय संचालन के बीच स्पष्ट रूप से घनिष्ठ सादृश्य की ओर इशारा करते हैं। इस प्रकार, जैविक प्रणालियाँ कम्प्यूटेशनल मशीनों की तरह हैं जो अगले राज्यों की गणना करने के लिए इनपुट जानकारी को संसाधित करती हैं, जैसे कि जैविक प्रणालियाँ शास्त्रीय गतिशील प्रणाली की तुलना में गणना के करीब होती हैं। इसके अलावा, कम्प्यूटेशनल सिद्धांत की अवधारणाओं के बाद, जैविक जीवों में सूक्ष्म प्रक्रियाएं मौलिक रूप से अपूर्ण और अनिर्णीत (पूर्णता (तर्क)) हैं, जिसका अर्थ है कि "कोशिकाओं और कंप्यूटर के बीच सादृश्य के पीछे एक अपरिष्कृत रूपक से कहीं अधिक है। गणना की सादृश्यता वंशानुक्रम प्रणालियों और जैविक संरचना के बीच संबंधों तक भी फैली हुई है, जिसे अक्सर जीवन की उत्पत्ति को समझाने में सबसे महत्वपूर्ण समस्याओं में से एक को प्रकट करने के लिए माना जाता है।

विकासवादी ऑटोमेटा, विकासवादी ट्यूरिंग मशीनों का एक सामान्यीकरण, जैविक और विकासवादी गणना के गुणों की अधिक सटीक जांच करने के लिए पेश किया गया है। विशेष रूप से, वे विकासवादी गणना की अभिव्यक्ति पर नए परिणाम प्राप्त करने की अनुमति देते हैं. यह प्राकृतिक विकास और विकासवादी एल्गोरिदम और प्रक्रियाओं की अनिश्चितता के बारे में प्रारंभिक परिणाम की पुष्टि करता है। विकासवादी परिमित ऑटोमेटा, टर्मिनल मोड में काम करने वाले विकासवादी ऑटोमेटा का सबसे सरल उपवर्ग किसी दिए गए वर्णमाला पर मनमानी भाषाओं को स्वीकार कर सकता है, जिसमें गैर-पुनरावर्ती गणना योग्य (उदाहरण के लिए, विकर्णीकरण भाषा) और पुनरावर्ती गणना योग्य लेकिन पुनरावर्ती भाषा नहीं (उदाहरण के लिए, सार्वभौमिक ट्यूरिंग मशीन की भाषा) शामिल है। ).

उल्लेखनीय अभ्यासकर्ता
सक्रिय शोधकर्ताओं की सूची स्वाभाविक रूप से गतिशील और गैर-विस्तृत है। समुदाय का एक नेटवर्क विश्लेषण 2007 में प्रकाशित किया गया था।
 * कल्याणमय देब
 * केनेथ ए डी जोंग
 * पीटर जे. फ्लेमिंग
 * डेविड बी फोगेल
 * स्टेफ़नी फ़ॉरेस्ट
 * डेविड ई. गोल्डबर्ग
 * जॉन हेनरी हॉलैंड
 * थियो जानसन
 * जॉन कोज़ा
 * ज़बिग्न्यू माइकलेविक्ज़
 * मेलानी मिशेल
 * पीटर नॉर्डिन
 * रिकार्डो पोली
 * इंगो रेचेनबर्ग
 * हंस-पॉल श्वेफ़ेल

सम्मेलन
विकासवादी संगणना क्षेत्र में मुख्य सम्मेलनों में शामिल हैं
 * संगणक तंत्र संस्था आनुवंशिक और विकासवादी संगणना सम्मेलन  (जीईसीसीओ),
 * विकासवादी संगणना पर आईईईई कांग्रेस (सीईसी),
 * EvoStar, जिसमें चार सम्मेलन शामिल हैं: EuroGP, EvoApplications, EvoCOP और EvoMUSART,
 * प्रकृति से समानांतर समस्या समाधान (पीपीएसएन)।

यह भी देखें

 * अनुकूली आयामी खोज
 * कृत्रिम विकास
 * स्वत: रचनात्मक
 * विकासात्मक अनुदान
 * डिजिटल जीव
 * वितरण एल्गोरिदम का अनुमान
 * विकासवादी रोबोटिक्स
 * विकसित एंटीना
 * फिटनेस सन्निकटन
 * फिटनेस कार्य
 * फिटनेस परिदृश्य
 * आनुवंशिक संचालक
 * व्याकरणिक विकास
 * मानव आधारित विकासवादी संगणना
 * अनुमानात्मक प्रोग्रामिंग
 * इंटरएक्टिव विकासवादी संगणना
 * डिजिटल ऑर्गैज़्म सिमुलेटर की सूची
 * उत्परिवर्तन परीक्षण
 * खोज और अनुकूलन में कोई निःशुल्क लंच नहीं
 * कार्यक्रम संश्लेषण
 * अनुकूलन के लिए परीक्षण कार्य
 * अपरंपरागत कंप्यूटिंग
 * सार्वभौम डार्विनवाद

बाहरी संबंध

 * Article in the Stanford Encyclopedia of Philosophy about Biological Information (English)

ग्रन्थसूची

 * Th. Bäck, D.B. Fogel, and Z. Michalewicz (Editors), Handbook of Evolutionary Computation, 1997, ISBN 0750303921
 * Th. Bäck and H.-P. Schwefel. An overview of evolutionary algorithms for parameter optimization. Evolutionary Computation, 1(1):1–23, 1993.
 * W. Banzhaf, P. Nordin, R.E. Keller, and F.D. Francone. Genetic Programming — An Introduction. Morgan Kaufmann, 1998.
 * S. Cagnoni, et al., Real-World Applications of Evolutionary Computing, Springer-Verlag Lecture Notes in Computer Science, Berlin, 2000.
 * R. Chiong, Th. Weise, Z. Michalewicz (Editors), Variants of Evolutionary Algorithms for Real-World Applications, Springer, 2012, ISBN 3642234232
 * K. A. De Jong, Evolutionary computation: a unified approach. MIT Press, Cambridge MA, 2006
 * A. E. Eiben and J.E. Smith, From evolutionary computation to the evolution of things, Nature, 521:476-482, doi:10.1038/nature14544, 2015
 * A. E. Eiben and J.E. Smith, Introduction to Evolutionary Computing, Springer, First edition, 2003; Second edition, 2015
 * D. B. Fogel. Evolutionary Computation. Toward a New Philosophy of Machine Intelligence. IEEE Press, Piscataway, NJ, 1995.
 * L. J. Fogel, A. J. Owens, and M. J. Walsh. Artificial Intelligence through Simulated Evolution. New York: John Wiley, 1966.
 * D. E. Goldberg. Genetic algorithms in search, optimization and machine learning. Addison Wesley, 1989.
 * J. H. Holland. Adaptation in natural and artificial systems. University of Michigan Press, Ann Arbor, 1975.
 * P. Hingston, L. Barone, and Z. Michalewicz (Editors), Design by Evolution, Natural Computing Series, 2008, Springer, ISBN 3540741097
 * J. R. Koza. Genetic Programming: On the Programming of Computers by means of Natural Evolution. MIT Press, Massachusetts, 1992.
 * F.J. Lobo, C.F. Lima, Z. Michalewicz (Editors), Parameter Setting in Evolutionary Algorithms, Springer, 2010, ISBN 3642088929
 * Z. Michalewicz, Genetic Algorithms + Data Structures – Evolution Programs, 1996, Springer, ISBN 3540606769
 * Z. Michalewicz and D.B. Fogel, How to Solve It: Modern Heuristics, Springer, 2004, ISBN 978-3-540-22494-5
 * I. Rechenberg. Evolutionstrategie: Optimierung Technischer Systeme nach Prinzipien des Biologischen Evolution. Fromman-Hozlboog Verlag, Stuttgart, 1973.
 * H.-P. Schwefel. Numerical Optimization of Computer Models. John Wiley & Sons, New-York, 1981. 1995 – 2nd edition.
 * D. Simon. Evolutionary Optimization Algorithms. Wiley, 2013.