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

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

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

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python 3.x

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

機械学習

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

Python

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

Q&A

2回答

1374閲覧

Q学習のプログラム エラーがでてしまいます

takumii

総合スコア0

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python 3.x

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/05/22 04:59

編集2020/05/22 09:34

前提・実現したいこと

PythonでQ学習のプログラムを書いております。
以下のようなコードを書いたところ、エラーメッセージが出ました。

"s"が定義されていないとのことですが、どこが問題で、どう改善すべきか分からないので教えて頂きたいです。

##プログラムのコード

Python

1 2import numpy as np 3import pandas as pd 4import random 5 6#条件の設定 7S = np.array(list(range(0,820)))#状態(1+9+9^2+9^3) #0~819までの行列 8A = np.array([0,1,2,3,4,5,6,7,8])#行動(活動を行うメッシュ) 9risk0 = np.array([0,3,0,1,4,1,6,0,1])#初期状態の件数 10#活動効果値 11r0 = 2*np.array([1,0.5,0.25,0.5,0.5,0.25,0.25,0.25,0.25]) 12r1 = 2*np.array([0.5,1,0.5,0.5,0.5,0.5,0.25,0.25,0.25]) 13r2 = 2*np.array([0.25,0.5,1,0.25,0.5,0.5,0.25,0.25,0.25]) 14r3 = 2*np.array([0.5,0.5,0.25,1,0.5,0.25,0.5,0.5,0.25]) 15r4 = 2*np.array([0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5]) 16r5 = 2*np.array([0.25,0.5,0.5,0.25,0.5,1,0.25,0.5,0.5]) 17r6 = 2*np.array([0.25,0.25,0.25,0.5,0.5,0.25,1,0.5,0.25]) 18r7 = 2*np.array([0.25,0.25,0.25,0.5,0.5,0.5,0.5,1,0.5]) 19r8 = 2*np.array([0.25,0.25,0.25,0.25,0.5,0.5,0.25,0.5,1]) 20#次期の状態(S1=s11+s12) 21s11 = np.array(list(range(1,820))).reshape(91,9) 22s12 = np.full((730, 9), None) 23S1 = np.concatenate([s11, s12]) 24 25#学習方法(ハイパーパラメータ)の設定 26alpha = 0.01#学習率 27gamma = 0.8#割引率 28n = 200000#学習回数 29 30#データフレーム作成用リストの作成 31list1 = [[] for _ in range(10)] #変数を"_"と置いた 32for num in range(9): 33 list1[0].append(f"mesh{num+1}" ) 34 35#行動価値関数テーブルの初期化 36Q = np.zeros(S1.shape) 37 38#行動(活動実施メッシュ)に応じて報酬(効果値)を選択 39def ziko(a): 40 if a == 0: 41 return r0 42 elif a == 1: 43 return r1 44 elif a == 2: 45 return r2 46 elif a == 3: 47 return r3 48 elif a == 4: 49 return r4 50 elif a == 5: 51 return r5 52 elif a == 6: 53 return r6 54 elif a == 7: 55 return r7 56 else : 57 return r8 58 59#Q学習のメイン関数 60def q_learning(): 61 s = S[0]#初期状態 62 rt = risk0#初期状態での件数 63 a = random.randrange(9)#活動を行うメッシュの選択 64 while S1[s,a] != None: #S1は(91+730=)821行9列の行列 65 a = random.randrange(9)#活動を行うメッシュの選択 66 ra = ziko(a)#行動に応じた効果値 67 rt_1 = rt - ra#各メッシュにおける件数の減少量 68 rt__1 = np.maximum(0, rt_1)#件数が負の値にならないように処理 69 R = np.sum(rt - rt__1)#報酬(全メッシュにおける件数減少量の総和) 70 max_q = max(s1max())#次期状態S1でのQ(行動価値関数)の最大値   #s1maxは下で定義してる 71 td = R + gamma * max_q - Q[s,a]#TD誤差 72 Q[s,a] += alpha * td#Q値(行動価値関数)の更新 73 s = S1[s,a]#次期状態 74 rt = rt__1#件数の更新 75 76 #データフレーム作成用リストにデータを追加 77 for j in range(9): 78 list1[j+1].append(Q[0,j]) 79 80 81#次期状態S1でのQ(行動価値関数)のリスト作成 82def s1max(): 83 listS1 = [] 84 for i in range(9): 85 listS1.append(Q[S1[s,a],i]) 86 return listS1 87 88#メイン関数の実行 89for k in range(n): 90 q_learning() 91 print(k) 92 93#Q値データのリストをデータフレームに変換 94df = pd.DataFrame(list1[1:]).T 95df.columns=list1[0] 96

発生している問題・エラーメッセージ

NameError: name 's' is not defined

該当のソースコード

Python 3.8.2

試したこと

プログラミングを習いたてでどう改善すればよいかわからないのでお願い致します。 

補足情報(FW/ツールのバージョンなど)

次期状態S1でのQ(行動価値関数)のリスト作成内
下から11行目の
listS1.append(Q[S1[s,a],i])
でエラーが出ました。

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

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

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

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

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

meg_

2020/05/22 09:27

コードは「コードの挿入」で記入してください。(インデントがなくなってコードが読めません)
takumii

2020/05/22 09:35

ご指摘ありがとうございます。ただいまコードを挿入しました。
meg_

2020/05/22 09:53

”"s"が定義されていないとのこと” ← おそらくaも未定義なのでは? 「listS1.append(Q[S1[s,a],i])」ですが、S1の添え字 s,aが何なのか定義しないといけません。
guest

回答2

0

定義し直したらエラーが治りました。
お答え頂きありがとうございました。

投稿2020/05/23 04:28

takumii

総合スコア0

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

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

0

def q_learning()内にs1max()を入れて定義したらエラーがなくなりました。お答えいただきありがとうございます。

投稿2020/05/23 04:25

takumii

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問