《死寂的QQ》

作者在虚拟世界中漫步已有12年之久,寻找着心灵的寄托。在寂静的角落里,他期待着某人的出现,但这份期待最终只化为一颗干涸的灵魂。他通过伤感的文字回忆过往的美好与无奈,表达出对缘分的理解与随缘的心态。
我的Q龄已经12岁了
因为你们,我才会在这里
寻寻觅觅的走在这个虚拟的世界
我在每个角落里等待徘徊
寂静的心灵期盼着你的闪烁
静静幻想你莅临时的场景
你却再也没有点燃我的心芳
守候了多少个花开花落的季节
我们不在有共同的期盼
生命在奔放,时间在蒸发
最后只剩下一颗干涸的灵魂在路上
我用伤感的眼神注视着
那些过往的美好与无奈
有缘、无缘、惜缘、随缘
于是
写下这孤寂的诗幻
等待下一个相逢的地点
……
【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
这个数据库的使用是不是还要配套修改一下其它代码,比如地块生成? 地块生成:using UnityEngine; using System.Collections; using System.Collections.Generic; public class 地块生成系统 : MonoBehaviour { public 地块数据库 数据库; public 聊天系统 聊天系统; private Coroutine 生成协程 = null; private HashSet<(int X, int Y)> 已生成坐标 = new HashSet<(int X, int Y)>(); private Queue<(int X, int Y)> 边缘队列 = new Queue<(int X, int Y)>(); [Header("外出模式生成配置")] public float 地块生成间隔 = 5f; [System.Serializable] public class 生态类型Config { public string 名称; public float 权重; public string[] 变异型; public bool Is极低频 => 名称 == "文明遗骸" || 名称 == "乐园" || 名称 == "死寂岭"; } private 生态类型Config[] 所有生态类型 = new 生态类型Config[] { new 生态类型Config { 名称 = "森林", 权重 = 20 }, new 生态类型Config { 名称 = "草原", 权重 = 20 }, new 生态类型Config { 名称 = "荒漠", 权重 = 20 }, new 生态类型Config { 名称 = "咸水", 权重 = 20 }, new 生态类型Config { 名称 = "淡水", 权重 = 20 }, new 生态类型Config { 名称 = "湿地", 权重 = 10 }, new 生态类型Config { 名称 = "地下洞穴", 权重 = 10 }, new 生态类型Config { 名称 = "巨树", 权重 = 3 }, new 生态类型Config { 名称 = "文明遗骸", 权重 = 1 }, new 生态类型Config { 名称 = "乐园", 变异型 = new[] {"森林", "草原", "荒漠", "咸水", "淡水", "湿地", "地下洞穴", "巨树", "文明遗骸"} }, new 生态类型Config { 名称 = "死寂岭", 变异型 = new[] {"森林", "草原", "荒漠", "咸水", "淡水", "湿地", "地下洞穴", "巨树", "文明遗骸"} } }; public void 处于外出模式() { if (生成协程 != null) { StopCoroutine(生成协程); 生成协程 = null; } 生成协程 = StartCoroutine(生成单次地块()); } private IEnumerator 生成单次地块() { Debug.Log("🔍 开始一次性地块生成"); yield return StartCoroutine(生成单个地块()); } private IEnumerator 生成单个地块() { Debug.Log("🔍 开始单次地块生成:检查初始地块状态"); if (数据库.地块列表.Count == 0) { var 初始地块 = new 地块Data { 序号 = 1, X = 0, Y = 0, 生态类型 = 获取随机生态类型() }; Debug.Log($"🔍 初始地块生态类型:{初始地块.生态类型},请求AI生成详情"); yield return StartCoroutine(请求AI生成内容(初始地块)); 数据库.添加地块(初始地块); 已生成坐标.Add((初始地块.X, 初始地块.Y)); 更新边缘队列(初始地块.X, 初始地块.Y); Debug.Log($"✅ 初始地块生成完成:序号{初始地块.序号},坐标({初始地块.X},{初始地块.Y})"); } else { if (边缘队列.Count == 0) { Debug.LogWarning("⚠️ 地图已填满,无法继续生成地块"); yield break; } List<(int X, int Y)> 候选 = new List<(int X, int Y)>(); while (边缘队列.Count > 0) { var coord = 边缘队列.Dequeue(); if (!已生成坐标.Contains(coord)) { 候选.Add(coord); } } if (候选.Count == 0) { Debug.LogWarning("⚠️ 无法找到可生成的空位,跳过本次生成"); yield break; } var coordToUse = 候选[UnityEngine.Random.Range(0, 候选.Count)]; var 新地块 = new 地块Data { 序号 = 数据库.地块列表.Count + 1, X = coordToUse.X, Y = coordToUse.Y, 生态类型 = 获取随机生态类型(coordToUse.X, coordToUse.Y) }; Debug.Log($"🔍 新地块信息:序号{新地块.序号},坐标({新地块.X},{新地块.Y}),生态类型{新地块.生态类型},请求AI生成详情"); yield return StartCoroutine(请求AI生成内容(新地块)); 数据库.添加地块(新地块); 已生成坐标.Add((新地块.X, 新地块.Y)); 更新边缘队列(新地块.X, 新地块.Y); Debug.Log($"✅ 新地块生成完成:序号{新地块.序号},坐标({新地块.X},{新地块.Y})"); } } private void 更新边缘队列(int x, int y) { var 候选 = new List<(int X, int Y)> { (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1) }; foreach (var coord in 候选) { if (!已生成坐标.Contains(coord)) { 边缘队列.Enqueue(coord); } } } private string 获取随机生态类型(int x = 0, int y = 0) { bool 周围有极低频 = false; foreach (var 地块 in 数据库.地块列表) { if ((Mathf.Abs(地块.X - x) + Mathf.Abs(地块.Y - y)) == 1 && (地块.生态类型.Contains("文明遗骸") || 地块.生态类型.Contains("乐园") || 地块.生态类型.Contains("死寂岭"))) { 周围有极低频 = true; break; } } List<生态类型Config> 可选类型 = new List<生态类型Config>(); foreach (var 类型 in 所有生态类型) { if (类型.Is极低频 && 周围有极低频) continue; 可选类型.Add(类型); } float 总权重 = 0; foreach (var 类型 in 可选类型) { 总权重 += 类型.权重; } float 随机值 = UnityEngine.Random.Range(0f, 总权重); foreach (var 类型 in 可选类型) { if (随机值 <= 类型.权重) { if (类型.变异型 != null && 类型.变异型.Length > 0) { string 原型 = 类型.变异型[UnityEngine.Random.Range(0, 类型.变异型.Length)]; return $"{类型.名称}({原型})"; } return 类型.名称; } 随机值 -= 类型.权重; } return "森林"; } private IEnumerator 请求AI生成内容(地块Data 地块) { string 提示词 = $@"你是一个生态科考AI助手,现在要生成一个新的地块信息。 该地块序号为 {地块.序号},坐标为 ({地块.X}, {地块.Y}),生态类型为:{地块.生态类型}。 请根据以下要求生成内容: - 描述:简洁的环境描述(1~2句话) - 生物列表:至少3种生物(可以是动物、植物、菌类) 返回格式为 JSON,示例格式如下: {{ ""描述"": """", ""生物列表"": [""狼"", ""兔子"", ""蘑菇""] }}"; Debug.Log($"📤 发送AI请求(地块{地块.序号}):{提示词}"); AIManager.Instance.发送消息给AI(提示词); while (AIManager.Instance.当前回复 == null) { yield return null; } string AI回复 = AIManager.Instance.当前回复; Debug.Log($"📥 AI返回地块{地块.序号}信息:\n{AI回复}"); try { var 数据 = JsonUtility.FromJson<地块Data>(AI回复); 地块.描述 = 数据.描述; 地块.生物列表 = 数据.生物列表; } catch (System.Exception ex) { Debug.LogError($"❌ 解析AI回复失败(地块{地块.序号}): " + ex.Message); } AIManager.Instance.当前回复 = null; string 开场白提示词 = $@"你是一个生态科考AI助手,现在需要为以下地块生成一段开场白。 地块信息: - 序号:{地块.序号} - 坐标:({地块.X}, {地块.Y}) - 生态类型:{地块.生态类型} - 描述:{地块.描述} - 生物列表:{string.Join(", ", 地块.生物列表)} 请生成一段开场白,用于用户接受聊天邀请后显示在聊天框中。 "; Debug.Log($"📤 发送AI请求(地块{地块.序号}开场白):{开场白提示词}"); AIManager.Instance.发送消息给AI(开场白提示词); while (AIManager.Instance.当前回复 == null) { yield return null; } string 开场白 = AIManager.Instance.当前回复; Debug.Log($"📥 AI返回地块{地块.序号}开场白:\n{开场白}"); AIManager.Instance.当前回复 = null; var 临时数据 = new 地块临时信息 { 地块 = 地块, 开场白 = 开场白 }; 发出聊天邀请(临时数据); } private void 发出聊天邀请(地块临时信息 临时数据) { 聊天邀请管理器.Instance.显示邀请(临时数据.开场白, () => { 聊天系统.打开聊天窗口(临时数据.地块); }); } }
08-31
非常棒的问题! 是的,**你当前的 `地块生成系统` 还没有集成我们新增的 `边缘队列数据库`**,所以即使你创建了这个数据库,它也不会自动生效,**需要你对生成逻辑进行一些关键性的修改**,以实现: - 启动时从 `边缘队列数据库` 恢复边缘队列状态 - 生成新地块时更新 `边缘队列数据库` - 程序退出或每次生成后保存 `边缘队列数据库` --- ## ✅ 修改目标: 1. 引入 `边缘队列数据库` 字段 2. 在 `Start()` 中从数据库加载边缘队列 3. 在生成地块后更新并保存 `边缘队列数据库` 4. 确保队列中不会出现重复坐标 --- ## ✅ 修改后的完整代码(已标注修改点) ```csharp using UnityEngine; using System.Collections; using System.Collections.Generic; public class 地块生成系统 : MonoBehaviour { public 地块数据库 数据库; public 边缘队列数据库 边缘数据库; // ✅ 新增:边缘队列数据库引用 public 聊天系统 聊天系统; private Coroutine 生成协程 = null; private HashSet<(int X, int Y)> 已生成坐标 = new HashSet<(int X, int Y)>(); private Queue<(int X, int Y)> 边缘队列 = new Queue<(int X, int Y)>(); [Header("外出模式生成配置")] public float 地块生成间隔 = 5f; [System.Serializable] public class 生态类型Config { public string 名称; public float 权重; public string[] 变异型; public bool Is极低频 => 名称 == "文明遗骸" || 名称 == "乐园" || 名称 == "死寂岭"; } private 生态类型Config[] 所有生态类型 = new 生态类型Config[] { new 生态类型Config { 名称 = "森林", 权重 = 20 }, new 生态类型Config { 名称 = "草原", 权重 = 20 }, new 生态类型Config { 名称 = "荒漠", 权重 = 20 }, new 生态类型Config { 名称 = "咸水", 权重 = 20 }, new 生态类型Config { 名称 = "淡水", 权重 = 20 }, new 生态类型Config { 名称 = "湿地", 权重 = 10 }, new 生态类型Config { 名称 = "地下洞穴", 权重 = 10 }, new 生态类型Config { 名称 = "巨树", 权重 = 3 }, new 生态类型Config { 名称 = "文明遗骸", 权重 = 1 }, new 生态类型Config { 名称 = "乐园", 变异型 = new[] {"森林", "草原", "荒漠", "咸水", "淡水", "湿地", "地下洞穴", "巨树", "文明遗骸"} }, new 生态类型Config { 名称 = "死寂岭", 变异型 = new[] {"森林", "草原", "荒漠", "咸水", "淡水", "湿地", "地下洞穴", "巨树", "文明遗骸"} } }; private void Start() { // ✅ 如果已有地块数据,从数据库恢复已生成坐标 foreach (var 地块 in 数据库.地块列表) { 已生成坐标.Add((地块.X, 地块.Y)); } // ✅ 从边缘队列数据库恢复边缘坐标 if (边缘数据库 != null) { var 所有坐标 = 边缘数据库.获取所有坐标(); foreach (var coord in 所有坐标) { if (!已生成坐标.Contains(coord)) { 边缘队列.Enqueue(coord); 已生成坐标.Add(coord); } } } } public void 处于外出模式() { if (生成协程 != null) { StopCoroutine(生成协程); 生成协程 = null; } 生成协程 = StartCoroutine(生成单次地块()); } private IEnumerator 生成单次地块() { Debug.Log("🔍 开始一次性地块生成"); yield return StartCoroutine(生成单个地块()); } private IEnumerator 生成单个地块() { Debug.Log("🔍 开始单次地块生成:检查初始地块状态"); if (数据库.地块列表.Count == 0) { var 初始地块 = new 地块Data { 序号 = 1, X = 0, Y = 0, 生态类型 = 获取随机生态类型() }; Debug.Log($"🔍 初始地块生态类型:{初始地块.生态类型},请求AI生成详情"); yield return StartCoroutine(请求AI生成内容(初始地块)); 数据库.添加地块(初始地块); 已生成坐标.Add((初始地块.X, 初始地块.Y)); 更新边缘队列(初始地块.X, 初始地块.Y); Debug.Log($"✅ 初始地块生成完成:序号{初始地块.序号},坐标({初始地块.X},{初始地块.Y})"); // ✅ 初始生成后保存边缘队列 保存边缘队列(); } else { if (边缘队列.Count == 0) { Debug.LogWarning("⚠️ 地图已填满,无法继续生成地块"); yield break; } List<(int X, int Y)> 候选 = new List<(int X, int Y)>(); while (边缘队列.Count > 0) { var coord = 边缘队列.Dequeue(); if (!已生成坐标.Contains(coord)) { 候选.Add(coord); } } if (候选.Count == 0) { Debug.LogWarning("⚠️ 无法找到可生成的空位,跳过本次生成"); yield break; } var coordToUse = 候选[UnityEngine.Random.Range(0, 候选.Count)]; var 新地块 = new 地块Data { 序号 = 数据库.地块列表.Count + 1, X = coordToUse.X, Y = coordToUse.Y, 生态类型 = 获取随机生态类型(coordToUse.X, coordToUse.Y) }; Debug.Log($"🔍 新地块信息:序号{新地块.序号},坐标({新地块.X},{新地块.Y}),生态类型{新地块.生态类型},请求AI生成详情"); yield return StartCoroutine(请求AI生成内容(新地块)); 数据库.添加地块(新地块); 已生成坐标.Add((新地块.X, 新地块.Y)); 更新边缘队列(新地块.X, 新地块.Y); Debug.Log($"✅ 新地块生成完成:序号{新地块.序号},坐标({新地块.X},{新地块.Y})"); // ✅ 生成新地块后保存边缘队列 保存边缘队列(); } } private void 保存边缘队列() { if (边缘数据库 != null) { 边缘数据库.清空(); // 清空旧数据 foreach (var coord in 边缘队列) { 边缘数据库.添加边缘坐标(coord.X, coord.Y); } 边缘数据库.保存为JSON("地块数据"); // 保存到文件 } } private void 更新边缘队列(int x, int y) { var 候选 = new List<(int X, int Y)> { (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1) }; foreach (var coord in 候选) { if (!已生成坐标.Contains(coord)) { 边缘队列.Enqueue(coord); 已生成坐标.Add(coord); } } } private string 获取随机生态类型(int x = 0, int y = 0) { bool 周围有极低频 = false; foreach (var 地块 in 数据库.地块列表) { if ((Mathf.Abs(地块.X - x) + Mathf.Abs(地块.Y - y)) == 1 && (地块.生态类型.Contains("文明遗骸") || 地块.生态类型.Contains("乐园") || 地块.生态类型.Contains("死寂岭"))) { 周围有极低频 = true; break; } } List<生态类型Config> 可选类型 = new List<生态类型Config>(); foreach (var 类型 in 所有生态类型) { if (类型.Is极低频 && 周围有极低频) continue; 可选类型.Add(类型); } float 总权重 = 0; foreach (var 类型 in 可选类型) { 总权重 += 类型.权重; } float 随机值 = UnityEngine.Random.Range(0f, 总权重); foreach (var 类型 in 可选类型) { if (随机值 <= 类型.权重) { if (类型.变异型 != null && 类型.变异型.Length > 0) { string 原型 = 类型.变异型[UnityEngine.Random.Range(0, 类型.变异型.Length)]; return $"{类型.名称}({原型})"; } return 类型.名称; } 随机值 -= 类型.权重; } return "森林"; } private IEnumerator 请求AI生成内容(地块Data 地块) { string 提示词 = $@"你是一个生态科考AI助手,现在要生成一个新的地块信息。 该地块序号为 {地块.序号},坐标为 ({地块.X}, {地块.Y}),生态类型为:{地块.生态类型}。 请根据以下要求生成内容: - 描述:简洁的环境描述(1~2句话) - 生物列表:至少3种生物(可以是动物、植物、菌类) 返回格式为 JSON,示例格式如下: {{ ""描述"": """", ""生物列表"": [""狼"", ""兔子"", ""蘑菇""] }}"; Debug.Log($"📤 发送AI请求(地块{地块.序号}):{提示词}"); AIManager.Instance.发送消息给AI(提示词); while (AIManager.Instance.当前回复 == null) { yield return null; } string AI回复 = AIManager.Instance.当前回复; Debug.Log($"📥 AI返回地块{地块.序号}信息:\n{AI回复}"); try { var 数据 = JsonUtility.FromJson<地块Data>(AI回复); 地块.描述 = 数据.描述; 地块.生物列表 = 数据.生物列表; } catch (System.Exception ex) { Debug.LogError($"❌ 解析AI回复失败(地块{地块.序号}): " + ex.Message); } AIManager.Instance.当前回复 = null; string 开场白提示词 = $@"你是一个生态科考AI助手,现在需要为以下地块生成一段开场白。 地块信息: - 序号:{地块.序号} - 坐标:({地块.X}, {地块.Y}) - 生态类型:{地块.生态类型} - 描述:{地块.描述} - 生物列表:{string.Join(", ", 地块.生物列表)} 请生成一段开场白,用于用户接受聊天邀请后显示在聊天框中。 "; Debug.Log($"📤 发送AI请求(地块{地块.序号}开场白):{开场白提示词}"); AIManager.Instance.发送消息给AI(开场白提示词); while (AIManager.Instance.当前回复 == null) { yield return null; } string 开场白 = AIManager.Instance.当前回复; Debug.Log($"📥 AI返回地块{地块.序号}开场白:\n{开场白}"); AIManager.Instance.当前回复 = null; var 临时数据 = new 地块临时信息 { 地块 = 地块, 开场白 = 开场白 }; 发出聊天邀请(临时数据); } private void 发出聊天邀请(地块临时信息 临时数据) { 聊天邀请管理器.Instance.显示邀请(临时数据.开场白, () => { 聊天系统.打开聊天窗口(临时数据.地块); }); } } ``` --- ## ✅ 修改说明: | 修改点 | 说明 | |--------|------| | `public 边缘队列数据库 边缘数据库;` | 添加引用 | | `Start()` 中加载边缘队列 | 从数据库恢复边缘坐标 | | `保存边缘队列()` 方法 | 每次生成新地块后保存边缘队列 | | `生成单个地块()` 中调用 `保存边缘队列()` | 实现持久化 | | `更新边缘队列()` 不变 | 逻辑不变,只是队列来源变为数据库 | --- ## ✅ 使用说明: 1. 在 Unity 编辑器中创建一个 `边缘队列数据库.asset` 文件 2. 将它拖到 `地块生成系统` 的 `边缘数据库` 字段 3. 运行游戏,生成地块后关闭 Unity,再打开时边缘队列应已恢复 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值