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

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

新規登録して質問してみよう
ただいま回答率
85.48%
強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

人工知能

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1175閲覧

GA(遺伝的アルゴリズム)の変数の範囲

r_2000

総合スコア3

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

人工知能

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2022/09/27 09:56

編集2022/09/27 09:58

現在、Deapを用いて、Pythonで遺伝的アルゴリズムのコードを書いています。

その際、以下のコードで遺伝子の範囲を100~3000と設定しているのですが、

toolbox.register("attribute", random.uniform, 100,3000)

実行結果を見ると、3や15と、遺伝子に100以下の値が出てきてしまいます。

実行結果 (遺伝子は29個)

最も良い個体は [2050.4287868351553, 1729.0439433402744, 2649.420272551191, 1825.285090217696, 1839.7237587761172, 2044.6842382330624, 239.95656726198487, 3, 1402.2053890014188, 15, 914.2818050559725, 2367.5929562831743, 1222.084581301321, 638.1918725814368, 1235.3839038956376, 1985.4035498209607, 5, 1718.7375114780345, 1, 897.651062445838, 1256.7446801115016, 11, 1341.0758804016605, 1066.186304756078, 7, 1127.4823517958882, 2523.6923289896536, 1182.102595684409, 1806.4077504874228]で、 そのときの目的関数の値は (0.00010462913092104746,)

範囲を100~3000に設定しているはずなのに、なぜ、100以下の値を持った遺伝子が出てきてしまうのでしょうか。。

以下参考にさせていただいたサイトになります。
https://dse-souken.com/2021/05/25/ai-19/

以下、コード全文になります。

import random #DEAPの中にある必要なモジュールをインポート from deap import base from deap import creator from deap import tools from deap import algorithms #最小化問題として設定(-1.0で最小化、1.0で最大化問題) #面食らうかもしれませんが、目的が最小化の場合は以下のように設定します。 creator.create("FitnessMin", base.Fitness, weights=(-1.0,)) #個体の定義(list型と指定しただけで、中身の遺伝子は後で入れる) #これも面食らうかもしれませんが、個体を準備したと思ってください。 creator.create("Individual", list, fitness=creator.FitnessMin) #目的関数の定義。必ずreturnの後に,をつける def obfunc(individual): x0 = individual[0] x1 = individual[1] x2 = individual[2] x3 = individual[3] x4 = individual[4] x5 = individual[5] x6 = individual[6] x7 = individual[7] x8 = individual[8] x9 = individual[9] x10 = individual[10] x11 = individual[11] x12 = individual[12] x13 = individual[13] x14 = individual[14] x15 = individual[15] x16 = individual[16] x17 = individual[17] x18 = individual[18] x19 = individual[19] x20 = individual[20] x21 = individual[21] x22 = individual[22] x23 = individual[23] x24 = individual[24] x25 = individual[25] x26 = individual[26] x27 = individual[27] x28 = individual[28] object =(x0*0.03790532483552622*(0.03790532483552622-1) +\ x1*0.08218601973684196*(0.08218601973684196-1) +\ x2*0.13198935326597724*(0.13198935326597724-1) +\ x3*0.18646259398496226*(0.18646259398496226-1) +\ x4*0.24475301045582687*(0.24475301045582687-1) +\ x5*0.30600787124060136*(0.30600787124060136-1) +\ x6*0.36937444490131577*(0.36937444490131577-1) +\ x7*0.434*(0.434-1) +\ x8*0.4990318050986843*(0.4990318050986843-1) +\ x9*0.5636171287593985*(0.5636171287593985-1) +\ x10*0.626903239544173*(0.626903239544173-1) +\ x11*0.6880374060150377*(0.6880374060150377-1) +\ x12*0.7461668967340228*(0.7461668967340228-1) +\ x13*0.8004389802631581*(0.8004389802631581-1) +\ x14*0.8500009251644738*(0.8500009251644738-1) +\ x15*0.8940000000000001*(0.8940000000000001-1) +\ x16*0.9320722639933164*(0.9320722639933164-1) +\ x17*0.9658089390142021*(0.9658089390142021-1) +\ x18*0.9972900375939849*(0.9972900375939849-1) +\ x19*1.028595572263993*(1.028595572263993-1) +\ x20*1.0618055555555554*(1.0618055555555554-1) +\ x21*1.099*(1.099-1) +\ x22*1.141426127819549*(1.141426127819549-1) +\ x23*1.187*(1.187-1) +\ x24*1.232804887218046*(1.232804887218046-1) +\ x25*1.2759240601503767*(1.2759240601503767-1) +\ x26*1.3134407894736848*(1.3134407894736848-1) +\ x27*1.342438345864662*(1.342438345864662-1) +\ x28*1.36*(1.36-1) \ )**2 return object, #各種関数の設定を行います #交叉、選択、突然変異などには、DEAPのToolbox内にある関数を利用 toolbox = base.Toolbox() #random.uniformの別名をattribute関数として設定。各個体の遺伝子の中身を決める関数(各遺伝子は100~3000のランダムな値) toolbox.register("attribute", random.uniform, 100,3000) #individualという関数を設定。それぞれの個体に含まれる29個の遺伝子をattributeにより決めるよ、ということ。 toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attribute, 29) #集団の個体数を設定するための関数を準備 toolbox.register("population", tools.initRepeat, list, toolbox.individual) #トーナメント方式で次世代に子を残す親を選択(tornsizeは各トーナメントに参加する個体の数) toolbox.register("select", tools.selTournament, tournsize=5) #交叉関数の設定。 toolbox.register("mate", tools.cxOnePoint) #突然変異関数の設定。 toolbox.register("mutate", tools.mutUniformInt,low=0,up=20,indpb=0.2) #評価したい関数の設定(目的関数のこと) toolbox.register("evaluate", obfunc) #以下でパラメータの設定---------------------------- #今回は最も単純な遺伝的アルゴリズムの手法を採用 #乱数を固定 random.seed(64) #何世代まで行うか NGEN = 500 #集団の個体数 POP = 80 #交叉確率 CXPB = 0.9 #個体が突然変異を起こす確率 MUTPB = 0.1 #集団は80個体という情報の設定 pop = toolbox.population(n=POP) #集団内の個体それぞれの適応度(目的関数の値)を計算 for individual in pop: individual.fitness.values = toolbox.evaluate(individual) #パレート曲線上の個体(つまり、良い結果の個体)をhofという変数に格納 hof = tools.ParetoFront() #今回は最も単純なSimple GAという進化戦略を採用 algorithms.eaSimple(pop, toolbox, cxpb=CXPB, mutpb=MUTPB, ngen=NGEN, halloffame=hof) #最終的な集団(pop)からベストな個体を1体選出する関数 best_ind = tools.selBest(pop, 1)[0] #結果表示 print("最も良い個体は %sで、そのときの目的関数の値は %s" % (best_ind, best_ind.fitness.values))

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

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

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

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

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

guest

回答1

0

ベストアンサー

突然変異の範囲指定をミスってます

投稿2022/09/27 10:06

ozwk

総合スコア13521

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

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

r_2000

2022/09/27 10:18

ありがとうございます!! 本当に助かりました。。 初心者なもので、全然気づけていませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問