質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
人工知能

人工知能とは、言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2090閲覧

遺伝的アルゴリズムの一様交叉についての質問です。

bbiiq

総合スコア51

人工知能

人工知能とは、言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/21 02:40

pythonで遺伝的アルゴリズムを使い、OneMax問題を解くプログラムを作成したいのですが、一様交叉の部分がうまくいっていません。エラーは起きていないのですが、配列に変化が起きていないので交叉の部分がよくないと考えているのですが、原因がわかりません。
何が悪いのか、これを試してはという意見がありましたら教えていただきたいです。

python3

1import random 2import copy 3 4random.seed(1870258) 5gene_length = 10 # 遺伝子長 6individual_length = 10 # 個体数 7generation = 30 # 世代数 8elite_rate = 0.2 # エリート選択の割合 9 10#個体生成 11def get_population(): 12 population = [] 13 for i in range(individual_length): #遺伝子長 14 population.append([random.randint(0,1) for j in range(gene_length)]) #個体数 15 return population 16 17#適応度 18def fitness(pop): 19 return sum(pop) 20 21#評価 22def evaluate(pop): 23 pop.sort(reverse=True) 24 return pop 25 26#エリート選択 27def select(eva,pop): 28 elites = eva[:int(len(pop)*elite_rate)] 29 return elites 30 31#一様交叉 32def cxUniform(parent1, parent2): 33 for i in range(len(parent1)): 34 if random.random() < 0.5: 35 parent1[i], parent2[i] = parent2[i], parent1[i] 36 return random.choice([parent1,parent2]) 37 38def main(): 39 # 初期個体生成 40 pop = evaluate([(fitness(p), p) for p in get_population()]) 41 print('Generation: 0') 42 print('Min : {}'.format(pop[-1][0])) 43 print('Max : {}'.format(pop[0][0])) 44 print('--------------------------') 45 46 for g in range(generation): 47 if 10 != pop[0][0] and 10 != pop[-1][0]: 48 49 g += 1 50 print('Generation: ' + str(g)) 51 52 #選択 53 eva = evaluate(pop) 54 elites = select(eva,pop) 55 56 #交叉 57 new_pop = elites 58 while len(new_pop) < individual_length: 59 m1 = random.randint(0, len(elites)-1) 60 m2 = random.randint(0, len(elites)-1) 61 child = cxUniform(elites[m1][1], elites[m2][1]) 62 new_pop.append((fitness(child), child)) 63 64 new_pop = evaluate(new_pop) 65 66 print('Min : {}'.format(pop[-1][0]),' Result : {}'.format(pop[-1])) 67 print('Max : {}'.format(pop[0][0]),' Result : {}'.format(pop[0])) 68 print('--------------------------') 69 else: 70 break 71 72 73 74 print('\n--------------------------End of evolution--------------------------') 75 print('Generation: ' + str(g)) 76 print('Min : {}'.format(pop[-1][0]),' Result : {}'.format(pop[-1])) 77 print('Max : {}'.format(pop[0][0]),' Result : {}'.format(pop[0])) 78 79 80 81if __name__ == '__main__': 82 main()

実行結果:
Generation: 0
Min : 2
Max : 8

Generation: 1
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 1, 1, 1, 1, 0, 1, 1, 1])

Generation: 2
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 3
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 1, 1, 1, 1])

Generation: 4
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 1, 1, 1, 0, 1, 1, 1])

Generation: 5
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 1, 1, 1, 1, 1, 1, 1])

Generation: 6
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 1, 1, 1, 0, 1, 1, 1])

Generation: 7
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 0, 1, 1, 1, 1, 1, 1])

Generation: 8
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 1, 1, 1, 1])

Generation: 9
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 1, 0, 1, 1, 1, 1, 1, 1])

Generation: 10
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 1, 0, 1, 1, 1, 1, 1, 1])

Generation: 11
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 1, 1, 1, 0, 1, 1, 1])

Generation: 12
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 0, 1, 1, 0, 1, 1, 1])

Generation: 13
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 14
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 1, 0, 1, 1, 1, 1, 1, 1])

Generation: 15
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 0, 1, 1, 1, 1, 1, 1])

Generation: 16
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 1, 1, 1, 0, 1, 1, 1])

Generation: 17
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 18
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 1, 1, 1, 1, 1, 1, 1])

Generation: 19
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 20
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 1, 1, 1, 0, 1, 1, 1])

Generation: 21
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

Generation: 22
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 1, 1, 1, 1])

Generation: 23
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 1, 1, 1, 1])

Generation: 24
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 1, 1, 1, 1, 1, 1, 1])

Generation: 25
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 26
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 0, 1, 1, 0, 1, 1, 1])

Generation: 27
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 1, 0, 1, 1, 0, 1, 1, 1])

Generation: 28
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 0, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 29
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

Generation: 30
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

--------------------------End of evolution--------------------------
Generation: 30
Min : 2 Result : (2, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0])
Max : 8 Result : (8, [1, 1, 0, 0, 1, 1, 0, 1, 1, 1])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

すみません解決した 結果のソースコードを見せてもらえませんか

投稿2022/08/28 09:29

aaaa1765456787

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

new_popとpopの変数名の問題でした

投稿2021/07/21 03:01

bbiiq

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaa1765456787

2022/08/28 09:47 編集

すみません どう解決したか具体的に教えてもらいませんか 上の質問はミスです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問