首页
关于
Search
1
同步本地Markdown至Typecho站点
151 阅读
2
微服务
48 阅读
3
动态图神经网络
46 阅读
4
苍穹外卖
44 阅读
5
JavaWeb——后端
38 阅读
后端学习
md_files
项目
杂项
科研
论文
默认分类
登录
推荐文章
推荐
拼团设计模式
项目
1年前
0
12
0
推荐
拼团交易系统
项目
1年前
0
43
1
推荐
Smile云图库
项目
1年前
0
62
0
热门文章
151 ℃
同步本地Markdown至Typecho站点
项目
1年前
0
151
0
48 ℃
微服务
后端学习
1年前
0
48
0
46 ℃
动态图神经网络
论文
1年前
0
46
0
最新发布
2026-04-11
证明
... 当且仅当权值服从均匀分布时,$\eta$ 取得理论最大值: $$\eta_{\max} = \frac{1}{2(K-1)}. \] **上述分析确立了重构算法的理论性能上界。** 然而,物理网络显著的低幅值密集特性使得其实际容限 $\eta(\mathcal{C}_{\text{phy}}) \ll \eta_{\max}$。这一**“容限鸿沟(Tolerance Gap)”**揭示了线性策略在长尾分布下的失效机制,并直接导出了本文的核心思路:利用非线性 $\mu$ 律变换将物理空间的密集分布映射为变换域内的类均匀分布,从而逼近理论最优容限。$$
科研
zy123
昨天
0
0
0
2026-04-11
PCA降维
PCA 1. 核心目的 以少胜多:用最少的维度(特征),保留原始数据中最重要的信息。 2. 核心假设(PCA 的世界观) 方差 = 信息:PCA 认为,数据变化越大(方差越大)的方向,包含的信息越多;反之,如果数据在某个方向上一动不动,那个方向就是无用的(或噪声)。 数据挤在一起 = 没有信息:如果全班同学的数学成绩都是 90 分(数据不分散),那“数学成绩”这个特征就没法用来区分好学生和差学生,它就是无用的。 数据分散 = 信息丰富:如果成绩从 30 分到 100 分都有(数据很分散),这个特征就非常有价值。 线性关系:PCA 假设数据的主要特征是可以通过线性的坐标旋转找到的。 3. 运作逻辑(三步走) 换视角(坐标变换):不再沿用原来的 x, y, z 轴,而是重新建立一套坐标系。 找主次(最大方差): 第一主成分 (PC1):找到数据拉得最长、波动最大的方向。 第二主成分 (PC2):在与 PC1 垂直(正交)的方向中,找波动最大的。 (以此类推,保证新特征之间互不干扰/无相关性) 做减法(投影截断):保留排在前面的几个主成分(比如前 2 个),把后面那些波动很小的主成分直接丢弃。 示例 学生 数学 (x) 物理 (y) 特点 A 2 3 学渣 B 3 4 也是学渣 C 5 5 普通人 D 8 7 学霸 E 9 8 超级学霸 第一步:中心化 (移到原点) PCA 不喜欢处理偏离原点的数据。我们算出平均分(数学 5.4,物理 5.4),然后把所有人的分数减去平均分。 目的:让数据的中心变成 $(0,0)$,方便旋转坐标轴。 效果:C 同学变成了 $( -0.4, -0.4)$,接近原点。 学生 新数学 (x′) 新物理 (y′) 含义解读 A -3.4 -2.4 比平均分低很多 (都在第三象限) B -2.4 -1.4 比平均分低一些 C -0.4 -0.4 非常接近原点 (0,0),代表普通人 D 2.6 1.6 比平均分高一些 E 3.6 2.6 比平均分高很多 (都在第一象限) 第二步:找主成分 (寻找新坐标轴) 现在把这 5 个点画在图上。你会发现这些点并不是乱跑的,而是沿着一条斜线(左下到右上)排列。 因为数学和物理在这个例子里同等重要,且变化幅度相似,PCA 算出的方向向量大约是: 数学的权重 ($w_1$):0.71 物理的权重 ($w_2$):0.71 注:这两个数在数学上叫“特征向量”,且 $0.71^2 + 0.71^2 \approx 1$(单位向量)。 PCA 会自动找到两条新的坐标轴: PC1(第一主成分):沿着数据分布最长的那条斜线。 $$PC1得分 = (\text{中心化数学} \times 0.71) + (\text{中心化物理} \times 0.71)$$ 含义:这代表了“理科综合能力”。(分数高的一起高,低的描述一起低)。 方差:数据在这个方向上拉得很开(方差大),保留了 95% 的信息。 PC2(第二主成分):垂直于 PC1 的方向。 含义:这代表了“偏科程度”(比如数学比物理好多少)。 方差:数据在这个方向上波动很小(大家数学物理差值都不大),只占 5% 的信息。 第三步:投影与降维 (做减法) 现在我们决定从 2 维降到 1 维。 因为 PC1 包含了 95% 的信息,而 PC2 只有 5%(可能是因为那天考试状态的小波动),我们决定保留 PC1,扔掉 PC2。 我们将所有点垂直投影到 PC1 这条线上。 第四步:得到新数据(1维) 现在的学生数据不再是 $(x, y)$ 两个数了,而是一个新的数值 $z$(他们在 PC1 轴上的坐标)。 学生 中心化数学 (x′) 中心化物理 (y′) 计算过程 (投影) 新数值 (z) 状态 A -3.4 -2.4 $(-3.4 \times 0.71) + (-2.4 \times 0.71)$ -4.12 低 B -2.4 -1.4 $(-2.4 \times 0.71) + (-1.4 \times 0.71)$ -2.70 低 C -0.4 -0.4 $(-0.4 \times 0.71) + (-0.4 \times 0.71)$ -0.57 中 D +2.6 +1.6 $(+2.6 \times 0.71) + (+1.6 \times 0.71)$ +2.98 高 E +3.6 +2.6 $(+3.6 \times 0.71) + (+2.6 \times 0.71)$ +4.40 极高 **为什么可以这样?**只要两个特征之间有很强的关系,PCA 就可以把它们合并成一个维度。
科研
zy123
昨天
0
0
0
2026-04-11
Untitled
Untitled
md_files
zy123
昨天
0
0
0
2026-01-20
OMNet仿真
OMNeT仿真 初始安装配置 🧩 第 0 步:下载和安装 OMNeT++ 选择版本: 👉 OMNeT++ 6.0.1 或 6.0.2(官方 Windows 兼容) 下载地址(官网): https://omnetpp.org/download/ 安装步骤概述: 下载 ZIP → 解压 打开 mingwenv.cmd(这个是必须的环境) 在弹出的终端执行: ./configure make 然后运行 omnetpp 就会启动图形化 IDE(Eclipse)。 这个过程大概 10–20 分钟。 第 1 步:下载 INET 框架 推荐与你的 OMNeT++ 版本兼容: OMNeT++ 6.x → 用 INET 4.5.x 下载 INET: https://github.com/inet-framework/inet/releases 解压后你会看到 INET 根目录。 在同样的 mingwenv 环境中运行: cd inet source setenv make makefiles make -j4 等待几分钟。 导入 INET 到 OMNeT++ IDE 在 OMNeT++ IDE 中: File → Import → 选择General文件夹 → Existing Projects into Workspace 选择 INET 根目录 → Finish 你的工程列表里会看到 INET。 网络仿真 第 0 步:打开IDE 进入你的 OMNeT++ 安装目录,双击 omnetpp.exe 第 1 步:创建你的项目 在 IDE 里: File → New → OMNeT++ Project → Empty Project 项目名:TrafficPrediction Finish 设置 TrafficPrediction 依赖 INET(非常关键) 现在手动设置 INET 依赖: 右键 TrafficPrediction 点击 Properties 左侧选 Project References 在右边勾选 inet 第 2 步:创建文件夹、文件 项目结构如下: UdpDemo/ │ ├── simulations/ │ ├── SimpleUdpNetwork.ned ← 网络拓扑(重点) │ ├── omnetpp.ini ← 仿真配置(重点) │ └── package.ned ← 自动生成(可以忽略) │ ├── src/ ← 本 demo 不需要写 C++,这个空着 │ └── Makefile ← OMNeT++ 自动管理 SimpleUdpNetwork.ned // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see http://www.gnu.org/licenses/. // package udpdemo.simulations; import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator; import inet.node.inet.StandardHost; import inet.node.inet.Router; network SimpleUdpNetwork { submodules: configurator: Ipv4NetworkConfigurator { } hostA: StandardHost { @display("p=100,200"); } router: Router { @display("p=300,200"); } hostB: StandardHost { @display("p=500,200"); } connections allowunconnected: hostA.pppg++ <--> { delay = 1ms; datarate = 100Mbps; } <--> router.pppg++; router.pppg++ <--> { delay = 1ms; datarate = 100Mbps; } <--> hostB.pppg++; } omnetpp.ini [General] network = udpdemo.simulations.SimpleUdpNetwork sim-time-limit = 30s # 自动 ARP,减少日志噪声 **.arp.typename = "GlobalArp" # HostA 配置一个 UDP 发送应用 *.hostA.numApps = 1 *.hostA.app[0].typename = "UdpBasicApp" *.hostA.app[0].destAddresses = "hostB" *.hostA.app[0].destPort = 5000 *.hostA.app[0].messageLength = 1000B *.hostA.app[0].sendInterval = 1s *.hostA.app[0].startTime = 1s # HostB 配置一个 UDP 接收器 *.hostB.numApps = 1 *.hostB.app[0].typename = "UdpSink" *.hostB.app[0].localPort = 5000 第 3 步:编译项目 菜单: Project → Build All 第 4 步:运行仿真 右键 omnetpp.ini: Run As → OMNeT++ Simulation 运行后你会看到: hostA 每秒发出一个 UDP 包 hostB 收到包 router 转发 可以点击连接查看流量、抓包 可以打开 Result 分析包数吞吐量 命令行模式 第一步:修改 omnetpp.ini Cmdenv 如果不加限制,会在屏幕上疯狂打印每一条日志,这比图形界面还慢。请确保你的 [General] 部分包含以下设置: [General] # ... (你的其他配置) ... # ============================================================ # Cmdenv 性能优化配置 # ============================================================ cmdenv-express-mode = true # 开启极速模式 cmdenv-performance-display = false # 关闭性能数据显示 (CPU/内存占用等),进一步减少I/O cmdenv-status-frequency = 10s # 每10秒才在屏幕上打印一次进度,防止刷屏 **.cmdenv-log-level = off # 彻底关闭模块的文本日志输出 (最关键的一行) # 确保不记录 eventlog (体积巨大且拖慢速度) record-eventlog = false 第二步:选择运行方式 1)在顶部菜单栏,点击 Run -> Run Configurations...。 2)在左侧栏找到 OMNeT++ Simulation,展开它,点击你的运行配置(通常叫 TrafficPrediction 或者 omnetpp.ini)。 3)在右侧面板中,点击 User Interface 选项卡(或者叫 Qt/CmdEnv tab)。 4)找到 User Interface 下拉菜单,将 Qtenv (图形界面) 改为 Cmdenv (命令行)。 5)点击右下角的 apply->Run。
科研
zy123
1月20日
0
7
0
2025-10-29
Cursor使用
Cursor 插件、环境安装 1)Chinese (Simplified) Language Pack,中文界面插件。 2)Extension Pack for Java 只要安装了 “Extension Pack for Java”,其它插件(Maven、Debugger、Language Support、Test Runner、Project Manager 等)都是它自动帮你装好的,不需要你一个个手动点安装。 这样打开项目文件夹(包含 pom.xml 的根目录)时: 它会自动检测项目类型 → 加载 Maven → 解析依赖。底部出现 Java: Ready、Building [Done],说明依赖已经下载并索引完毕。默认使用的是系统环境变量MAVEN_HOME的地址。 或者在这里指定: 自动选择jdk版本: 查看pom中配置,Cursor 会用这个版本作为编译目标。 <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> 运行时版本由“系统环境或 Cursor 配置”决定,系统变量里的 JAVA_HOME,就是 你系统默认使用的 JDK。随便打开一个终端 java -version ,可以看到使用的是jdk17。 3) Spring Boot Extension Pack 左侧多出一个 Spring Boot Dashboard; 自动识别所有带 @SpringBootApplication 的项目; 可以直接在面板里点击 ▶️ 启动; application.yml会出现智能提示,比如: spring.datasource.url spring.datasource.username spring.datasource.password 4)IntelliJ IDEA Keybindings 装上它之后,你在 Cursor 里按的快捷键和 IDEA 几乎一样; 5)“Want to launch Cursor from the command line? You can add the code or cursor commands now, or later with Ctrl+Shift+P and typing ‘install code command’.” 这是一个 可选的小功能提示,翻译:“想要从命令行启动 Cursor 吗?你可以现在添加 code 或 cursor 命令,也可以之后按 Ctrl + Shift + P,输入 install code command 来添加。” 作用:直接通过命令行(例如 PowerShell、CMD、终端),打开项目或文件。 cursor . 表示: 用 Cursor 打开当前文件夹(.) 或者:cursor C:\project\group-buying-sys 表示: 用 Cursor 打开指定路径下的项目。 如何查看配置? Ctrl+shift+P 快捷键,输入 open user settings 可以打开用户配置。 输入 project setting 可以打开项目配置文件 或者左下角JAVA PROJECTS,点击Configure JAVA Runtime: 运行JAVA项目 Maven编译 运行 1)打开启动类,点击run/debug 2) 编辑器界面 ┌────────────────────────────────────────────┐ │ 顶部菜单栏(File / 编辑 / 选择 / 查看...)│ ├────────────────────────────────────────────┤ │ 左侧侧边栏(文件树 / 项目 / Git 等) │ ├────────────────────────────────────────────┤ │ 中间主编辑区(代码编辑) │ ├────────────────────────────────────────────┤ │ 右侧 AI 面板(Cursor 智能助手 / Chat) │ ├────────────────────────────────────────────┤ │ 底部状态栏(分支 / 文件类型 / 行列信息等) │ └────────────────────────────────────────────┘ 如何使用 Cursor 的 AI 功能 功能 作用 快捷键(默认) 🧠 Inline Edit 选中一段代码 → Ctrl + K(或右键 “Ask Cursor”)→ 输入自然语言指令(如“优化正则表达式”) Ctrl + K 🤖 Agent 面板 打开一个“聊天窗口”,直接和 Cursor 对话(如“帮我写个登录验证函数”) Ctrl + I ✨ Tab 补全 在代码中输入时,Cursor 自动预测后续内容 Tab 🔁 重新生成建议 当灰色提示出现但不理想时,按 `Alt + ``(或右键 “Regenerate”) `Alt + `` 选择一段代码+CTRL+K 修改指定的代码,直接在代码编辑区弹出修改窗口调用大模型。CTRL+ENTER 或者鼠标点击 应用修改 CTRL+N 或者 **鼠标点击 **拒绝修改 CTRL+I 1)图中设置的Auto表示自动选择模型; 2)@ 可以添加文件、文件夹到当前对话上下文,如果你在代码编辑区选择一段代码再 CTRL+I 或者 CTRL+L,也会自动将它添加进来。还可以直接拖拽资源管理器中的文件到AI对话框中。 3)+Browser 模式可以让模型看到整个项目文件 任务 你可以直接问 Cursor 找函数定义 “verifyPassword 函数定义在哪个文件?” 查找引用 “verifyCode 被调用了多少次?” 理解架构 “帮我总结整个项目的模块结构。” 改代码 “把所有 JS 文件里的 var 改成 let。” 生成文档 “根据这个项目代码生成一份 README。” 4)对话模式 Agent模式,默认的对话模式,功能最全,AI 不仅能回答,还会“主动思考、规划和执行”。可以理解为:“帮我干活”的模式。 Plan 模式,它可以浏览整个项目文件,但不会直接改代码,而是会:把你的需求拆分成多个步骤;告诉你“下一步该干什么”;有时生成一份修改计划或脚本方案。 Ask 模式:问答模式,和网页版使用大模型一样。 TAB 一般注释起手,如果出现灰色预测文字时,直接 Tab 就能接受 AI 自动补全 ,按ESC可以拒绝这个建议;否则就是普通的缩进。 触发逻辑 传统 IDE(比如 VS Code、IntelliJ) 的补全是词法或语法级触发: 你输入 “pri” → 提示 “print()”; 它只是基于关键字匹配。 而 Cursor 的补全 是“语义级”的: AI 根据上下文 推断你下一步可能在做什么。 它会综合考虑: 当前光标前后的代码; 注释 / 函数签名; 文件名; 项目中的其他定义; 甚至最近你在这个 Tab 里做的事。 阶段 触发动作 AI 响应 检测阶段 监听输入变化(按键、换行、注释等) 分析上下文语义树(AST) 预测阶段 生成“意图向量” 模型推断用户下一步目标 展示阶段 在光标后显示灰色 ghost text 等待你按 Tab 接受 触发时机 类型 触发条件 示例 行为 函数触发 输入 function / def function check... 预测参数和函数体 控制语句触发 输入 if / for 等 if (phone) 预测条件或逻辑块 注释触发 输入 //、#、/** // 校验邮箱格式 按注释生成实现 模板触发 class / import / try class User 预测类体、导入内容 上下文模仿 类似已有代码块 第二个函数定义 模仿风格 文件结构触发 同名模块、utils utils. 补出函数名 空行预测 新行、缩进后 空一行 猜测下一个合逻辑语句 Index&Docs Codebase Indexing(代码索引): Cursor 会扫描整个项目文件夹; 提取文件路径、函数定义、类名、依赖关系; 生成语义向量(embeddings)并存储(只保存索引,不上传源代码)。 界面说明:索引完成度100%;已被索引的文件数量为 78; Index New Folders: 当你创建或添加新文件夹时,Cursor 是否自动索引它。 Ignore Files in .cursorignore: 告诉 Cursor 哪些文件不要被索引。类似.gitignore Docs(文档索引): 可以手动添加官方文档、API 文档、开发指南,让它当作参考知识。 添加一个 README.md 或内部 API 规范; 或添加外部文档(如一个 SDK 的文档网站); 之后在 Chat 里用 @doc 引用 如何撤销修改 在AI编辑窗口提问,应用修改,点击Accept 应用完之后,若想回退版本,可以点击提问右边的回撤箭头。 整体思路(重要) 1)先打开项目,然后用browser模式,让AI对这个项目生成一个 .cursorignore 文件,自动忽略哪些文件无需添加进上下文。 2)打开设置,Index&docs,重新索引一下。 3)把项目相关的需求文档、接口文档、技术文档,全部录入到docs中,作为知识库以作备用。这与项目代码文件夹解耦的。 4)在项目根目录下创建 .cursorrules 文件,不需要 @ 引用,自动生效。 .cursorrules 就是 Cursor 的 AI 指令与代码风格规则文件,用来告诉 AI:在这个项目里写代码、命名、注释、格式化时都按照这些规则来做。是一个 系统级提示词 。 eg: ai_behavior: - 所有回答必须使用中文 - 代码中添加必要的注释 style: indentation: 4 spaces naming_convention: variables: camelCase AI 背后接收到的系统指令:你是一个 Java 开发助手。 遵循以下项目规则: 所有回答必须使用中文。 代码中添加必要的注释。 使用 4 空格缩进。 变量名使用 camelCase。 用户请求: 「写一个计算阶乘的 Java 函数」。
杂项
zy123
1年前
0
10
0
1
2
...
13
下一页