# 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