में (रौलेट व्हील चयन) मैं वस्तुओं (गुणसूत्र) जो एक विशेषता फिटनेस है की एक सूची है (chromosome.fitness 0 और के बीच है 1)स्वास्थ्य आनुपातिक चयन अजगर
इस तरह की वस्तुओं की एक सूची को देखते हुए, कैसे कर सकते हैं मैं एक ऐसा कार्य लागू करता हूं जो एक एकल गुणसूत्र लौटाता है जिसका चयन करने का मौका इसकी फिटनेस के समान है? यही है, फिटनेस 0.8 के साथ गुणसूत्र फिटनेस 0.4 के साथ एक के रूप में चुना जाने की संभावना है।
मुझे कुछ पायथन और छद्म कोड कार्यान्वयन मिले हैं, लेकिन वे इस आवश्यकता के लिए बहुत जटिल हैं: फ़ंक्शन को केवल गुणसूत्रों की एक सूची की आवश्यकता होती है। क्रोमोसोम एक आंतरिक चर के रूप में अपनी फिटनेस स्टोर करते हैं।
मैंने पहले ही लिखा था कि कार्यान्वयन से पहले मैंने क्रोमोसोम को अपनी फिटनेस स्टोर करने की अनुमति देने का फैसला किया था, इसलिए बहुत अधिक जटिल और जुड़ी सूचियां और चीजें शामिल थीं।
---------------------------- संपादित करें ---------------- ------------
धन्यवाद लैटवेयर। निम्नलिखित कार्य काम करता प्रतीत होता है।
def selectOne(self, population):
max = sum([c.fitness for c in population])
pick = random.uniform(0, max)
current = 0
for chromosome in population:
current += chromosome.fitness
if current > pick:
return chromosome
आप कई विकल्प है, या आप वजन का एक ही सेट के साथ कई मूल्यों लेने के लिए है, तो आप भी बदल सकती है यह ओ (एन) समाधान एक ओ (लॉग (एन)) समाधान में बाइनरी खोज, या यहां तक कि एक ओ (1) समाधान का उपयोग करके किसी प्रकार की लुक-अप तालिका का उपयोग करके समाधान। –
@SvenMarnach यह सच है, मैं यहां सबसे सरल समाधान दे रहा हूं, जरूरी नहीं कि सबसे तेज़ - यह वास्तव में ध्यान देने योग्य है। –
[यह आलेख] (http://www.keithschwarz.com/darts-dice-coins/) इस नमूने के लिए ओ (1) एल्गोरिदम विकसित करने का एक अच्छा प्रदर्शन प्रदान करता है। – Dougal