4月14学习内容总结

一、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()


男神注视着你

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值