<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Awesomewan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Awesomewan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Awesomewan]]></copyright><item><title><![CDATA[PPO算法损失函数的设计]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/144851658</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/144851658</guid><author>Awesomewan</author><pubDate>Tue, 31 Dec 2024 15:57:48 +0800</pubDate><description><![CDATA[在讲解 PPO（Proximal Policy Optimization） 算法的优化目标之前，我们先用一个贴近生活的例子来类比它的核心思想，看看为什么要这样设计，以及它解决了什么问题。]]></description><category></category></item><item><title><![CDATA[PPO算法拆解]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/144843324</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/144843324</guid><author>Awesomewan</author><pubDate>Tue, 31 Dec 2024 10:41:51 +0800</pubDate><description><![CDATA[像学徒制作披萨一样：学徒（Actor-Critic 网络）在不同的状态（环境观测）做出不同决策（动作），得到不同反馈（奖励）。像记录流水账：每一步操作都记录在 storage 中，以便后续反思与学习。像定期复盘：等学徒完成一段时间练习，就进行一次PPO更新（update），在这过程中分析旧做法与新做法的差异，用“剪切”等安全措施避免学徒一下子完全推翻自己之前的经验。持续循环：多次“做批量披萨→记录→复盘更新”，学徒的“脑子”慢慢就学会了做出更好的披萨，动作也更合理，分数越来越高。]]></description><category></category></item><item><title><![CDATA[priority_queue的使用方法]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/141787370</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/141787370</guid><author>Awesomewan</author><pubDate>Sun, 01 Sep 2024 18:01:54 +0800</pubDate><description><![CDATA[默认情况下，priority_queue 是一个最大堆（即大元素有更高的优先级），但有时候我们需要最小堆（即小元素有更高的优先级）或者自定义优先级顺序。这可以通过自定义比较函数或仿函数来实现。最小堆的实现// 创建一个最小堆的 priority_queue// 插入元素pq.push(5);// 输出并移除堆顶元素while (!// 输出堆顶元素pq.pop();// 移除堆顶元素return 0;自定义排序。]]></description><category></category></item><item><title><![CDATA[STL相关总结]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/141496621</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/141496621</guid><author>Awesomewan</author><pubDate>Sat, 24 Aug 2024 11:27:34 +0800</pubDate><description><![CDATA[STL（Standard Template Library，标准模板库）是 C++ 标准库中的一个重要组成部分。STL 提供了一组通用的模板类和算法，极大地简化了数据结构和算法的使用。STL 的设计思想是基于泛型编程，允许用户在不牺牲效率的情况下，使用高度抽象的通用数据结构和算法。]]></description><category></category></item><item><title><![CDATA[数据的IO和复用]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/131125679</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/131125679</guid><author>Awesomewan</author><pubDate>Fri, 09 Jun 2023 13:32:40 +0800</pubDate><description><![CDATA[poll()函数的机制与select()类似，管理多个描述符也是进行轮询，根据描述符的状态进行处理，但是poll()没有最大文件描述符数量的限制（但是数量过大后性能也是会下降）。对于send()函数和write()函数之间的差别是表示发送方式的flag，当flag为0时，send()函数和write()函数完全一致。Linux操作系统中的IO函数主要有read()、write()、recv()、send()、recvmsg()、sendmsg()、readv()、writev()。]]></description><category></category></item><item><title><![CDATA[本地进程间通信]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/130747200</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/130747200</guid><author>Awesomewan</author><pubDate>Thu, 18 May 2023 15:01:58 +0800</pubDate><description><![CDATA[在使用socket()函数创建套接字时，当需要在本地进程间进行通信而不涉及网络传输时，可以使用AF_UNIX或AF_LOCAL作为domain参数的取值。使用Unix域套接字时，可以通过指定文件系统中的一个路径作为套接字的地址，不同进程可以通过该路径来进行通信。常见的应用场景包括在同一台计算机上的进程间通信、服务器进程与其它进程间的通信等。总结来说，当需要在本地进程间进行通信，不涉及网络传输时，可以使用AF_UNIX或AF_LOCAL作为domain参数的取值，并使用Unix域套接字来实现进程间通信。]]></description><category></category></item><item><title><![CDATA[常用的设计模式之二（行为型模式）]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/130487284</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/130487284</guid><author>Awesomewan</author><pubDate>Thu, 04 May 2023 15:35:47 +0800</pubDate><description><![CDATA[这个示例中，Subject 定义了主题类的接口，包括添加、删除观察者和通知观察者的方法, ConcreteSubject 继承了 Subject，并实现了具体的主题类，其中 setState 方法改变主题的状态，并调用 notify 方法通知所有观察者；然后定义一个模板方法，其中包含了一个算法的骨架，它通过调用基类中的方法来实现算法的各个步骤。模板模式的优点在于它使得算法的框架和具体实现分离，降低了实现算法的难度和维护成本，并且可以在不改变算法结构的情况下，方便地扩展和修改算法的具体实现。]]></description><category></category></item><item><title><![CDATA[基于UDP协议的接受和发送]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/130078563</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/130078563</guid><author>Awesomewan</author><pubDate>Fri, 14 Apr 2023 09:24:04 +0800</pubDate><description><![CDATA[UDP协议（User Daagram Protocol）是无连接的，不可靠的网络协议。本章将介绍如何使用UDP协议进行程序设计，对UDP编程的基本框架进行介绍并给出程序设计的例子。]]></description><category></category></item><item><title><![CDATA[TCP网络编程基础]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/130075701</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/130075701</guid><author>Awesomewan</author><pubDate>Tue, 11 Apr 2023 09:48:46 +0800</pubDate><description><![CDATA[TCP协议（Transmission Control Protocol）是TCP/IP协议中很重要的一个协议，是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是一种端到端的协议，即它只在通信的两个端点之间起作用，并且不保证数据包的交付。TCP协议是一种可靠的协议，它通过确认和重传机制来保证数据传输的可靠性。]]></description><category></category></item><item><title><![CDATA[主机字节序和网络字节序]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/130067719</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/130067719</guid><author>Awesomewan</author><pubDate>Mon, 10 Apr 2023 20:04:40 +0800</pubDate><description><![CDATA[网络字节序采用大端字节序，即高位字节存放在内存的低地址端，低位字节存放在内存的高地址端。但由于网络的特点是将Internet上不同的网络设备和主机进行连接和通信，这决定了使用网络进行开发的程序要兼容于各式各样的设备，同一个数据在不同的设备上要有唯一的含义。例如，对于十六进制数0x12345678，大端字节序将其存储为0x12 0x34 0x56 0x78，而小端字节序将其存储为0x78 0x56 0x34 0x124。字节序是计算机存储多字节数据的方式，目前主流的方式有两种：大端字节序和小端字节序。]]></description><category></category></item><item><title><![CDATA[opencv入门知识略讲]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129873551</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129873551</guid><author>Awesomewan</author><pubDate>Fri, 31 Mar 2023 11:11:09 +0800</pubDate><description><![CDATA[【代码】opencv入门知识略讲。]]></description><category></category></item><item><title><![CDATA[深入浅出 Fast DDS网络协议（入门篇）]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129851586</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129851586</guid><author>Awesomewan</author><pubDate>Thu, 30 Mar 2023 12:14:47 +0800</pubDate><description><![CDATA[如果你是机器人领域的学者，那一定听说过ROS1和ROS2，但这两个有什么区别呢？ROS1作为一个通信中间件，在两两节点建立TCP/UDP连接之前，通过发布者和订阅者通过xmlRPC和master进行数据交换和查询，待匹配到相同的需求（topic）时，Master向订阅者提供发布者的地址和信息，然后两者再通过xmlRPC进行建立TCP/UDP的连接。但是，在ROS1在工业领域并不能满足实时、安全、认证、可靠。所以在ROS2中引入了FastDDS网络协议。]]></description><category></category></item><item><title><![CDATA[CMake项目实战指令详细分析]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129822607</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129822607</guid><author>Awesomewan</author><pubDate>Wed, 29 Mar 2023 12:35:28 +0800</pubDate><description><![CDATA[CMake是一个跨平台的自动化构建系统，可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件，如Makefile、VisualStudio等。CMake主要是编写CMakeLists.txt文件，然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件，最后用make命令编译源码生成可执行程序或共享库（so (shared object)）。]]></description><category></category></item><item><title><![CDATA[C++并发编程之五 高级线程管理]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129579408</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129579408</guid><author>Awesomewan</author><pubDate>Thu, 16 Mar 2023 22:04:05 +0800</pubDate><description><![CDATA[线程池是一种管理多个线程的技术，它可以减少线程的创建和销毁的开销，提高并发性能。线程池中有一定数量的空闲线程，当有新的任务到来时，就从池中分配一个线程来执行任务，当任务完成后，线程返回池中等待下一个任务。这样可以避免频繁地创建和销毁线程，节省资源和时间。在前面我们引入了线程的通信和同步手段，那么为什么还要引入线程池呢？]]></description><category></category></item><item><title><![CDATA[C++编程之 可变参数模板]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129592193</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129592193</guid><author>Awesomewan</author><pubDate>Thu, 16 Mar 2023 21:25:33 +0800</pubDate><description><![CDATA[在这个函数中，我们使用展开语句来展开args参数包，将参数包中的每个元素展开成一个独立的语句std::cout ]]></description><category></category></item><item><title><![CDATA[C++17编程之 折叠表达式]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129598085</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129598085</guid><author>Awesomewan</author><pubDate>Thu, 16 Mar 2023 21:17:19 +0800</pubDate><description><![CDATA[折叠表达式是一种新的语言特性，它使得可以对包含若干个参数的可变参数模板进行操作，同时将其所有参数合并成一个值。比如，如果你用减法或除法作为一元右折叠的操作符，那么你得到的结果可能和你预期的不一样。（4）当一元折叠表达式中的参数包为空时，只有三个运算符（&& || 以及逗号）有缺省值，其中&&的缺省值为true,||的缺省值为false，逗号的缺省值为void()。（3）初始值在右边的为右折叠，展开之后从右边开始折叠。折叠表达式共有四种语法形式，分别为一元的左折叠和右折叠，以及二元的左折叠和右折叠。]]></description><category></category></item><item><title><![CDATA[C++编程之 std::forward]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129582548</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129582548</guid><author>Awesomewan</author><pubDate>Thu, 16 Mar 2023 12:12:24 +0800</pubDate><description><![CDATA[当向wrapper里面传入1的时候，wrapper推导认为T是一个右值引用int&& ，通过引用折叠原则，int && + && =int&& ，相当于wrapper(int&& arg)，同时我们知道了T推导为int&&，那么在向func传递的时候，就是func(std::forward<int&&>(arg))，那么func会以左值引用的形式func(int&& x)调用arg。对于一个模板函数或类模板，当传递一个参数时，如果该参数是左值，那么传递的就是一个左值引用；]]></description><category></category></item><item><title><![CDATA[C++编程之 万能引用]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129582022</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129582022</guid><author>Awesomewan</author><pubDate>Thu, 16 Mar 2023 11:03:08 +0800</pubDate><description><![CDATA[万能引用是一种可以同时接受左值或右值的引用，它的形式是T&&，其中T是一个模板参数。万能引用不是C++的一个新特性，而是利用了模板类型推导和引用折叠的规则来实现的功能。你可以看到，在调用g时，t既可以绑定到左值上也可以绑定到右值上，并且保持了原来实参的属性。这就实现了万能引用。模板类型推导是指在调用一个模板函数时，编译器会根据传入的实参来推导出模板参数的类型。结合这两个规则，我们就可以理解万能引用的工作原理。]]></description><category></category></item><item><title><![CDATA[C++并发编程之四 内存模型和原子操作]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129497515</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129497515</guid><author>Awesomewan</author><pubDate>Wed, 15 Mar 2023 17:36:03 +0800</pubDate><description><![CDATA[这样会浪费时间和空间。需要注意的是，在test_and_set()和clear()方法中，我们都使用了内存序参数std::memory_order_acquire和std::memory_order_release，这是为了确保对内存的访问是有序的。除此之外，std::atomic<>泛化模板还支持一些其他的操作，如fetch_add、fetch_sub、fetch_and、fetch_or、fetch_xor等，这些操作可以原子地执行加法、减法、按位与、按位或和按位异或等运算，并返回操作前的值。]]></description><category></category></item><item><title><![CDATA[C++并发编程之三 并发操作的同步]]></title><link>https://blog.youkuaiyun.com/Awesomewan/article/details/129427897</link><guid>https://blog.youkuaiyun.com/Awesomewan/article/details/129427897</guid><author>Awesomewan</author><pubDate>Thu, 09 Mar 2023 22:46:58 +0800</pubDate><description><![CDATA[C++并发编程实战三]]></description><category></category></item></channel></rss>