2021-10-17 5.13

class Q_learning():
    def __init__(self, env, num_episodes, discount=1.0, alpha=0.5, epsilon=0.1, n_bins=10):
        self.nA = env.action_space.n  # 动作空间数
        self.nS = env.observation_space.shape[0]  # 状态空间数
        self.env = env  # 环境
        self.num_episodes = num_episodes  # 迭代次数
        self.epsilon = epsilon  # 贪婪策略系数
        self.discount = discount  # 折扣因子
        self.alpha = alpha  # 时间差分误差系数,即学习率
        self.Q = defaultdict(lambda: np.zeros(self.nA))  # 动作值函数

    def __epislon_greedy_policy(self, epsilon, nA):  # 贪婪策略
        def policy(state):
            A = np.ones(nA, dtype=float) * epsilon / nA
            best_action = np.argmax(self.Q[state])
            A[best_action] += (1 - epsilon)
            return A
        return policy

    def __next_action(self, prob):  # 动作选择函数
        return np.random.choice(np.arange(len(prob)), p=prob)

    def sarsa(self):
        policy = self.__epislon_greedy_policy(self.epsilon, self.nA)  # 定义策略
        sumlist = []
        for i_episode in range(self.num_episodes):  # 迭代经验策略
            step = 0
            state__ = self.env.reset()  # 初始化状态
            state = self.__get_bins_states(state__)  # 状态重新赋值(可简化状态空间,将连续状态近似为离散情况)
            while(True):
                prob_actions = policy(state)  # 获得动作选择概率
                action = self.__next_action(prob_actions)  # 获得动作
                next_state__, reward, done, info = env.step(action)  # 获得下一状态,奖励,done等
                next_state = self.__get_bins_states(next_state__)
                # 时间差分更新
                best_next_action = np.argmax(self.Q[next_state])  # next_state最优动作值
                td_target = reward + self.discount * self.Q[next_state][best_next_action]
                td_delta = td_target - self.Q[state][action]
                self.Q[state][action] += self.alpha * td_delta
                if done:
                    reward = -200
                    break
                else:
                    state = next_state
        return self.Q
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt 5.13 是一种跨平台的开发工具包,其中包含了许多用于创建高性能应用程序的功能。Qt 5.13 版本支持在 Android 平台上开发应用程序。 使用 Qt 5.13 开发 Android 应用程序具有许多优势。首先,Qt 提供了一种便捷的方式来编写跨平台的代码,这意味着可以减少代码重复,并节省开发时间和精力。开发人员只需编写一次代码,即可在多个平台上运行应用程序,包括 Android 平台。 其次,Qt 提供了许多丰富的组件和工具,用于在 Android 平台上创建漂亮和现代的用户界面。Qt 提供了一套丰富的 UI 控件,可以轻松地构建用户友好的应用程序。此外,Qt 还支持使用 QML(一种用于构建用户界面的声明性语言)来开发应用程序,这使得界面的设计更加灵活和易于实现。 Qt 5.13 还提供了专门用于 Android 平台的一些功能。开发人员可以使用 Qt 提供的 Android 特定模块,如 Qt Android Extras,来调用 Android 平台上的特定功能和 API。此外,Qt 5.13 还支持使用 Qt Creator 进行 Android 应用程序的调试和部署,使得开发过程更加便捷。 总之,Qt 5.13 在 Android 平台上具有强大的功能和便捷的开发工具,使开发人员能够快速而高效地开发出高性能和现代化的应用程序。无论是个人开发者还是企业开发团队,都可以受益于使用 Qt 5.13 进行 Android 应用程序的开发。 ### 回答2: Qt5.13是一种跨平台的开发工具包,可用于开发各种应用程序,包括移动应用程序。在Android上使用Qt5.13,可以轻松地将Qt的跨平台能力扩展到Android设备上。 Qt5.13 on Android提供了一种快速,高效且灵活的方式来开发Android应用程序。它不仅可以利用Qt的跨平台能力,还可以利用Android平台的特定功能和资源。 使用Qt5.13 on Android,可以使用Qt Quick框架构建令人印象深刻的用户界面,它包括丰富的控件和动画效果。同时,Qt还提供了许多内置的模块,可以轻松地处理网络通信、数据库、图像处理等任务。 Qt5.13 on Android还集成了Qt for Android插件,该插件为开发人员提供了许多与Android平台相关的功能和接口。这使得开发人员可以轻松地访问设备的硬件功能,如摄像头、传感器等。 此外,Qt5.13还支持使用C++和QML两种语言进行开发。开发人员可以根据自己的喜好和项目需求进行选择。无论是使用C++还是QML,Qt5.13都提供了丰富的API和文档,以帮助开发人员更快地构建应用程序。 总之,Qt5.13 on Android是一个功能强大的工具,可用于快速开发高质量的Android应用程序。它结合了Qt的跨平台能力和Android平台的特定功能,为开发人员提供了一种简单而高效的方式来构建各种类型的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值