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

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

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

解決済

1回答

643閲覧

invalid syntax の解決方法について

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2020/05/05 13:35

前提・実現したいこと

強化学習に関するプログラムを作成中です。
https://github.com/aimacode/aima-python
このページにあるmdp.pyをコピペ、
または
https://qiita.com/Hironsan/items/56f6c0b2f4cfd28dd906
をコピペさせてもらっています。

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

numpy上にエラーがあるように思いましたが、異常はありませんでした。
解決方法をご存知の方がいらっしゃれば教えてください!

Traceback (most recent call last): File "qlearning.py", line 6, in <module> from utils import vector_add, orientations, turn_right, turn_left File "/Users/Owner/Projects/qlearning/utils.py", line 647 yield from subexpressions(arg) ^ SyntaxError: invalid syntax

該当のソースコード

python

1import random 2from collections import defaultdict 3 4import numpy as np 5 6from utils import vector_add, orientations, turn_right, turn_left 7 8 9class MDP : 10 11 def __init__(self, init, actlist, terminals, gamma=.9): 12 self.init = init 13 self.actlist = actlist 14 self.terminals = terminals 15 if not (0 <= gamma< 1): 16 raise ValueError("An MDP must have 0 <= gamma < 1") 17 self.gamma = gamma 18 self.states = set() 19 self.reward = {} 20 21 def R(self, state): 22 return self.reward[state] 23 24 def T(self, state, action) : 25 raise NotImplementedError 26 27 def actions(self, state): 28 if state in self.terminals: 29 return [None] 30 else: 31 return self.actlist 32 33 34class GridMDP(MDP): 35 36 def __init__(self, grid, terminals, init= (0, 0), gamma= .9): 37 grid.reverse() 38 MDP.__init__(self, init, actlist=actlist, 39 terminals= terminals, gamma= gamma) 40 self.grid = grid 41 self.rows = len(grid) 42 self.cols = len(grid[0]) 43 for x in range(self.cols): 44 for y in range(self.rows): 45 self.reward[x, y] = grid[y][x] 46 if grid[y][x] is not None: 47 self.states.add((x, y)) 48 49 def T(self, state, action): 50 if action is None: 51 return [(0.0, state)] 52 else: 53 return [(0.8, self.go(state, action)), 54 (0.1, self.go(state, turn_right(action))), 55 (0.1, self.go(state, turn_left(action)))] 56 57 def go(self, state, direction): 58 state1 = vector_add(state, direction) 59 return state1 if state1 in self.states else state 60 61 def to_grid(self, mapping): 62 return list(reversed([[mapping.get((x, y), None) 63 for x in range(self.cols)] 64 for y in range(self.rows)])) 65 66 def to_arrows(self, policy): 67 chars = {(1, 0): '>', (0, 1): '^', (-1, 0): '<', (0, -1): 'v', None: '.'} 68 return self.to_grid({s: chars[a] for (s, a) in policy.items()}) 69 70GridMDP([[-0.04, -0.04, -0.04, +1], 71 [-0.04, None, -0.04, -1], 72 [-0.04, -0.04, -0.04, -0.04]], 73 terminals=[(3, 2), (3, 1)]) 74 75 76def value_iteration(mdp, epsilon= 0.001): 77 U1 = {s: 0 for s in mdp.states} 78 R, T, gamma = mdp.R, mdp.T, mdp.gamma 79 while True: 80 U = U1.copy() 81 delta = 0 82 for s in mdp.states: 83 U1[s] = R(s) + gamma* max([sum([p * U[s1] for (p, s1) in T(s, a)]) 84 for a in mdp.actions(s)]) 85 delta = max(delta, abs(U1[s] - U[s])) 86 if delta<epsilon* (1 - gamma) / gamma: 87 return U 88 89 90def best_policy(mdp, U) : 91 pi = {} 92 for s in mdp.states: 93 pi[s] = argmax(mdp.actions(s), key= lambda a: expected_utility(a, s, U, mdp)) 94 return pi 95 96 97def expected_utility(a, s, U, mdp) : 98 return sum([p * U[s1] for (p, s1) in mdp.T(s, a)]) 99 100 101sequential_decision_environment = GridMDP([[-0.04, -0.04, -0.04, +1], 102 [-0.04, None, -0.04, -1], 103 [-0.04, -0.04, -0.04, -0.04]], 104 terminals=[(3, 2), (3, 1)]) 105 106pi = best_policy(sequential_decision_environment, value_iteration(sequential_decision_environment, .01)) 107 108print_table(sequential_decision_environment.to_arrows(pi)) 109 110 111 112 113 114 115 116 117 118--utils.py--該当箇所 119 120def subexpressions(x): 121 """Yield the subexpressions of an Expression (including x itself).""" 122 yield x 123 if isinstance(x, Expr): 124 for arg in x.args: 125 yield from subexpressions(arg) 126

試したこと

numpyのutils.pyの該当コード箇所に異常はありませんでした。

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

pc:macbookair13
言語:python2.7

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python2とPython3はかなり違います。

Python3で実行しましょう。

投稿2020/05/05 13:45

otn

総合スコア85901

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

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

退会済みユーザー

退会済みユーザー

2020/05/05 13:46

ありがとうございます!試しにやってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問