一、Python复习
1、a = input(“提示信息”)
这里Iinput接收的变量类型为字符串,所以如果要得到其他类型的变量应该进行类型转化,如int(),float()等。
2、Python列表的初始化方法:
#python列表的初始化的方式
#方法一:使用for循环和append()函数
arr = []
for i in range(1000):
arr.append(0)
#方法二:使用带计数器变量的while循环和append()
arr = []
i = 0
while(i<1000):
arr.append(0)
#方法三:使用列表推导
arr = [0 for i in range(1000)]
#方法四:使用*运算符
arr = [0]*1000
range函数:一般与for循环联合使用,一般为:
range(start,stop,step = 1)
例如:for i in range(2,8,2)
print(i)
结果为:2 4 6,注意最后的stop的数字不会进行输出。
使用列表推导的方式初始化列表,列表推导有两种形式:
(1)、循环模式:[变量(加工后的变量) for 变量 in iterable]
例如:将10以内所有整数写入列表
print([i for i in range(1,11)])
#输出结果:
[1,2,3,4,5,6,7,8,9,10]
(2)、筛选模式:[变量(加工后的变量)for 变量 in iterable if 条件]
例如:构建一个列表,要求元素大于4
print([i for i in range(11) if i>4])
#输出结果
[5,6,7,8,9,10]
3、字符串的初始化(format)
示例:
print('{0:>6 .2f}'.format(number),end = " ")
1、print(’{指示是对第几个参数进行格式化}’.format(参数1,参数2,……))。冒号之后编写具体的格式,上述例子的意思是右对齐,宽度是6,浮点数保留两位小数。
2、print函数有参数end,其默认的值是end = “\n”,所以在使用print的时候会自动进行换行,但是将end的值改变,改为end = " ",等,就可以在同一行进行连续输出。
4、global关键字
当在函数或者其他部分要修改全局变量的时候要用global申明
二、强化学习
使用动规化的方法对策略进行评价
具体见:知乎大神强化学习实践
代码:
#动态规化解决MDP问题
#方法是进行价值迭代
#一共拆分为13个部分
#一、基础部分
#1状态
states = [i for i in range(0,16)]
#2价值
values = [0 for i in range(0,16)]
#3动作集合
actions = ["n","e","s","w"]
#4动作导致的状态转移
s_actions = {"n":-4,"e":1,"s":4,"w":-1}
#5衰减因子
gamma = 1.00
#6在当前状态和动作下一个状态和动作
def nextState(s,a):
nextstate = s
#边界情况
if (s<4 and a == "n") or ((s+1)%4==0 and a == "e") or \
(s>11 and a == "s") or (s%4==0 and a == "w"):
pass
else:
dis = s_actions[a]
nextstate += dis
return nextstate
#7获得即时奖励
def im_reward(s):
return 0 if s in [0,15] else -1
#8判断是否为终止状态
def isTerminalState(s):
return s in [0,15]
#9得到所有可能的后继状态
def get_successors(s):
successors = []
if isTerminalState(s):
return successors
else:
for a in actions:
successors.append(nextState(s,a))
return successors
#10对单个状态的状态函数的更新
def updateValue(s):
successors = get_successors(s)
newValue = 0
num = 4
reward = im_reward(s)
for i in successors:
newValue += 1.00/num*(reward+values[i])
#print(i)
return newValue
#11进行一次迭代,即进行全表的更新,使用的是异步更新,即当前的更新是基于上次迭代的结果
def oneIteration():
newValues = [0 for i in range(0,16)]
#print(newValues)
for s in states:
newValues[s] = updateValue(s)
#print(s)
global values
values = newValues
#12输出当前的状态价值表
def printValues():
for s in states:
print('{0:>6.2f}'.format(values[s]),end = " ")
if (s+1)%4 == 0:
print(" ")
print()
#13main函数
def main():
max_iterate = 160
cur_iterate = 0
while cur_iterate < max_iterate:
oneIteration()
cur_iterate += 1
printValues()
if __name__ == '__main__':
main()
男神注视着你