转移矩阵

#100. 矩阵乘法

天涯浪子 提交于 2020-01-03 01:57:36
题面 代码 没什么好多讲的, \(OI\) 中基本记住定义就行了,矩阵一般也是正方形。 图片摘自百度: 矩阵快速幂(类比数的快速幂)可以优化一些递推的问题: \(0.\) 特判最小的几项? \(1.\) 确定矩阵的大小,转移中用到了什么东西,尽可能小一些,优化常数。然后用矩阵表示出初始状态或直接是单位矩阵。 \(2.\) 构造转移矩阵,大小相同,使得两个矩阵相乘后能转移到后一个状态且不影响相对性。 \(O(npm)\) 来源: https://www.cnblogs.com/May-2nd/p/11681150.html

2019年8月19日矩阵

浪子不回头ぞ 提交于 2019-12-23 19:00:27
矩阵 相乘最重要的方法是一般矩阵 乘积 。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。 定义 设 A 为 的矩阵, B 为 的矩阵,那么称 的矩阵 C 为矩阵 A 与 B 的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为: 如下所示: 注意事项 当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 基本性质 乘法结合律: ( AB ) C = A ( BC ). [2] 乘法左分配律:( A + B ) C = AC + BC [2] 乘法右分配律: C ( A + B )= CA + CB [2] 对数乘的结合性 k ( AB )=( kA ) B = A ( kB ). 转置 ( AB ) T= B T A T. 矩阵乘法一般不满足交换律 [3] 。 乘积-哈达马积( hadamard product) 矩阵 与 矩阵 的Hadamard积记为 。其元素定义为两个矩阵对应元素的乘积 的 m×n 矩阵 [2] 。例如,

马尔可夫链蒙特卡罗算法(MCMC)-(二)

99封情书 提交于 2019-12-22 00:38:02
在 马尔可夫链蒙特卡罗算法(MCMC)-(一) 中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或者离散求和的方法,但是这个方法需要得到对应的概率分布的样本集,而想得到这样的样本集很困难。因此我们需要本篇讲到的马尔科夫链来帮忙。 一.马尔可夫链概述 马尔科夫链定义本身比较简单,它假设某一时刻状态转移的概率只依赖于它的前一个状态。举个形象的比喻,假如每天的天气是一个状态的话,那个今天是不是晴天只依赖于昨天的天气,而和前天的天气没有任何关系。当然这么说可能有些武断,但是这样做可以大大简化模型的复杂度,因此马尔科夫链在很多时间序列模型中得到广泛的应用,比如循环神经网络RNN,隐式马尔科夫模型HMM等,当然MCMC也需要它。 如果用精确的数学定义来描述,则假设我们的序列状态是...Xt−2,Xt−1,Xt,Xt+1...,那么我们的在时刻Xt+1的状态的条件概率仅仅依赖于时刻Xt,即: 既然某一时刻状态转移的概率只依赖于它的前一个状态,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了。我们来看看下图这个马尔科夫链模型的具体的例子(来源于维基百科)。 这个马尔科夫链是表示股市模型的,共有三种状态:牛市(Bull market), 熊市(Bear market)和横盘(Stagnant market)。每一个状态都以一定的概率转化到下一个状态。比如

矩阵优化DP类问题应用向小结

梦想与她 提交于 2019-11-30 12:57:45
前言 本篇强调 应用 ,矩阵的基本知识有所省略(也许会写篇基础向。。。)。 思想及原理 为什么Oier们能够想到用矩阵来加速DP呢?做了一些DP题之后,我们会发现,有时候DP两两状态之间的转移是 定向 的,也就是说,在DP转移的所有阶段中,对于一个固定的状态 \(f_i\) ,它只能转移到一个不变的状态集合 \(\{F_i\}\) 中,我们转移的方向不会因为阶段的改变而改变。 好,提炼关键信息,我们需要状态的转移,且状态转移的方式不变(不排除某些毒瘤题),并且对于大多数转移,无非就是各个状态之间的带系数运算。当需要转移的次数过多并且状态数较小时,我们就可以考虑用矩阵快速幂来优化转移。 矩阵快速幂的原理及实现就当前置芝士了吧,略略略~ 当然,如果你需要用矩阵来优化DP,首先你还是得先推出朴素的DP式子,然后观察DP式子各个状态之间的关系,然后构造一个符合状态转移的矩阵,然后就可以快速幂了。 常用套路 模板化 ,比如用struct封装matrix;个人倾向于把构造的转移矩阵放左边XD。 猜想矩阵加速 ,对着数据范围YY应该是每个oier都应有的能力。。。 自定义矩阵乘法 ,我们需要知道对于特定的状态转移,只要它满足 广义矩阵乘法 的基本性质,我们同样可以用矩阵来加速,下面有道例题就是这样。 预处理掉不合法的转移 ,蒟蒻做的矩阵优化题有一半都与状压有关,,

从RL角度看MDP过程

百般思念 提交于 2019-11-29 08:19:24
Markov Reward Processes 任何部分可观测问题都可以转化为马尔可夫过程 MDP化 Markov Property 状态转移概率 -> 矩阵 告诉我们在当前状态下,有多大概率到达哪个state a tuple(S,P) non-stationary MDP 不稳定的动态过程 如概率变化 Reward a tuple (S, P, R, γ) return G 强化学习的目标 γ:折扣因子 所有的returns都是有限的 value function v(s) -> 长期的reward 期望值 Bellman方程 矩阵表示: v = R + γPv (P为状态转移概率矩阵) -> 线性方程 可求解v Action空间 a tuple (S, A, P, R, γ) A:有限action的集合 policy:完全定义agent的行为 -> 决策概率 vs 环境的状态转移概率 v_Π(s):基于当前policy下的value function 在s状态下的一个action可能到达s1,也可能到达s2 离开一个state时,采取不同的action可能得到不同的reward “你采取一个action,环境就给你掷一个骰子,告诉你在哪个state结束” Best policy v_*(s) = max_Π v_Π(s) v_Π(s) 是在policy下 各个action对应的

马尔科夫状态转移矩阵

牧云@^-^@ 提交于 2019-11-28 07:29:34
  状态转移矩阵是俄国数学家马尔科夫提出的,他在20世纪初发现:一个系统的某些因素在转移过程中,第n次结果只受第n-1的结果影响,即只与上一时刻所处状态有关,而与过去状态无关。 在马尔科夫分析中,引入状态转移这个概念。所谓状态是指客观事物可能出现或存在的状态;状态转移是指客观事物由一种状态转移到另一种状态   在状态转移矩阵中,矩阵各元素表示状态转移的概率,并且各行元素之和等于1,其现实意义是,各个状态的百分比总和为1   假定某大学有1万学生,每人每月用1支牙膏,并且只使用“中华”牙膏与“黑妹”牙膏两者之一。根据本月(12月)调查,有3000人使用黑妹牙膏,7000人使用中华牙膏。又据调查,使用黑妹牙膏的3000人中,有60%的人下月将继续使用黑妹牙膏,40%的人将改用中华牙膏; 使用中华牙膏的7000人中, 有70%的人下月将继续使用中华牙膏,30%的人将改用黑妹牙膏。据此,可以得到以下转移矩阵      通过转移矩阵与初始化状态,即可预测之后月份两种牙膏的市场占比   代码实现如下:    import matplotlib.pyplot as plt import numpy as np def markov(): current_status = np.array([3000, 7000]) transfer_matrix = np.array([[0.6, 0.4],

2019年8月19日矩阵

自闭症网瘾萝莉.ら 提交于 2019-11-27 21:07:07
矩阵 相乘最重要的方法是一般矩阵 乘积 。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。 定义 设 A 为 的矩阵, B 为 的矩阵,那么称 的矩阵 C 为矩阵 A 与 B 的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为: 如下所示: 注意事项 当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 基本性质 乘法结合律: ( AB ) C = A ( BC ). [2] 乘法左分配律:( A + B ) C = AC + BC [2] 乘法右分配律: C ( A + B )= CA + CB [2] 对数乘的结合性 k ( AB )=( kA ) B = A ( kB ). 转置 ( AB ) T= B T A T. 矩阵乘法一般不满足交换律 [3] 。 乘积-哈达马积( hadamard product) 矩阵 与 矩阵 的Hadamard积记为 。其元素定义为两个矩阵对应元素的乘积 的 m×n 矩阵 [2] 。例如,

【学习笔记】动态规划—各种 DP 优化

雨燕双飞 提交于 2019-11-26 09:20:18
【学习笔记】动态规划—各种 DP 优化 【大前言】 个人认为贪心, \(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT)。这篇文章也是花了我差不多一个月时间才全部完成。 【进入正题】 用动态规划解决问题具有 空间耗费大 、 时间效率高 的特点,但也会有时间效率不能满足要求的时候,如果算法有可以优化的余地,就可以考虑时间效率的优化。 【DP 时间复杂度的分析】 \(DP\) 高时间效率的关键在于它减少了“ 冗余 ”,即不必要的计算或重复计算部分,算法的冗余程度是决定算法效率的关键。而动态规划就是在将问题规模不断缩小的同时,记录已经求解过的子问题的解,充分利用求解结果,避免了反复求解同一子问题的现象,从而减少“ 冗余 ”。 但是,一个动态规划问题很难做到完全消除“ 冗余 ”。 下面给出动态规划时间复杂度的决定因素: 时间复杂度 \(=\) 状态总数 \(×\) 每个状态转移的状态数 \(×\) 每次状态转移的时间 【DP 优化思路】 一:减少状态总数 \((1).\) 改进状态表示 \((2).\) 选择适当的规划方向 二:减少每个状态转移的状态数 \((1).\) 四边形不等式和决策的单调性 \((2).\) 决策量的优化 \((3).\) 合理组织状态 \((4).\) 细化状态转移 三:减少状态转移的时间 \((1).\) 减少决策时间 \(