# ioaj
**Repository Path**: zyflzz/ioaj
## Basic Information
- **Project Name**: ioaj
- **Description**: 智能算法Java框架(持续更新中)
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2023-05-23
- **Last Updated**: 2023-06-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 智能算法Java版, 启发式算法, 智能算法
## README
# ioaj
#### 介绍
智能算法Java框架(持续更新中)
#### 框架内容
目前实现的优化算法有:
- 基于进化机制
- 遗传算法(GA)
- 基于物理原理
- 模拟退火算法(SAA)
- 引力搜索算法(GSA)
- 基于群体智能
- 粒子群算法(PSO)
- 蚁群算法(ACO)
- 灰狼算法(GWO)
- 布谷鸟算法(CS)
- 人工蜂群算法(ABC)
- 人工鱼群算法(AFSA)
- 萤火虫算法(FA)
#### 安装教程
可以先将项目下载到本地,然后执行 `mvn install`,这样就可以将项目添加到本地仓库中。使用时协上坐标即可
> 执行命令后,确认本地仓库有 `ioaj-1.0-SNAPSHOT.pom` 文件了,就说明添加成功了
```xml
com.github.zyf.ioaj
ioaj
1.0-SNAPSHOT
```
#### 使用说明
> 详细内容请参考文档,在document文件夹目录下,用浏览器打开index.html即可
有两种使用方法,一种是注解形式,一种是接口形式。
如果使用的是注解,例如
```java
package org.example;
import constant.annotation.com.github.zyf.ioaj.AlgorithmType;
import external.annotation.com.github.zyf.ioaj.Export;
import external.annotation.com.github.zyf.ioaj.IOA;
import external.annotation.com.github.zyf.ioaj.ObjectFunction;
/**
* @author zyf
*/
@IOA
public class TestClass {
@ObjectFunction(type = AlgorithmType.PSO, varNum = 2, lb = {-15, -15}, ub = {15, 15})
@Export(author = "zyf", title = "测试报告1")
public Double apply(Double[] p) {
return p[0] * p[0] + p[1] * p[1] - p[0] * p[1] - 10 * p[0] - 4 * p[1] + 60;
}
@ObjectFunction(type = AlgorithmType.SAA, varNum = 2, lb = {-15, -15}, ub = {15, 15})
@Export(author = "zyf", title = "测试报告2")
public Double apply2(Double[] p) {
return p[0] * p[0] + p[1] * p[1] - p[0] * p[1] - 10 * p[0] - 4 * p[1] + 60;
}
}
```
其中 `@IOA` 注解表示当前类是需要植入优化算法的类,添加该注解后后续操作方能有效;
`@ObjectFunction` 注解表示当前方法是目标函数,输入必须的参数后,就可以把当前方法作为目标函数进行寻优;
`@Export` 注解表示当前方法需要一些计算报告(在实现原理上,计算报告的计算和纯计算是分开来的),开发者可以根据需要,进行一些报告导出活动(不添加这个注解则无法导出报告)。
> 如果您不想使用注解,那么您的目标函数需要是 `com/github/zyf/ioaj/algorithm/Function.java` 类型(当然,这个接口是您需要实现的),
> 然后按照 `com/github/zyf/ioaj/algorithm/Input.java` 所定义的格式设置参数,接下来就可以选择您需要的算法运算器了。例如:
>
> ```java
> package org.example;
>
> import algorithm.com.github.zyf.ioaj.Function;
> import algorithm.com.github.zyf.ioaj.Input;
> import swarmintelligence.algorithm.com.github.zyf.ioaj.PSO;
>
> public class Test {
>
> public void main() {
> Function function = new Function() {
> @Override
> public double apply(double[] p) {
> return p[0] * p[0] + p[1] * p[1] - p[0] * p[1] - 10 * p[0] - 4 * p[1] + 60;
> }
> };
> double[] lb = {-15.0, -15.0};
> double[] ub = {15.0, 15.0};
> Input input = new Input(function, 2, lb, ub);
> PSO pso = new PSO(input);
> pso.go();
> System.out.println(pso.getOutput().toString());
> }
> }
> ```
运行方法例如
```java
package org.example;
import algorithm.com.github.zyf.ioaj.Output;
import processor.annotation.com.github.zyf.ioaj.IOAProcessor;
import java.util.Map;
/**
* @author zyf
*/
public class Main {
public static void main(String[] args) {
// 扫描整个类,并打印计算结果
Map outputList = IOAProcessor.execute(TestClass.class);
for (Map.Entry entry : outputList.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue().toString());
}
// 指定函数,打印计算结果
Output output = IOAProcessor.execute(TestClass.class, "apply");
System.out.println(output.toString());
// 打印报告
AbstractExport abstractExport = IOAProcessor.export(TestClass.class, "apply2");
System.out.println(abstractExport.export());
}
}
```
即使用 `IOAProcessor` 作为驱动,
`IOAProcessor.execute(Class clazz)` 可以一键执行这个类的所有目标函数,返回的是以函数名为键、计算输出为值的`HashMap`。
也可以使用 `IOAProcessor.execute(Class clazz, String methodName)` 执行指定名称的函数。
对应地,使用 `IOAProcessor.abstractExport(Class clazz)` 可以一键导出这个类的所有算法计算报告;
使用 `IOAProcessor.abstractExport(Class clazz, String methodName)` 导出指定函数的算法计算报告。
具体用法可以参考文档。
#### 参与贡献
如果您想对该项目做出一些贡献,您可以
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
或者邮箱联系我:3399465887@qq.com