如果你需要详细的解释,可以访问我的博客学习更详细的内容:点击我进行跳转
如果觉得代码不错可以为我点亮star,也可以关注我的博客https://blog.minloha.cn,这样我有什么新的项目就可以看到了!
- paper:运行环境,使用paper1.8核心,构建出来的插件应放入其中运行,IDEA配置运行项
- src:源代码
- main.java.cn.minloha
- Main.java主方法
- Type:向量、矩阵和通信的单例类
- NeuralWork:神经网络类,包括神经元、网络模型、激活函数与损失函数以及用于保存的DataClass类
- ModelLoader:模型加载器
- GetEvent:Minecraft的事件
- GetCommander:Minecraft的指令
- main.resources
- config.yml配置文件
- plugin.yml插件信息文件
- main.java.cn.minloha
神经网络统一使用NetWork进行管理,参数为:
NetWork net = new NetWork(输入维度,神经结构);
神经结构处使用折叠表达式,使用递减顺序排列,默认攻击事件发生的时候,神经结构为:
NetWork net = new NetWork(6,11,9,8,6,4,3);
注意:这里不要修改,模型会加载不出来
为了提升数据的表达能力,在多次的观察中排列出了最佳的稀疏特征,也就是相对距离和准星指向共两对三维向量:
// differ是传入神经网络的向量
differ.add(m_location.getX() - p_location.getX());
differ.add(fouce.getX() - p_location.getX()/2);
differ.add(m_location.getY() - p_location.getY());
differ.add(fouce.getY() - p_location.getY()/2);
differ.add(m_location.getZ() - p_location.getZ());
differ.add(fouce.getZ() - p_location.getZ()/2);
我们把坐标穿插排列,这样就可以有关联的训练了。在训练的过程一样会在控制台展示出实际输出标签,这点无需担心,我们可以根据标签最大值对应config.yml的内容判断它属于哪个类别,例如:
[Hamino]:(0.872256371,0.1273167283,0.182637843)
发现第一个标签值最大,那他的类别就是第一类,对应配置文件即可。
前向传播方法是一个重载,你可以加入预期的向量标签进行计算,然后返回损失值,或者仅使用differ进行计算,返回期望得标签向量:
// 1-损失 = 精度
double accessy = 1-net.forward(new Vector(differ), except);
平方损失函数的计算非常简单,我们需要传递两个向量,其中y2是预期,y1是神经网络的输出值:
public Double CovLoss(Vector y1,Vector y2){
// \frac{1}{2}\sum_i(y2_i-y1_i)^2
List<Double> temp = new ArrayList<>();
for(int d = 0;d<y1.getDimens();d++){
temp.add(y2.getAsList().get(d)-y1.getAsList().get(d));
}
Vector a = new Vector(temp);
Double res = Vector.Multiplicate(a,a)/2;
return res;
}
这是表达式的形式。最后我们说一下模型的输出,为了防止模型出现保存异常或者无法读取,请不要修改这部分代码:
public interface ModelLoad {
// 从文件中加载模型
public void LoadingInFile(String Filepath) throws IOException;
// 获取参数,为了区分神经网络和机器学习的参数,这里使用List<?>
public List<?> getParams();
// 保存模型
public void saveModel(String modelpath) throws IOException;
}
之后可能会写一个机器学习的算法,所以需要预留一个MLmodel.java用于加载机器学习的参数。
神经网络的模型后缀为.data,你可以使用txt方式打开,其中的参数都是使用这样的方式保存:
{
W:(0.0692548826,1.5395529970,0.1000000003,0.5461933367,0.0694943166,1.6509559252)
B:0.9999999999999175
}
W为权重矩阵,B为偏置,加载模型是按照前馈的顺序进行的,如果神经网络的结构不同,那无法加载模型。
当玩家进行PVP的时候一样可以调用模型,不过年前就不加分类了。
/*** hamino
* |- help // 获取帮助
* |- train start 分类 // 生成一个无限血量的僵尸, 进行训练,击打会有提示
* |- train stop (停止训练然后保存模型,下次继续用)
* `- test
*/
分类按照配置文件内的设置进行:
# Hamino配置文件
# Java没有办法调用显卡计算,所以模型训练需要使用CPU进行,训练请使用CPU性能好的机器训练。
# 之后会甩出几个API接口,大家可以尝试使用python-tensorflow训练.
# 模型格式见文档,输出请不要使用二进制(Java没有)
# 分类名就是外挂类型,最后会根据文件名进行提示作弊和封禁
# categories:
# - "Killaura"
# - "Reach"
categories:
- "normal"
- "killaura"
- "reach"
# 模型文件名务必与分类名严格一致(包括次序),这样代码就能少些两句了
# 模型保存在${server}/plugins/config/hamino下
# models:
# - "/Killaura.data"
# - "/Reach.data"
models:
- "v1.data"
加载对应类别的配置文件的时候,一定要让文件名和分类名一一对应,包括顺序,这样可以让我少写一些代码了,有需要也可以自己加点啥。
- 模型无法正确保存
- 模型无法正确加载
- 分类无法显示正确
- PVP计算需要优化,太卡了
- 模型表征能力还可以进步,更改计算公式即可
本插件在目前的阶段不收费,如果需要更多功能或者需要定制其他反作弊功能,可以去Q:2821163570,我会在有时间的情况下为您定制,肯定收费的哈。
插件仅供学习交流,不允许私自倒卖!