- 博客(122)
- 收藏
- 关注
原创 强化学习入门-7(DDPG)
注意这里Critic网络输出的是QsaQ(s, a)Qsa,因此输入层节点个数为状态与动作维度之和nn.ReLU(),nn.ReLU(),nn.Tanh(),nn.ReLU(),nn.ReLU(),
2025-12-14 14:41:55
803
原创 强化学习入门-5(MAPPO)
本环境是PettingZoo库中 MPE (Multi-Agent Particle Environments) 系列的一个经典多智能体协作环境。
2025-12-09 22:22:12
793
原创 强化学习入门-3(AC)
本文介绍了使用Actor-Critic(AC)算法解决CartPole-v1控制问题的实现过程。AC算法包含Actor和Critic两个网络:Actor网络输出动作概率分布,Critic网络评估状态价值。通过TD误差引导Actor网络更新,利用TD目标更新Critic网络。实验结果表明,该方法能有效学习控制策略,训练完成后平均成绩可以接近500。文章详细说明了网络结构、训练流程和关键实现细节,包括概率计算中的数值稳定处理等技巧。
2025-10-16 21:05:35
630
原创 强化学习入门-2(Dueling DQN)
这里VAVAVA网络拥有两层共享的特征提取层,然后连接到价值网络和优势网络。价值网络通过状态sss预测得到从状态sss出发,能获得的价值期望,即选择每个动作aaa的概率乘上对应的QsaQ(s,a)Qsa优势网络则表明选择当前动作所能获得的价值对比选择所有动作的平均值有多大的优势,即qsa−∑ai∈actionsqsaiactionsdimdim}qsa−actionsdimai∈。
2025-10-16 19:52:26
924
原创 强化学习入门-1-CartPole-v1(DQN)
这里QQQ网络仅为一个替代QQQ函数的预测神经网络,对于状态sss预测所有的QsaQ(s, a)Qsa用于存储和重复利用历史交互数据的数据结构。它把智能体与环境交互产生的经验元组(通常形如sars′donesars′done)暂存起来,并在后续训练中以随机小批量的形式反复抽取,用于更新策略或价值函数。DQN算法的核心就是使用神经网络替代了Q函数,用于预测QsaQ(s,a)Qsa。
2025-10-16 19:50:43
745
原创 无监督学习,推荐系统以及强化学习笔记
前言:代价函数(Cost function)/失真函数(Distortion function):随机初始化需要选择一个合适的KKK值时,往往会尝试采用多个kkk的取值,并用于训练模型后绘制出ELBO(elbow method)将代价函数作为聚类数量的函数进行观察,看是否有一个弯折点(如下左图,即类似手肘的弯曲,开始下降较快,经过某个点后变缓,这个点就是弯折点)注: 算法使用较少,如下右图,实际上很多情况下函数变化是比较平缓,那就会导致最后选择的KKK就是尝试中最大的KKK。在后续用途中的表现来评估先对模型
2025-09-08 17:23:45
943
原创 深度学习笔记
一个接收若干信息,并产生若干结果的一个基本单位。神经网络由若干层构成,每层可以包含若干节点,同时从上一层接收信息,并将结果传输给下一层对于朴素的神经网络,需要去考虑每一层怎么设计,每个神经元需要哪些信息,并产生什么样的结果,这样子从网络搭建上来说是很困难的。因此,可以不用限制神经元接收的数据,让每一层的神经元均连接上一层的所有神经元(或输入层节点)。即,将输入层数据是为一个特征向量x⃗\vec{x}x,这个向量将被传输到隐藏层的神经元,然后计算出几个激活值(会作为一个新的向量传输到下一层),最后传输到输出层
2025-09-03 13:14:30
944
原创 机器学习笔记
核心是用一条直线(或高维空间中的平面) 来拟合数据,从而预测连续数值结果。从简单的角度思考,学习率实际上就意味着每次向最低走移动的步长,不难想到如果学习率过大,那么可能导致模型无法拟合,而学习率过小,又会导致模型训练效率降低。gz11e−z0gz1gz1e−z10gz1其中,zfw⃗bx⃗zfwbx此时,fw⃗bx⃗Py1∣x⃗;wb。
2025-08-25 14:36:00
1144
原创 CF1011(Div.2)A~D
给出一个字符串’S’,你可以对该字符串进行至少kijsisj问,能否使得给出的字符串小于该字符串反转之后的结果.
2025-03-23 20:22:03
844
原创 #790 div4
G#include<bits/stdc++.h>#include <ostream>using namespace std;typedef long long ll;#define endl '\n'typedef pair<int, int> PII;#define debug() cout.flush()#define for0(i, a) for (int i = 0; i < a; ++i)#define REP(i, a, b) fo
2022-05-11 19:20:00
195
原创 复杂密码生成器
import java.util.*;public class Main { private static final String []range = new String[5]; private static int[] sum = new int[10]; private static void init() { range[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; range[1] = "abcdefghijkl
2022-05-01 16:55:11
1342
原创 传递闭包模板
Tips:用于解决A<B,B<C等不等式传递问题(也可以用拓扑排序解决)#include<bits/stdc++.h>#include <ostream>using namespace std;typedef long long ll;//#define endl '\n'typedef pair<int, int> PII;#define debug() cout.flush()#define for0(i, a) for (int i =
2022-04-29 15:16:22
193
原创 洛谷P2590[ZJOI2008]树的统计(树链剖分)
题目链接:点击跳转代码如下:#include<bits/stdc++.h>#include <ostream>using namespace std;typedef long long ll;#define endl '\n'typedef pair<int, int> PII;#define debug() cout.flush()#define for0(i, a) for (int i = 0; i < a; ++i)#define RE
2022-04-13 17:33:48
249
原创 CF 1661D Progressions Covering(差分+线段树)
题目链接:点击跳转题意: 有两个长度相等的序列a,b,a序列开始全为0,b序列有题目给出,每次可以选择a中一段长度为k的序列,将该范围的数依次加上1,2,3…k,问最少多少次操作,能使对于任意i,使得ai >= bi。思路: 最后一位只能够使用k来消除,而用k消除也恰好是最快的,那么可以从后往前开始处理,但是要怎么更新序列呢,可以使用差分来给修改的每位都加上i(操作次数),用线段树来维护差分序列,求出的前缀和就是该点的值,从后往前处理一遍即可。代码如下:#include<bits/std
2022-04-12 17:27:22
629
原创 CF 1661C Water the Trees(思维)
题目链接:点击跳转题意: 公园里有N棵树,在奇数天浇水可以使树的高度+1,偶数天+2(每天只能浇一次水,可以选择不浇),问最少需要多少天,能使得所有树的高度一致。思路:如果当前树与最高的那棵树的高度差为奇数,那么就意味着该树至少要占用一次奇数天(只能多,不能少),而其他的均可通过偶数天完成。若偶数天如果大于奇数天,那么可以通过将一个偶数天拆成2个奇数天来减少时间。为保持奇数偶数尽量相等(使天数尽可能少),可以将偶数多出的天数的1/3转化为奇数天,如果存在余数,若余数为1,如果转化,则需要两个1天
2022-04-12 13:04:42
774
原创 CF 1665C Tree Infection(模拟 + 贪心)
题目链接: 点击跳转题意: 给你一棵树,每次你可以依次进行以下操作,1.对于一个节点,如果该节点有至少一个子树被涂色(可以理解为图着色,原译不是涂色)了,那么你可以任选他的子树上的另一个节点使其被传染(可以对多个节点操作,但每个节点的子树在一次操作只能传染一次),2.任选一个节点,使其被涂色(可以选1中操作过的子树中的节点),问最少几次操作能使整棵树都被涂色。思路: 开始想,从大的数量开始涂色,然后每棵更小的子树均可以对该子树提供传染的机会,但是这样子求出的值并不是最小的。错误代码:#include
2022-04-09 20:49:28
1023
5
原创 CF 1656D K-good(思维)
题目链接:点击跳转题意: 给你一个数n(2 <= n <= 1e18), 问n是不是k-good数(及分成k个数,k个数的和为n,这k个数取模k的结果均不相同),如果存在多个k成立,输出任意一个即可思路:如果一个数能被拆成一个奇数和一个偶数的积(奇数不能为1),该数就是k-good数。取奇数个,如40 = 5 * 8, 取中间数为8,剩余的数可以依次改为 6 7 9 10。 取偶数个, 如102 = 6 * 17, 则中间数为 8 9,两边依次为3 4 5 6 7 10 11 12 1
2022-03-25 20:17:27
917
3
原创 CF 1654E Arithmetic Operations(枚举)
题目链接:点击跳转题意: 给出一个长度为n的序列a,问最少修改几个数字,能使得序列变成等差序列思路:枚举公差(我取了-300~300),用数组记录每个数字减去位置乘公差的值出现的次数,出现最多的次数就是在枚举范围内的最优解。但是这个枚举不能太大(完整枚举2e5 * 1e5会超时),但是只枚举小范围不能保证正确,如样例3最优解的公差为-20000,那么我们可以遍历数据,取数据中的数的差值作为公差(注意公差要为整数),同样记录,并更新最优解(注意:因为记录的差为2个数的差,但后续遍历没有加上
2022-03-21 21:26:11
731
原创 CF 1654C Alice and the Cake(模拟)
题目链接:点击跳转题意: 爱丽丝有一块蛋糕,她要把蛋糕切成n份,每一次操作,她会选择一块蛋糕(另大小为A),将其切成两半,两块大小分别为A / 2, (A + 1) / 2,及分成整数的两半,如果原大小为奇数,则一块会大1,现在给出一个序列,问有没有可能为一块蛋糕经过n - 1次操作后得到的思路: 由每一块拼回去会因为有不同的拼接操作无法判断,可以逆向思维,模拟一块完整的蛋糕切成现在的大小序列,通过维护两个最大堆,如果模拟的堆顶小于该序列,说明无法切出这个序列,输出NO,如果等于,说明序列中的一个元素已
2022-03-21 12:53:43
500
原创 Java IO
//--------------------------INPUT READER---------------------------------// static class fs { public BufferedReader br; StringTokenizer st = new StringTokenizer(""); public fs() { this(System.in); } public fs(InputStre
2022-02-26 21:24:43
280
原创 Codeforces Round #770 (Div. 2) B. Fortune Telling
题目链接:点击跳转题意: 有一个长度为n的数组a,对于数组中的每个数,有两种操作方法,1.x + a, 2. x ^ a(^为异或符),Alice开始拥有的数为x,Bob拥有的数为x+3,每个人必须从数组a的开始到结束每个数选择一种方式进行操作,问谁的数能变成y(题目保证成立)。思路: 每一个数都有两种操作可能max(n) = 1e5,那么可能性有2的1e5次,但是仔细想想发现,不管是异或或是加上,对于最后一位数的二进制的结果是相同的(1 + 1(发生进位位数变回0) = 1 ^ 1, 0 + 1 =
2022-02-07 15:00:45
734
原创 Codeforces Round #770 (Div. 2) C. OKEA
题目链接:点击跳转题意: 商店有n排货架,每排有m个位置能装货物,货物的价格从1到n*m(每个价格一个),店里有一个机器人会从货架每一行的头开始取价格,每取一个价格加上后会计算平均价格,但是这个机器人很特殊,他遇到带小数的数字时会故障,问有没有排列能使机器人不会出现故障思路: 构建等差数列,根据行数的奇偶性来排列数字(如第一行:1 3 5 7 9, 1 3含两个1 和一个2,那么是2的倍数,1 3 5,含3个1和3个2,那么是3的倍数,以此类推),那么怎么判断不成立的情况呢,可以计算我们构建数列的最大值
2022-02-07 14:40:36
674
原创 2022牛客寒假算法基础集训营3 C 智乃买瓜(another version)
题目链接:点击跳转题意::和上题的区别就是现在是已知每个重量的西瓜能有多少种取法,求该组西瓜的重量(答案不唯一)思路::从前往后处理,如果当前这个重量增加了西瓜,因为可以买半个,那么一定会影响到前面的值导致错误,所以每个重量都认为从半个西瓜得到的,每增加一个使用上一题的dp(链接:点击跳转)来记录当前西瓜所能组成的数量,然后和输入数据比较,如果不够,就继续添加。代码如下:#include<bits/stdc++.h>using namespace std;typedef long
2022-01-29 18:48:05
1099
原创 2022牛客寒假算法基础集训营3 B 智乃买瓜
题目链接:点击跳转题意:有n个西瓜,每个可以买整个和买半个,问如果他想要购买西瓜的重量和分别为k=1,2,3…M时,有多少种购买西瓜的方案。思路:将每个西瓜和已经买下的使用dp进行组合,注意半个和整个要独立存入代码如下:#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD = 1e9 + 7;const int N = 1e3 + 5e2;signed main() {
2022-01-29 18:39:26
802
原创 牛客练习赛95 C-Division
题目链接:点击跳转题意:给出一个长度为n的数组,每次可以取长度大于等于k的一段对里面的数除二(向下取整),问能不能将里面所有数变为1代码:def get_ans(self): # 计算该数几次操作后变为1 ans = -1 # 因为是变为1,所以要减去一次 while self: ans += 1 self >>= 1 return ansdef main(): T = int(input()) N = 10
2022-01-21 14:17:58
504
原创 牛客练习赛95 B-Non-interger Area
题目链接:点击跳转题意:题目给出n个x,y坐标都是整数的点(有重复点),问存在几种选法可以使得选取的三角形面积不是整数思路:画完图后发现,如果三角形的三个顶点都在整数坐标上,那么构成的三角形面积就相当于左下右上(左上右下一样)构成的一个矩形,减去多余的两个或者三个三角形的面积后剩下的,因为构成的三角形边长均为整数,那么减去的面积只有两种情况,整数,或者带0.5的小数。然后把所有点归纳一下,可以分为四类:x奇y奇,x奇y偶,x偶y奇,x偶y偶,算了一些数据后发现,每个同类的点至多在构成三角形中只能出现一次
2022-01-21 13:21:14
560
原创 Hdu3038 How Mang Answers Wrong
题目链接: 点击跳转题意:题目会先输入n,m,分别表示有n个节点,m个回答,每个回答会告诉你节点l到节点r之间权值的总和(包含l,r),当然,回答不一定是对的,需要我们根据输入顺序判断是否有错即可。思路:使用sum数组记录子节点到父节点的总和(l需要减一,因为l的权值也是包含在内的),构建带权并查集,合并时注意因为两根节点合并会出现一条反边,即sum[find(l)] = - sum[a] + sum[b] + v;所以这个权值是要被减去的,然后判断是否合理是看两个点在同一颗树上时,两者的差值与输
2021-11-24 20:24:49
216
转载 unordered_map的哈希模板
模板来源:HKer_YM的博客struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >&g
2021-11-17 19:55:22
231
转载 主席树模板
模板来源:HKer_YM的博客1求区间第k大#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 2e5 + 5;const ll MOD = 100000007;ll a[MAXN], b[MAXN], n, m, q, sz;int lc[MAXN << 5], rc[MAXN << 5], rt[MAXN << 5], sum[M
2021-11-17 19:51:05
206
原创 KMP算法模板
const int MAXN = 1e5 + 5e2;int Next[MAXN];char str1[MAXN], str2[MAXN]; //这里以str1为母串,str2为子串void getNext() { Next[0] = -1; int len = strlen(str2); int j = 0; int k = -1; while (j < len) { if (k == -1 || str2[j] == str2[k]
2021-11-17 19:41:19
100
原创 网络流模板(更新中)
1.dinicconst int MAXN = 2e3 + 5;const int INF = 0x3f3f3f3f;struct Edge{ int to,val,nxt;}e[MAXN];int head[MAXN], deep[MAXN];int n, m, s, t, cnt;ll res;inline void init() { for (int i = 1; i <= n; i++) head[i] = -1; cnt = 0;}inli
2021-11-17 19:20:08
161
转载 马拉车算法模板
模板来源:HKer_YM的博客1.求最长回文长度或回文子串个数//求回文串的个数inline int Manacher(string s){ //转换字符串 memset(hw, 0, sizeof(hw)); int len = s.length(); string nowString = "$#"; for(int i = 0; i < len; i++){ nowString += s[i]; nowString +
2021-11-16 22:01:52
302
原创 并查集模板
const int MAXN = 1e5 + 5e2;int bin[MAXN];inline int find (int x) { return bin[x] == x ? x : (bin[x] = find(bin[x]); }inline void merge(int a, int b) { int fa = find(a); int fb = find(b); if (fa != fb) { bin[fa] = fb; }}
2021-11-16 21:57:48
85
转载 各种筛模板
模板来源:HKer_YM的博客1.线性筛// 复杂度: O(n)void init() { phi[1] = 1; for (int i = 2; i < MAXN; ++i) { if (!vis[i]) { phi[i] = i - 1; pri[cnt++] = i; } for (int j = 0; j < cnt; ++j) { if (1ll * i * pri[j] >= MAXN) break;
2021-11-16 19:03:33
348
原创 Hexo博客搭建
1.安装Nodejs我用的是ubuntu,所以直接apt$ sudo apt install nodejs1.2安装npmnpm是nodejs的包管理工具$ sudo apt install npm2.安装hexo这里建站是使用hexo快速生成的$ sudo npm install --unsafe-perm --verbose -g hexo2.1然后初始化$ hexo init blog$ cd blog$ hexo g$ hexo s3.安装pm2我这边是部署在服
2021-11-12 13:04:50
109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅