使用Python播放MIDI音符
使用 Python 播放 MIDI Note
方法一:使用music21
123456789101112import music21 as m21def play_note(pitch="C4", length=2, velocity=127, instrument='Piano'): note_1 = m21.note.Note(pitch, quarterLength=length) note_1.volume.velocity = velocity stream_1 = m21.stream.Stream() if instrument == 'Piano': stream_1.append(m21.instrument.Piano()) # stream_1.insert(0, m21.instrument.Piano()) stream_1.append(note_1) s_player = m21.midi.realtime.StreamPlaye ...
群体智能优化算法
群体智能优化算法
研究背景
群体智能优化算法(Swarm Intelligence Optimization Algorithm)是计算智能中的一种常用算法,其基本理论是模拟自然界中鱼群、鸟群、蜂群、狼群和细菌群等动物群体的行为,利用群体间的信息交流与合作,通过简单有限的个体间互动来达到优化的目的。
群体智能(Swarm Intelligence, SI)由Gerardo Beni和Jing Wang于1989年首次提出,是研究由大量简单个体构成的群体系统的学科。与个体的智能相比,这些群体系统往往并没有复杂精细的内部设计,但基于简单的个体与规则,它们具有更强的鲁棒性、稳定性和适应性。群体智能方法处理的最典型问题就是优化问题。优化问题的基础性能够较为直观地体现群体方法的理论特性,辅助其理论研究,同时也具有重要的应用价值,进一步推动了群体智能算法的发展。与传统的优化算法相比,基于仿生学的群体智能优化算法本质上是一种概率并行搜索算法。其寻优速度更快,能更有效地搜索复杂优化问题的全局最优解。
常见的群体智能优化算法有蚁群算法(Ant Colony Optimization,ACO)、粒子群 ...
群体智能优化算法之鲸鱼优化算法
鲸鱼优化算法
鲸鱼群体
鲸鱼是世界上最大的哺乳动物,是有情感的高智商动物,大部分鲸鱼被认为是食肉动物且群居。座头鲸是最大的长须鲸之一,它们使用一种独特的捕猎方式来猎食虾群和鱼群,被称为泡泡网(Bubble-net)捕猎方式,如图4、图5所示。它们在捕食时以螺旋式逼近猎物,吐出气体形成气泡,迫使鱼群聚集以方便捕食。鲸鱼优化算法便是受启发于鲸鱼(特别是座头鲸)的捕猎方式。
图4:“泡泡网”捕猎示意图,引用自论文《The whale optimization algorithm》
图5:座头鲸捕猎场景
模型与算法
鲸鱼优化算法与灰狼优化算法相似,都采用对目标位置先进行包围再捕食的策略。不同点在于鲸鱼优化算法直接将当前最优解作为包围中心,且鲸鱼优化算法的捕猎逼近过程分为两种,第一种逐步降低距离,另一种以螺旋形逼近。鲸鱼优化算法的基本位置更新方式与灰狼优化算法相同,见灰狼优化算法公式(1)至(4)。
鲸鱼优化算法基于一个随机数p∈[0,1]来决定当前搜索单元的行动,有50%的概率直接根据目标位置进行移动,有50%的概率以螺旋线逼近猎物。鲸鱼在捕猎时的行为被定义为:
X⃗(t+1)={X ...
群体智能优化算法之灰狼优化算法
灰狼优化算法
灰狼群体
灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物圈食物链的顶端。灰狼大多喜欢群居,每个群体中平均有5至12只狼。灰狼群体有着严格的社会等级制度,如图1所示,其中α是狼群的领导者,负责所有决策;β协助α进行决策,必要时进行接替,地位仅次于α;δ则服从于α和β,负责放哨、侦察等事务;ω处于社会底层,是不可缺少的普通狼,负责种群内部关系的平衡。
图1:灰狼的等级制度,引用自论文《Grey Wolf Optimizer》
集体狩猎是灰狼的一种社会行为,社会等级在集体狩猎过程中发挥着重要的作用,捕食的过程在α的带领下完成。主要包括三个步骤:1)跟踪和接近猎物;2)骚扰、追捕和包围猎物,直到它停止移动;3)攻击猎物。灰狼的集体狩猎行为如图2所示。
图2:灰狼集体狩猎行为,引用自论文《Grey Wolf Optimizer》
模型与算法
灰狼优化算法的主要思路是假设α、β、δ更了解猎物的潜在位置,即优化问题的决策空间中最佳解决方案所在的位置,其他灰狼个体依据α、β、δ的位置来更新其自身位置,逐渐逼近猎物(最优解)。算法直接将前3匹适应度最高的狼分别定义为α,β和 ...
非侵入式教务系统辅助选课方法
注意:该方法仅可用于替代手动刷新页面并选择课程,不影响选课的公平性
下载安装“按键精灵”
运行软件后,在新建脚本中选择新建空白脚本
进入脚本后选择上方“普通”旁边的“源文件”,并粘贴入如下内容。
12345678910d = 30000MoveTo 1285,376LeftClick 1Delay 1000MoveTo 293,538LeftClick 1Delay 1000MoveTo 1756, 246LeftClick 1Delay d
(注意三处MoveTo后的坐标分别为“查询”按钮、查询结果中第一项课程前的勾选框,“提交”按钮的坐标位置,不同电脑按钮坐标可能不同,可用软件里的“抓抓”功能获取各个按钮的坐标并进行修改)
完成脚本后保存退出
按电脑键盘上相应热键可启动或停止脚本,热键可设置
使用时需先进入“自由选课”,并在搜索框中输入想选课程的全称,然后启动脚本
使用脚本时不能使用电脑做其他事
时间设置为30s抢一次,可更改
可按顺序加入更多勾选框坐标,以实现同一时间抢多门具有相同特征的课程(例如网课)
— 2019年12月
使用Python读取和播放音频文件
暂时记录两种方式,分别为使用“pydub+ffmpeg+simpleaudio”和“librosa+simpleaudio”,推荐第二种
使用pydub库读取音频、simpleaudio库播放音频
环境配置
Windows10环境下
pip install pydub
pip install simpleaudio
安装ffmpeg
从https://www.gyan.dev/ffmpeg/builds/下载ffmpeg(压缩包),解压后将bin文件所在位置加入Path环境变量,并在相应程序中添加一行代码。具体操作参考以下三个链接:
https://blog.csdn.net/qq_38161040/article/details/91654183
https://cloud.tencent.com/developer/article/1702673
https://www.freesion.com/article/6184901177/
注意该步骤不是用pip安装
重启计算机!(重要)
代码示例
12345678910111213141516171819 ...
Git使用方法
将代码上传至Github的方法以及提升下载速度的方法
向新建仓库首次上传代码
注意事项
2020年10月1日起,github默认主分支从master更名为main
在使用git前应使用指令
1git config --global init.defaultBranch main
将本地默认分支设置为main
上传步骤
在当前文件夹下初始化 git
1git init
将文件添加至缓存区,"."代表文件夹下的全部内容(新建及修改过的文件)
1git add . 或 git add 文件名
将缓存区的内容提交到本地仓库,“xxx"是此次提交内容的注释,例如"First commit”
1git commit -m "xxx"
查看当前状态
1git status
将本地仓库与远程仓库连接
1git remote add origin git@github.com:xxx/xxx.git
如果远程仓库为空(不含README等初始文件),使用如下指令上传
1git push -u origin main
否则使用以下指令上传
1 ...
算法竞赛部分算法(二)算法模板
常用算法模板(C/C++)
整理于 NOIP2016 前 - Written by WZW
定义部分
1234567891011121314151617181920#define MAXN 10005#define MAXM 10005using namespace std;int n,m;struct edge_ {int to,next,w;}edge[MAXM*2];int first[MAXN],et;int dis[MAXN],vis[MAXN];int low[MAXN],dfn[MAXN],tim,belong[MAXN],now;int p[MAXN],eu[MAXN];bool f[MAXN];struct bian_ {int u,v,w;}bian[MAXM];int fa[MAXN];int root,from[MAXN];int rd[MAXN];int anc[MAXN][16],deep[MAXN];int A[MAXN],B[MAXN],cnt;queue <int> Q;stack <int ...
算法竞赛部分算法(一)算法简介
本文写于2015年暑假,当年文笔稚嫩,且内容并不全面,仅供参考。总结内容包括搜索、图论、动态规划、数据结构与数论等。
搜索
DFS
深度优先搜索(Depth-first Search,DFS),基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。可以在数列中进行搜索,也可在坐标系中进行搜索。
BFS
广度优先搜索(Breadth-First Search,BFS),基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。
优缺点
DFS:对于解决遍历和求所有问题有效,对于问题搜索深度小的时候处理速度迅速,然而在深度很大的情况下效率不高
BFS:对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元用来存储状态)。
剪枝
由于时间和空间的局限性,搜索一般只能解决数据量小的问题。所以我们需要用不同的方法剪枝。剪枝方法包括:
记忆化搜索(与DP类似);
从方法上剪枝,如采用分枝定 ...
ASR (自动语音识别)初探
ASR实验及记录
DeepSpeech2
DeepSpeech2是一个采用PaddlePaddle平台的端到端自动语音识别引擎的开源项目,具体原理参考论文Baidu’s Deep Speech 2 paper。
环境配置
使用官方镜像,运行失败。原因:PaddlePaddle版本不匹配,缺少RNN模块等关键组件;尝试进行修改后发现CUDNN版本也不匹配;
使用带有正确版本CUDA与CUDNN的镜像,手动安装PaddlePaddle,安装成功后clone DeepSpeech2项目,根据setup.sh进行相关依赖的安装与配置。注意镜像中缺少git、swig等基础命令或依赖包的安装,需通过apt-get进行安装。
数据准备及使用方式:
下载BaiduCN1.2k Model语音模型与Mandarin LM Small语言模型;
自行准备manifest文件,其中包括每条音频的存储路径,音频时长与数据标签(文本)。文本中不能含有标点符号、英文字母与阿拉伯数字。格式为:{“audio_filepath”: “”, “duration”: , “text”: “”}
使 ...